200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 调用百度人脸识别API进行人脸对比 C语言

调用百度人脸识别API进行人脸对比 C语言

时间:2024-08-30 13:57:46

相关推荐

调用百度人脸识别API进行人脸对比   C语言

百度人脸识别api使用是免费的,有人脸对比、人脸搜索、人脸检测与属性分析三个功能,本文写的是人脸对比。这里给出百度人脸对比api的技术文档,请点击网址/doc/FACE/s/Lk37c1tpf

另外需要注册百度智能云,获取API KeySecret Key,并用此获取accesss_token,方法是:将上述两个值填在下面网址的相应位置上,然后将这个网址输在浏览器中/oauth/2.0/token?grant_type=client_credentials&client_id=【API Key】&client_secret=【Seceret Key】。返回的是一串数据,将accesss_token的数据提出来

我们大概整理整理思路:

1、安装curl,本文不对其安装进行描述,此处转载一篇文章/ixiaoc/article/details/92764552

安装后在使用时可能会遇到curl/curl.h文件找不到的问题,这些问题在网上都能找到解决办法。再找三张人物照,两张相同的,一张不同

2、同时读取两张图片数据并进行base64编码

3、完善api并通过curl将数据发送,等待结果返回

4、换一张图片在进行,方法同3,等待数据返回

例程

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <curl/curl.h>const char * base64char = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";char *base64_encode(char * bindata, char * base64, int binlength)//base64编码函数{int i, j;unsigned char current;for (i = 0, j = 0; i < binlength; i += 3){current = (bindata[i] >> 2);current &= (unsigned char)0x3F;base64[j++] = base64char[(int)current];current = ((unsigned char)(bindata[i] << 4)) & ((unsigned char)0x30);if (i + 1 >= binlength){base64[j++] = base64char[(int)current];base64[j++] = '=';base64[j++] = '=';break;}current |= ((unsigned char)(bindata[i + 1] >> 4)) & ((unsigned char)0x0F);base64[j++] = base64char[(int)current];current = ((unsigned char)(bindata[i + 1] << 2)) & ((unsigned char)0x3C);if (i + 2 >= binlength){base64[j++] = base64char[(int)current];base64[j++] = '=';break;}current |= ((unsigned char)(bindata[i + 2] >> 6)) & ((unsigned char)0x03);base64[j++] = base64char[(int)current];current = ((unsigned char)bindata[i + 2]) & ((unsigned char)0x3F);base64[j++] = base64char[(int)current];}base64[j] = '\0';return base64;}int photo_size(char *path)//获取图片大小{FILE *fp = NULL;fp = fopen(path, "rb");if (NULL == fp){printf("open_error");exit(1);}fseek(fp, 0L, SEEK_END);//文件指针置尾int size = ftell(fp);//计算大小fclose(fp);return size;}int photo_base64(char *path1,char *path2, char *photo_base64_data1,char *photo_base64_data2)//对图片进行base64编码{FILE *fp1 = NULL,*fp2=NULL;char *buffer1,*buffer2;size_t result;int length;//打开图片int size1=photo_size(path1);fp1 = fopen(path1, "rb");if (NULL == fp1){printf("open_error");exit(1);}int size2=photo_size(path2);fp2 = fopen(path2, "rb");if (NULL == fp2){printf("open_error");exit(1);}//分配内存存储整个图片buffer1 = (char *)malloc(size1);if (NULL == buffer1){printf("memory_error");exit(2);}buffer2 = (char *)malloc(size2);if (NULL == buffer2){printf("memory_error");exit(2);}//将图片拷贝到bufferresult = fread(buffer1, 1, size1, fp1);if (result != size1){printf("reading_error");exit(3);}fclose(fp1);result = fread(buffer2, 1, size2, fp2);if (result != size2){printf("reading_error");exit(3);}fclose(fp2);//base64编码base64_encode(buffer1, photo_base64_data1, size1);length = strlen(photo_base64_data1);free(buffer1);base64_encode(buffer2, photo_base64_data2, size2);length = length+strlen(photo_base64_data2);free(buffer2);return length;}//数据发送int faceMatch(char *request_url,char *access_token,int *length,char *photo_base64_data1,char *photo_base64_data2) {char *mycurl=(char *)malloc(500);memset(mycurl,0,500);sprintf(mycurl,"%s?access_token=%s",request_url,access_token);//拼接网址与access_tokenCURL *curl = NULL;CURLcode result_code;int is_success;curl = curl_easy_init();char *buffer=(char *)malloc(*length+400);memset(buffer,0,*length+400);if (curl) {curl_easy_setopt(curl, CURLOPT_URL, mycurl);curl_easy_setopt(curl, CURLOPT_POST, 1);struct curl_slist *headers = NULL;headers = curl_slist_append(headers, "Content-Type:application/json;charset=UTF-8");//完善api接口并发送sprintf(buffer,"[{\"image\": \"%s\", \"image_type\": \"BASE64\", \"face_type\": \"LIVE\", \"quality_control\": \"LOW\"},{\"image\": \"%s\", \"image_type\": \"BASE64\", \"face_type\": \"IDCARD\", \"quality_control\": \"LOW\"}]",photo_base64_data1,photo_base64_data2);curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);curl_easy_setopt(curl, CURLOPT_POSTFIELDS, buffer);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;}curl_easy_cleanup(curl);is_success = 0;} else {fprintf(stderr, "curl_easy_init() failed.");is_success = 1;}free(mycurl);free(buffer);printf("\n");return is_success;}int main(){char *access_token = "24.ca79305593364a2bf623b71c674d687d.2592000.1607757515.282335-22953432";char *request_url = "/rest/2.0/face/v3/match";char path1[10] = "55.png";char path2[10] = "11.png";char *photo_base64_data1 = NULL,*photo_base64_data2=NULL;//存储图片经base64编码后的数据int size1 = photo_size(path1);int size2 = photo_size(path2);photo_base64_data1 = (char *)malloc((size1 / 3 + 1) * 4);if (NULL == photo_base64_data1){printf("memory_error");exit(2);}photo_base64_data2 = (char *)malloc((size2 / 3 + 1) * 4);if (NULL == photo_base64_data2){printf("memory_error");exit(2);}int length = photo_base64(path1,path2, photo_base64_data1,photo_base64_data2);faceMatch(request_url,access_token,&length,photo_base64_data1,photo_base64_data2);free(photo_base64_data1);free(photo_base64_data2);return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。