c++ 调用人脸对比 总是返回222203错误
506963734 发布于2018-06 浏览:4068 回复:3
0
收藏

request_url = "https://aip.baidubce.com/rest/2.0/face/v3/match";

使用官方给的实例代码运行

static size_t callback(void *ptr, size_t size, size_t nmemb, void *stream) {
// 获取到的body存放在ptr中,先将其转换为string格式
match_result = std::string((char *)ptr, size * nmemb);
return size * nmemb;
}

int match(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;


fstream f1;
f1.open("F:/SocialSecurity/SocialSecurityClient/Win32/Release/SavePhotoes/1.bmp", ios::in | ios::binary);
f1.seekg(0, std::ios_base::end);
std::streampos sp = f1.tellg();
int size = sp;
char* buffer = (char*)malloc(sizeof(char)*size);
f1.read(buffer, size);
string imgBase64 = base64_encode(buffer, size);


fstream f2;
f2.open("F:/SocialSecurity/SocialSecurityClient/Win32/Release/SavePhotoes/2.bmp", ios::in | ios::binary);
f2.seekg(0, std::ios_base::end);
std::streampos sp2 = f2.tellg();
int size2 = sp2;
char* buffer2 = (char*)malloc(sizeof(char)*size2);
f2.read(buffer2, size2);
string img2Base64 = base64_encode(buffer, size2);


curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, url.data());
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Content-Type:application/json;charset=UTF-8");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);


curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);//绕过CA证书验证
Json::Value root;            // 表示整个 json 对象
Json::Value json_temp;    
json_temp["image"] = Json::Value(imgBase64); 
json_temp["image_type"] = Json::Value("BASE64");
//json_temp["face_type"] = Json::Value("CERT");//IDCARD 表示身份证芯片照:二代身份证内置芯片中的人像照片,
//json_temp["quality_control"] = Json::Value("LOW");
//json_temp["liveness_control"] = Json::Value("LOW");
Json::Value json_temp1;      // 临时对象,供如下代码使用
json_temp1["image"] = Json::Value(img2Base64); 
json_temp1["image_type"] = Json::Value("BASE64");
//json_temp1["face_type"] = Json::Value("CERT"); //LIVE:表示生活照:通常为手机、相机拍摄的人像图片、或从网络获取的人像图片等,
//json_temp1["quality_control"] = Json::Value("LOW");//NONE: 不进行控制
//json_temp1["liveness_control"] = Json::Value("LOW");
root.append(json_temp);
root.append(json_temp1);


std::string str = root.toStyledString();
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, str);


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 = match_result;
curl_easy_cleanup(curl);
is_success = 0;
}
else {
fprintf(stderr, "curl_easy_init() failed.");
is_success = 1;
}
return is_success;
}


int _tmain(int argc, _TCHAR* argv[])
{
std::string access_token = "24.9bf3d9a260b77708af327b004be3ae95.2592000.1531474680.282335-11393603";
//get_access_token(access_token,"f1rMi8N3e5D1GN8jIn7qRtK1","zmoPQqibVb06eMCjbG12YgXZ6SOhhg3Q");
std::string json_result;
match(json_result,access_token);
return 0;
}

运行总是返回 

{"error_code":222203,"error_msg":"image check fail","log_id":2574495975,"timestamp":1528883778,"cached":0,"result":null}

修改图片质量参数 各个参数都试了  也不行

谁知道这个该怎么解决呢?

收藏
点赞
0
个赞
共3条回复 最后由用户已被禁言回复于2022-06
#4独孤焰坤回复于2018-12

BASE64转码错了,string加上c_str()

需要的是const char *类型的

 

0
#3see7di回复于2018-12

我使用PHP試過base64和url兩種方式,全都失敗

0
#2506963734回复于2018-06

使用URL  可以成功   但是BASE64总是失败  python调用也是一样

0
TOP
切换版块