文章目录

  • 一、祥云人工智能开放平台
  • 二、编译openSSL支持libcurl的https访问
    • (1)libcurl的https访问问题
    • (2)安装SSL依赖库openSSL(使用工具wget)
    • (3)curl库重新配置,编译,安装
  • 三、编程实现人脸识别
    • (1)翔云人脸识别API文档
    • (2)加入图片base64编码
    • (3)人脸识别完整代码

一、祥云人工智能开放平台

  • 网址:翔云人工智能开发平台
  • 选择识别类型
  • 参数的设定
  • 下载开发式例(可以选择java语言或c++语言等)

二、编译openSSL支持libcurl的https访问

(1)libcurl的https访问问题

  • 在执行可执行文件时,由于翔云接口是https:开头的,需要libcurl库选择支持SSL。因此需要在配置的时候设置支持ssl

  • 由/docs/INSTALL.md我们可以得知当用户已经有OpenSSL的时候不需要执行,如果没有安装OpenSSL,需要安装OpenSSL并使用命令./configure --with -ssl进行配置,编译,安装

  • 输入指令查看ubuntu是否安装openSSL:

    openssl version -a
    

    输出结果表明已经安装OpenSSL,curl库可以不用重新安装

  • 若没有安装OpenSSL则按照如下步骤:

(2)安装SSL依赖库openSSL(使用工具wget)

  • 回到/curl-7.71.1路径下,执行rm -rf _install上次编译出来的文件夹
  • 想要支持SSL必须要有依赖库,需要系统中已经安装好了SSL。我们需要安装openSSL.tar
  • 利用linux的开源工具下载wget:wget是Linux中的一个下载文件的工具,wget是在Linux下开发的开放源代码的软件。
  • 百度搜索技巧:wget openSSL.tar 找到下载路径
  • 执行wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz
  • 解压tar xvf openssl-1.1.1a.tar.gz
  • 为了避免到时候编译这个curl又要去配置SSL这个库,我们直接把SSL安装到默认的系统位置去(一般默认是在/usr/local底下),所以不指定安装路径了,在/openssl-1.1.1a路径下直接执行./config
  • 编译:make
  • 超级用户安装(因为库文件默认在/usr/local中,只有管理员才能执行):sudo make install

(3)curl库重新配置,编译,安装

  • 回到/curl-7.71.1/目录下重新进行配置:
  • ./configure --prefix=$PWD/_install --with-ssl
  • make
  • make install

三、编程实现人脸识别

(1)翔云人脸识别API文档

  • 功能:调用翔云人脸识别API完成HTTP访问并获得响应
  • 接口地址与参数配置:

    代码:
