新人刚入手,用的是C++的SDK,环境是虚拟机下的ubuntu 16.0.4,代码可以编译通过,但是运行后返回的结果是乱码,因为完全没有经验,所以我也不清楚是不是我代码缺少了哪些必要的步骤,还是说代码本身就是错误的,做的是人脸检测部分,希望大神帮我指正一下,以下是结果图:
收藏
点赞
0
个赞
请登录后评论
TOP
切换版块
你把收到的流写成文本看看
但是我在文档里找不到这个28号编码
我将detect函数的调用结果打印出来,结果如下:
main函数以外的代码我是直接复制粘贴人脸检测API的例程代码,而main函数里面的代码则是复制粘贴SDK的例程代码,只有main函数体的第8行图片的路径和名字是自己修改的,app_id ,api_key ,secret_key 也是根据自己的修改的
附上代码如下:
#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;
}