接上文:libcurl库的介绍和使用,并调用libcurl库编程访问百度主页

1.编程连通翔云平台OCR后台

翔云平台官网

购买了翔云平台人脸识别接口后,根据其提供的API文档编写下面测试代码,查看翔云后台返回数据

#include <stdio.h>
#include <curl/curl.h>
#include<string.h>
#include<stdlib.h>
#define true 1
#define false 0
typedef unsigned int bool;size_t readData(void *ptr, size_t size, size_t nmemb, void *stream)
{char buf[10240] = {'\0'};strncpy(buf, ptr, 1024);printf("=========================get Data=====================\n");printf("%s\n",buf);}
bool postUrl()
{CURL *curl;CURLcode res;char *postString;char img1[12];char img2[12];char *key = "xxx";char *secret = "xxx";int typeId = 21;char *format = "xml";postString = (char *)malloc(strlen(key)+strlen(secret)+2048);sprintf(postString, "&img1=%s&img2=%s&key=%s&secret=%s&typeId=%d&format=%s","","",key,secret,21,format);//按API文档所示 6个都要有curl = curl_easy_init();if (curl){curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookie.txt"); // 指定cookie文件curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "postString");    // 指定post内容 这里是上面拼接的字符串curl_easy_setopt(curl, CURLOPT_URL, "https://netocr.com/api/faceliu.do");   // 指定url 就是翔云接口地址curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, readData); //设置回调函数把有效读取的字符打印出来res = curl_easy_perform(curl);printf("OK:%d\n",res);curl_easy_cleanup(curl);}return true;
}int main(void)
{postUrl();
}

编译,运行:

gcc demo2.c -I ./curl-7.71.1/_install/include/ -L ./curl-7.71.1/_install/lib/ -lcurl
ok:1

证明失败了,正常应该返回200,没有跟翔云的后台接通,回调函数没有打印后台返回来的数据。

我们在上文编译的时候误以为编译出来默认是支持SSL的,实际上不支持。而翔云接口是https:开头的,需要选择支持SSL。

于是我们需要对libcurl库重新编译,使编译出来的库支持https访问

2.尝试编译libcurl库支持SSL(也就是支持https访问)

那我们就要回到/curl-7.71.1路径下,删除_install上次编译出来的文件夹,重新编译支持SSL的库。由/docs/INSTALL.md我们可以得知要想支持SSL,就得./configure --with-ssl

./configure --prefix=$PWD/_install --with-ssl

于是我们还是想在当前目录下_install文件夹安装

cheking for SSL_connect in -lssl... (cached)no no
configure:error:openSSL libs and/or directories were not found where specified!

编译错误,意思是想要让curl支持https访问,需要ssl依赖库openSSL,也就是需要系统中已经安装好了openSSL。

3.安装SSL依赖库openSSL

回到httpHandler目录下使用wget指令安装openssl

wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz

解压:

tar xvf openssl-1.1.1a.tar.gz

为了避免到时候编译这个curl又要去配置SSL这个库,我们直接把SSL安装到默认的系统位置去,

直接在/openssl-1.1.1a/目录

配置, 编译,安装:

./config
make
sudo make install

4.重新编译支持SSL的libcurl库(也就是支持https访问)

回到/curl-7.71.1/目录下重新进行配置,编译,安装:

./configure --prefix=$PWD/_install --with-ssl
make
make install

现在编译出来的就是最新的支持https访问的curl库

然后重新编译demo2.c

可以看到此时时能接收到翔云后台返回数据的

而产品类型错误原因只是:代码中没有传入图片给它识别

5.加入图片base64编码,最终实现两张图片人脸识别对比

在Linux下生成图片的base64编码:

base64 photo.jpg

下面是实现把生成的base64流写到tmpFile1文件内