#include <stdio.h>
#include <curl/curl.h>
#include <string.h>
#include <stdlib.h>typedef unsigned int bool;//数据类型别名用typedef
#define true 1            //宏定义用define 就是宏替换
#define false 0//回调函数,读取从OCR后台返回的数据  前面打通百度的例子是将内容读取到本地文件fd里面
size_t readData(void *ptr, size_t size, size_t nmemb, void *stream)
{char buf[1024] = {'\0'};strncpy(buf,ptr,1024);printf("============================= get data ===========================\n");printf("%s\n",buf);
}bool postUrl()       //根据文档,接口调用方法为post请求
{CURL *curl;CURLcode res;char* postString = NULL;//根据翔云平台的接口要求  分开定义,然后字符串拼接char* img1   = NULL;   //图片base64流char* img2   = NULL;char* key    = "xxxxxxxxxxx";char* secret = "xxxxxxxxxxxxx";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,typeId,format);//字符串拼接函数 curl = curl_easy_init();if(curl){curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookie.txt");// 指定cookie缓存文件 curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postString);//指定post传输内容,get请求将URL和postString一次性发送curl_easy_setopt(curl, CURLOPT_URL, "https://netocr.com/api/faceliu.do");// 指定urlcurl_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 demo.c -I ./curl-7.71.1/_install/include/ -L ./curl-7.71.1/_install/lib/ -lcurl

运行后的结果:

(2)加入图片base64编码

  • base64定义:Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,可用于在HTTP环境下传递较长的标识信息。也就是说,可以将图片的格式转化为base64,然后在HTTP环境下传递
  • 编码命令:base64 photoname.jpg
  • 封装一个函数,输入图片在linux环境下的地址,获取其编码值
char* getBase64FromFile(char* filePath)
{char* base64Buf = NULL;char cmd[256] = {'\0'};sprintf(cmd,"base64 %s > tmpFile",filePath);//格式化输出,将图片的base64流导入到文件中system(cmd);int fd = open("./tmpFile",O_RDWR);int fileLen = lseek(fd,0,SEEK_END);        //计算文件大小lseek(fd,0,SEEK_SET);                      base64Buf = (char* )malloc(fileLen+8);//开辟空间memset(base64Buf,'\0',fileLen+8);read(fd,base64Buf,fileLen+8);              //从文件中读取base64流到字符串 close(fd);system("rm -f tmpFile");return base64Buf;//指针变量(局部)随着子程序调用结束消失,但malloc开辟的空间地址还在,用指针变量指向该空间,然后返回}

(3)人脸识别完整代码

  • 功能:对比两张图片的人脸,用回调函数将返回的结果存储在全局变量中,并根据字符串对比函数判断返回内容,然后返回自定义内容
#include <stdio.h>
#include <curl/curl.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>typedef unsigned int bool;
#define true 1
#define false 0char ocrRetBuf[1024] = {'\0'};//全局变量,用来接收从OCR后台返回的数据size_t readData(void *ptr, size_t size, size_t nmemb, void *stream)//回调函数,把从后台的数据拷贝给ocrRetBuf
{strncpy(ocrRetBuf,ptr,1024);
}char* getBase64FromFile(char* filePath)
{char* base64Buf = NULL;char cmd[256] = {'\0'};sprintf(cmd,"base64 %s > tmpFile",filePath);system(cmd);int fd = open("./tmpFile",O_RDWR);int fileLen = lseek(fd,0,SEEK_END);        lseek(fd,0,SEEK_SET);                      base64Buf = (char* )malloc(fileLen+8);memset(base64Buf,'\0',fileLen+8);read(fd,base64Buf,fileLen+8);              close(fd);system("rm -f tmpFile");return base64Buf;
}bool postUrl()
{CURL *curl;CURLcode res;//根据翔云平台的接口要求  分开定义,然后字符串拼接char* img1= getBase64FromFile("./zms.webp");//图片base64流char* img2= getBase64FromFile("./zms.webp");char* key    = "xxxxxxxxxxx";char* secret = "xxxxxxxxxxxxxx";int   typeId = 21;char* format = "xml"; int len = strlen(key)+strlen(secret)+strlen(img1)+strlen(img2)+128;//分配空间不够会>导致栈溢出char* postString = (char* )malloc(len);memset(postString,'\0',len);//因为postString是一个指针,不能用sizeof来计算其指向的大小,用len接收字节数大小//字符串拼接函数    sprintf(postString,"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_COOKIEFILE, "/tmp/cookie.txt");// 指定cookie缓存文件 curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postString);//指定post传输内容,get请求将URL和postString一次性发送curl_easy_setopt(curl, CURLOPT_URL, "https://netocr.com/api/faceliu.do");// 指定urlcurl_easy_setopt(curl, CURLOPT_WRITEFUNCTION,readData);  //回调函数读取返回值res = curl_easy_perform(curl);printf("OK:%d\n",res);if(strstr(ocrRetBuf,"否") != NULL){    //字符串检索 判断翔云后台返回的一大堆字符串中有没有“否”printf("不是同一个人\n");}else{printf("是同一个人\n");}curl_easy_cleanup(curl);}return true;
}int main(void)
{postUrl();return 0;
}

编译:

gcc demo.c -I ./curl-7.71.1/_install/include/ -L ./curl-7.71.1/_install/lib/ -lcurl

执行结果:

智能家居——人脸识别 翔云平台(配置ssl和下载OpenSSL)相关推荐

  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. C语言人脸识别——翔云平台调用(含wget安装)

    人脸识别 准备安装的东西 使用mjpg-streamer获得人脸识别比对照片 用处功能 实际问题处理 准备安装的东西 1.安装mjpg-streamer 链接: 树莓派3代 B型 Cortex-A53 ...

  4. linux人脸识别视频推流,RTMP推流协议视频智能分析/人脸识别/直播点播平台EasyDSS接口调用注意事项介绍...

    TSINGSEE青犀视频目前推出了前端支持不同协议设备接入的视频智能分析平台,包括RTSP协议的EasyNVR.GB28181协议的EasyGBS,RTMP推流协议的EasyDSS,还有能够进行人脸识 ...

  5. RTMP推流协议视频智能分析/人脸识别/直播点播平台EasyDSS接口调用注意事项介绍

    TSINGSEE青犀视频目前推出了前端支持不同协议设备接入的视频智能分析平台,包括RTSP协议的EasyNVR.GB28181协议的EasyGBS,RTMP推流协议的EasyDSS,还有能够进行人脸识 ...

  6. 人脸识别--翔云API

    目录 一.购买人脸识别接口 二.了解base64编码 三.通过post实现人脸识别 一.购买人脸识别接口 进入翔云官网购买人脸识别的接口,得到一个key和secret,我们要用到这两个参数才能访问到人 ...

  7. 翔云平台编程实现两张图片的人脸识别

    接上文:libcurl库的介绍和使用,并调用libcurl库编程访问百度主页 1.编程连通翔云平台OCR后台 翔云平台官网 购买了翔云平台人脸识别接口后,根据其提供的API文档编写下面测试代码,查看翔 ...

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

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

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

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

最新文章

  1. PHP全栈开发(八):CSS Ⅸ dispaly visibility
  2. 3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
  3. JS中Node节点总结
  4. MyBatis-22MyBatis缓存配置【一级缓存】
  5. DL之CNN:关于CNN(卷积神经网络)经典论文原文(1950~2018)简介总结框架结构图(非常有价值)之持续更新(吐血整理)
  6. 解决Spring Cloud中Feign/Ribbon第一次请求失败的方法
  7. mysql 抓包乱码_mysql知识资源收集
  8. mysql定时发送慢日志到邮件
  9. flag push tcp 作用_TCP协议超详细解析及攻击/防范
  10. tensorflow里面函数记录
  11. 【随笔】4.上海上港
  12. 数值分析思考题(钟尔杰版)参考解答——第六章
  13. 分享全球范围内比较好用的17个免费空间(基本稳定好多年)
  14. 关于国际标准书号ISBN
  15. 组件分享之后端组件——超轻量级的工作流引擎go-workflow
  16. 信号类型(雷达)——雷达波形认识(一)
  17. 华为怎么显示返回按键_苹果手机为何一直没有“返回键”?其实乔布斯生前就说出了答案!...
  18. 人才吸引力评价模型研究
  19. java 电梯类图,电梯控制系统(用UML图理解)
  20. android bugreport 解析

热门文章

  1. M_PI M_PI_2 M_PI_4的含义
  2. 拍森 | numpy库
  3. 编辑距离算法理解(动态规划的思想)
  4. python实战——JSON转CSV
  5. 2021江苏高考成绩位次查询,985/211大学2021年江苏录取分数线及位次排名
  6. 360超高清图片API【多种尺寸】
  7. 复变函数与积分变换系列(二) - 复变函数的求导
  8. 安卓逆向笔记-得到360加固的dex文件
  9. 使用JavaScript的一些小技巧
  10. Robi改造计划更新---moveit终于在树莓派raspberry 3B(raspbianJessie, ROS Indigo版本)上安装好了