人脸检测 返回乱码
阿门111阿 发布于2018-02 浏览:1659 回复:5
0
收藏
新人刚入手,用的是C++的SDK,环境是虚拟机下的ubuntu 16.0.4,代码可以编译通过,但是运行后返回的结果是乱码,因为完全没有经验,所以我也不清楚是不是我代码缺少了哪些必要的步骤,还是说代码本身就是错误的,做的是人脸检测部分,希望大神帮我指正一下,以下是结果图:
收藏
点赞
0
个赞
共5条回复 最后由goJhou回复于2018-02
#6goJhou回复于2018-02

你把收到的流写成文本看看

0
#5阿门111阿回复于2018-02

但是我在文档里找不到这个28号编码

0
#4阿门111阿回复于2018-02

我将detect函数的调用结果打印出来,结果如下:

0
#3阿门111阿回复于2018-02

main函数以外的代码我是直接复制粘贴人脸检测API的例程代码,而main函数里面的代码则是复制粘贴SDK的例程代码,只有main函数体的第8行图片的路径和名字是自己修改的,app_id ,api_key ,secret_key 也是根据自己的修改的

0
#2阿门111阿回复于2018-02

附上代码如下:

#include
#include
#include
#include "face.h"
using namespace std;

const static std::string request_url = "https://aip.baidubce.com/rest/2.0/face/v1/detect";
static std::string detect_result;


/*curl发送http请求调用的回调函数,回调函数中对返回的json格式的body进行了解析,
解析结果储存在全局的静态变量当中*/
static size_t callback(void *ptr, size_t size, size_t nmemb, void *stream)
{
// 获取到的body存放在ptr中,先将其转换为string格式
detect_result = std::string((char *) ptr, size * nmemb);
return size * nmemb;
}


/*人脸探测,成功返回0,发生错误返回其他错误码*/
int detect(std::string &json_result, const std::string &access_token)
{
std::string url = request_url + "?access_token=" + access_token;
CURL *curl = NULL;
CURLcode result_code;
int is_success;
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, url.data());
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_httppost *post = NULL;
curl_httppost *last = NULL;
curl_formadd(&post, &last, CURLFORM_COPYNAME, "max_face_num", CURLFORM_COPYCONTENTS, "5", CURLFORM_END);
curl_formadd(&post, &last, CURLFORM_COPYNAME, "face_fields", CURLFORM_COPYCONTENTS,
"age,beauty,expression,faceshape,gender,glasses,landmark,race,qualities", CURLFORM_END);
curl_formadd(&post, &last, CURLFORM_COPYNAME, "image", CURLFORM_COPYCONTENTS, "【base64_img】", CURLFORM_END);

curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callback);
result_code = curl_easy_perform(curl);
if (result_code != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(result_code));
is_success = 1;
return is_success;
}

json_result = detect_result;
curl_easy_cleanup(curl);
is_success = 0;
} else {
fprintf(stderr, "curl_easy_init() failed.");
is_success = 1;
}

return is_success;
}

 


int main(void)
{
Json::Value result;

// 设置APPID/AK/SK
std::string app_id = "10700922";
std::string api_key = "vpzGzESC69rZv1ay4KZ1yw4O";
std::string secret_key = "GpPgQlE8GMxIiFVvLxpNltIXvVfuwSPQ";

aip::Face client(app_id, api_key, secret_key);

std::string image;
aip::get_file_content("/mnt/hgfs/linux_share/111.jpg", &image);

// 调用人脸检测
result = client.detect(image, aip::null);
//cout<
//打印返回的结果
cout<

// 如果有可选参数
//std::map options;
//options["max_face_num"] = "2";
//options["face_fields"] = "age";

// 带参数调用人脸检测
//result = client.detect(image, options);
//cout<

return 0;
}

0
TOP
切换版块