通过使用curl库实现HTTPS访问翔云平台的官网,对已有的两张照片(jpg格式)进行人脸识别
tar xvf openssl-1.1.1a.tar.gz
cd openssl-1.1.1a/
./config
make
sudo make install
tar xvf curl-7.71.1.tar.bz2
cd curl-7.71.1/
./configure --prefix=$PWD/_install --with-ssl
//其中的--prefix=$PWD/_install是指定安装的路径在当前文件夹的_install下,_install文件会自己生成;--with-ssl是使安装后的libcurl支持ssl,能够使用HTTPS
//如果编译安装后的libcurl库能够支持到其他平台上运行的话,则需要加上 --host=(交叉编译工具),以树莓派来说,命令则为下面一行
// ./configure --prefix=$PWD/_install --with-ssl --host=arm-linux-gnueabihf
make
make install
进入翔云平台的官网,进行注册
点击网页界面最上面的栏目条上的 <价格与购买>
对于我们这种抱着玩的心态的,只用花0.01元购买100次的人脸识别即可
libcurl的简单介绍
#include
#include
#include
#include
#include
#include
#include
#include
#define true 1
#define false 0
typedef unsigned int bool;
char* faceRes = NULL;
char* getBase64(char* photoPath){
// 获取照片(jpg格式)的Base64的值
char cmd[256] = {
'\0'};
sprintf(cmd, "base64 %s > photoBase64File", photoPath);
system(cmd);// 通过执行"base64"这个指令即可得到照片的Base64值,在这里将得到的Base64值存放在photoBase64File文件中
int fd,size;
fd = open("./photoBase64File", O_RDWR);
size = lseek(fd, 0, SEEK_END) + 1;
lseek(fd, 0, SEEK_SET);
char* res = (char*)malloc(size);
memset(res, '\0', size);
read(fd, res, size);// 从photoBase64File文件中读取照片的Base64值
close(fd);
system("rm photoBase64File");
return res;
}
size_t handle(void *ptr, size_t size, size_t nmemb, void *stream){
//拷贝返回来的结果字段
int ssize = strlen(ptr) + 1;
faceRes = (char*)malloc(ssize);
memset(faceRes, '\0', ssize);
strncpy(faceRes, ptr, ssize);
}
bool postUrl()
{
CURL *curl;
CURLcode res;
char* message = NULL;
// 调用getBase64()自定的函数获取存放在当前文件夹下的两个进行识别的图片的Base64值
char* img1 = getBase64("./photo1.jpg");
char* img2 = getBase64("./photo2.jpg");
// key值和secret值是在翔云官网->个人中心的OCR Key和OCR secret两个的值
char* key = "用自己的";
char* secret = "用自己的";
int typeId = 21;
char* format = "xml";
int size = strlen(img1)+strlen(img2)+strlen(key)+strlen(secret)+strlen(format)+3;
message = (char*)malloc(size);
memset(message, '\0', size);
sprintf(message, "&img1=%s&img2=%s&key=%s&secret=%s&typeId=%d&format=%s",
img1, img2, key, secret, typeId, format);
curl = curl_easy_init(); // 初始化
if (curl)
{
curl_easy_setopt(curl, CURLOPT_URL, "https://netocr.com/api/faceliu.do");// 指定url
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, message);// 指定post内容
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, handle);// 当拿到结果后,指定调用handle()该自定的函数进行处理
res = curl_easy_perform(curl);// 进行访问官网、进行人脸识别的操作
curl_easy_cleanup(curl);// 执行完后,对curl_easy_init()进行清理
}
if(res != 23){
printf("post failed!\n");
return false;
}else{
printf("post successful!\n");
}
printf("%s\n",faceRes);// 打印出人脸识别后返回来的结果字段
if(strstr(faceRes, "是") != NULL){
// 如果返回来的结果字段中有“是”这个字眼,代表是同一个人
printf("This is the same person!\n");
}else{
printf("Tow different persons!\n");
}
free(faceRes);
free(img1);
free(img2);
}
int main(void)
{
postUrl();
return 0;
}
我是将libcurl编译安装在curl-7.71.1文件中的_install的目录下,不是在usr/local/lib底下,所以在编译程序时,需要自己链接库的位置;
编译程序的指令:(文件目录的路径因人而异,仅供参考)
1 gcc faceRecognitionDemo.c -I ~/Desktop/httpHandler/curl-7.71.1/_install/include/ -L ~/Desktop/httpHandler/curl-7.71.1/_install/lib/ -lcurl
是因为环境变量里面的路径中找不到该库的软链接文件
因此需要配置环境变量
使用以下命令配置临时的环境变量:
临时加上_install目录底下的lib/的路径(文件目录的路径因人而异,仅供参考)
1 export LD_LIBRARY_PATH=~/Desktop/httpHandler/curl-7.71.1/_install/lib/