system("base64 zhu1.jpg > tmpFile1");//把生成的base64编码的数据保存到tmpFile1中int fdPic1 = open("./tmpFile1",O_RDWR);//可读可写方式打开文件
int fileLenPic1 = lseek(fdPic1,0,SEEK_END);//计算文件大小lseek(fdPic1,0,SEEK_SET);              //移动光标到头char* bufPic1 = (char* )malloc(fileLenPic1+8);//开辟空间
memset(bufPic1,'\0',fileLenPic1+8);read(fdPic1,bufPic1,fileLenPic1);                   //把文件内容度进取buf中
//printf("%s\n",buf);                               //打印出来
close(fdPic1);

demo4.c 封装成函数,最终实现两张图片人脸识别对比:

#include <stdio.h>
#include <curl/curl.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>#define true 1
#define false 0typedef unsigned int bool;
char buf[1024]= {'\0'};size_t readData( void *ptr, size_t size, size_t nmemb, void *stream)
{strncpy(buf,ptr,1024);printf("%s\n",buf);}char * getImg(char *file)
{char * bufimg;char cmd[128] = {'\0'};sprintf(cmd,"base64 %s > tmpfile",file);//>  将生成的base64流数据导入到tmpfile这个文件中system(cmd);int fd = open("./tmpfile",O_RDWR);int filelen = lseek(fd,0,SEEK_END);    //计算文件大小lseek(fd,0,SEEK_SET);                //移动光标到头bufimg = (char *)malloc(filelen);read(fd,bufimg,filelen);close(fd);system("rm -rf tmpfile");//每调用一次结束后,删除这个文件夹return bufimg;//返回读到的base64编码}bool postUrl( )
{CURL *curl;CURLcode res;char *param;char img1[10];char img2[10];char * key = "xxx";char * secret ="xxx";int typeId = 21;char *format ="xml";char *bufimg1 = getImg("./lit1.jpg");char *bufimg2 = getImg("./lit2.jpg");int len = (strlen(bufimg1)+strlen(bufimg2)+strlen(key)+strlen(secret)+sizeof(typeId)+strlen(format) + 10);param = (char *)malloc(len);sprintf(param,"&img1=%s&img2=%s&key=%s&secret=%s&typeId=%d&format=%s",bufimg1,bufimg2,key,secret,typeId,format);//顺序不能变curl = curl_easy_init();//初始化if (curl){curl_easy_setopt(curl, CURLOPT_POSTFIELDS, param);    // 传参curl_easy_setopt(curl, CURLOPT_URL, "https://netocr.com/api/faceliu.do");  // 访问的接口地址curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION,readData );//将https返回的信息返回到readData这个函数res = curl_easy_perform(curl);//执行请求printf("OK:%d\n",res); if(strstr(buf,"是")!= NULL){printf("人脸识别成功\n");}curl_easy_cleanup(curl);//释放内存}return true;
}int main(void)
{postUrl();
}

上传自己的两张照片到当前目录,编译运行:

返回:是

则代表识别成功,是同一个人。

翔云平台编程实现两张图片的人脸识别相关推荐

  1. 智能家居(7) —— 人脸识别 翔云平台编程使用(编译openSSL支持libcurl的https访问、安装SSL依赖库openSSL)

    目录 一.祥云人工智能开放平台 二.编译openSSL支持libcurl的https访问 安装SSL依赖库openSSL(使用工具wget) curl库重新配置,编译,安装 三.编程实现人脸识别 翔云 ...

  2. 智能家居(七) —— 人脸识别 翔云平台编程使用(编译openSSL支持libcurl的https访问、安装SSL依赖库openSSL)

    人工智能OCR识别平台介绍 OCR (Optical Character Recognition,光学字符识别) 百度搜索OCR识别,可以发现有很多大厂都在做这个项目,比如百度OCR,腾讯OCR,科大 ...

  3. 智能家居——人脸识别 翔云平台(配置ssl和下载OpenSSL)

    文章目录 一.祥云人工智能开放平台 二.编译openSSL支持libcurl的https访问 (1)libcurl的https访问问题 (2)安装SSL依赖库openSSL(使用工具wget) (3) ...

  4. C语言实现基于翔云平台的人脸识别demo1(linux)

    C语言实现基于翔云平台的人脸识别demo1(linux) 实现的目标 安装openssl第三方的库 安装libcurl第三方的库 购买使用翔云平台人脸识别的次数 libcurl的使用 **参考以下博文 ...

  5. C语言实现基于翔云平台的人脸识别demo2(树莓派)

    C语言实现基于翔云平台的人脸识别demo2(树莓派3B) 实现目标 树莓派安装mjpg-streamer 在树莓派下依次执行以下指令 修改start.sh文件(用来开启摄像头进行监控) A:树莓派摄像 ...

  6. 基于树莓派(C语音)实现人脸识别(翔云平台)

    1.树莓派中安装摄像头并测试摄像头 1.1.安装mjpg-streamer 在CRT中依次输入一下指令 sudo apt-get update #更新软件列表 sudo apt-get upgrade ...

  7. 使用MQTT连接onenet云平台(九 两台网络调试助手互相通信)

    一.说明 本次试验实现两个网络调试助手模拟两台设备通过MQTT连接到onenet云平台进行互相通信控制,模拟两台设备信息如下: 二.设备信息 2.1设备1信息 名称:testa 设备ID:925027 ...

  8. 云平台编程与开发(一):云平台服务商一览

    云计算是下一个IT产业趋势,Next Big Thing.许多公司纷纷推出"云平台"产品.下面,就是现有服务商一览表,由ANDYLAND总结. 这种"云平台"是 ...

  9. 基于翔云平台做人脸识别

    目录 1.[翔云人脸识别的API](https://www.netocr.com/face.html) 1.1 图片img上传是以base64流的形式上传 2.代码 1.翔云人脸识别的API 1.1 ...

最新文章

  1. MySQL 优化实战记录
  2. 小工匠聊架构 - 如何优雅的做系统架构设计01
  3. 用户姓名保护python_Python操作LDAP,对用户进行认证(验证用户名以及密码)
  4. python中dict的fromkeys用法
  5. JavaScript 进阶(二)变量作用域
  6. JS,Jquery 调用 C#WebService
  7. Java ByteArrayInputStream reset()方法及示例
  8. .net的label的背景如何设置成为透明_css如何设置背景图片?background属性添加背景图片...
  9. Selenium自动化测试-7.获取元素属性信息
  10. a5 1c语言实现,初识C语言1_qq5fb3b05a5f322的技术博客_51CTO博客
  11. libmesh 实现 流程
  12. linux修改文件或目录的所有者(chown)和用户组
  13. butterworth matlab,Matlab实现Butterworth滤波器
  14. 手机无法打开html文件夹,手机网站在电脑上无法打开的解决办法
  15. Qt开发——图片缩放简述
  16. 数据库巡检 java_美团MySQL数据库巡检系统的设计与应用
  17. hardware计算机专业英语翻译,hardware是什么意思中文翻译
  18. 【Python学习】Day-011 Day-012 元组、字符串、字符编码、字符串相关方法、字符串格式化
  19. 计算机应用基础(专)【11】
  20. mhd格式三维图像显示_关于医疗影像的mhd和dcm格式图像的读取和坐标转换

热门文章

  1. [翻译]-WinCE 程序设计 (3rd 版)--2.3 位图
  2. cccc天梯赛 2018 赛后总结
  3. HelloCharts开源图表库(一)之折线图
  4. 手机究竟要不要升级系统?总是自动升级该怎么办?看完你就懂了
  5. MicFunPred——最新16S rRNA扩增子数据功能预测数据库
  6. 【转载】CAD快捷键
  7. 【原创】数据分析的荣耀与骄傲
  8. D2Admin 8月更新: 高级数据持久化|标签页右键|模块化等
  9. 企业绩效评价系统的三个导向
  10. GoAccess实时日志监控