C语言实现基于翔云平台的人脸识别demo1(linux)
C语言实现基于翔云平台的人脸识别demo1(linux)
- 实现的目标
- 安装openssl第三方的库
- 安装libcurl第三方的库
- 购买使用翔云平台人脸识别的次数
- libcurl的使用
- **参考以下博文**:
- 代码实现
- 如何编译实现人脸识别的程序
- 运行
- 运行后会发现以下错误
- 配置完临时环境变量后,再次运行后的结果
运用翔云平台的人脸识别的方案,通过使用第三方libcurl的库,用HTTPS方式访问官网进行人脸识别的操作,并拿到人脸识别得到的结果
实现的目标
通过使用curl库实现HTTPS访问翔云平台的官网,对已有的两张照片(jpg格式)进行人脸识别
安装openssl第三方的库
- 原因:需要通过HPPTS的方式访问翔云平台的官网进行人脸识别,代码的实现是使用libcurl库。而能够使libcurl支持HTTPS,其需依赖openssl第三方的库,所以在安装libcurl第三方的库之前需要安装openssl第三方的库;
- 点击该链接下载openssl库的压缩包:https://www.openssl.org/source/old/1.1.1/openssl-1.1.1a.tar.gz
- 将下载好的libcurl库的压缩包拷贝到unbuntu linux上:可以用拖拽、文件传输或者共享文件夹的方式拷贝到unbuntu linux上;
- 解压命令:
tar xvf openssl-1.1.1a.tar.gz
- 进入到openssl-1.1.1a文件中:
cd openssl-1.1.1a/
- 进行编译安装:依次输入以下命令(以默认的方式编译安装)
./configmakesudo make install
安装libcurl第三方的库
- libcurl简介: libcurl当前支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传(当然你也可以使用PHP的ftp扩展), HTTP基本表单上传,代理,cookies,和用户认证;
- 库下载链接:https://github.com/curl/curl/releases/tag/curl-7_71_1
- 进入上面的链接,点击下载:curl-7.71.1.tar.bz2
- 将下载好的libcurl库的压缩包拷贝到unbuntu linux上:可以用拖拽、文件传输或者共享文件夹的方式拷贝到unbuntu linux上;
- 解压命令:
tar xvf curl-7.71.1.tar.bz2
- 进入到curl-7.71.1文件中:
cd curl-7.71.1/
- 进行编译安装:依次输入以下命令(编译安装在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-gnueabihfmakemake install
购买使用翔云平台人脸识别的次数
进入翔云平台的官网,进行注册
点击网页界面最上面的栏目条上的 <价格与购买>
对于我们这种抱着玩的心态的,只用花0.01元购买100次的人脸识别即可
libcurl的使用
参考以下博文:
libcurl的简单介绍
代码实现
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <curl/curl.h>#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");// 指定urlcurl_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/
配置完临时环境变量后,再次运行后的结果
C语言实现基于翔云平台的人脸识别demo1(linux)相关推荐
- C语言实现基于翔云平台的人脸识别demo2(树莓派)
C语言实现基于翔云平台的人脸识别demo2(树莓派3B) 实现目标 树莓派安装mjpg-streamer 在树莓派下依次执行以下指令 修改start.sh文件(用来开启摄像头进行监控) A:树莓派摄像 ...
- 基于翔云平台做人脸识别
目录 1.[翔云人脸识别的API](https://www.netocr.com/face.html) 1.1 图片img上传是以base64流的形式上传 2.代码 1.翔云人脸识别的API 1.1 ...
- 基于翔云OCR云平台的人脸识别(1)
基于翔云OCR云平台的人脸识别 本节通过翔云OCR云平台来实现人脸识别.调用人脸对比API,通过https post方式向云服务器提交两张需要对比的图片Base64流以及其他信息,云服务器处理后返回判 ...
- 基于翔云OCR云平台的人脸识别(2)
基于翔云OCR云平台的人脸识别(2) 项目思路 raspistill命令的相关参数说明 -v:调试信息查看 -w:图像宽度 -h:图像高度 -rot:图像旋转角度,只支持 0.90.180.270 度 ...
- 基于百度AI平台的人脸识别评分小程序
face-recognition-scoring-applet 开放源代码,遵循Apache License 2.0 效果展示 可切换摄像头.拍照.从相册选择 效果预览 小程序账号注册及配置 地址:h ...
- 基于汉王云API的人脸识别
http://down.51cto.com/data/2076078 源码地址,使用汉王云API,得预先申请汉王API key 转载于:https://blog.51cto.com/p6xos/167 ...
- AI 实战篇 |基于 AI开放平台实现 人脸识别对比 功能,超详细教程【附带源码】
- 阿里云平台的人脸识别接口测试
需要导入的包: 必备模块:import urllib 请求模块:import urllib.request 解析模块:import urllib.parse 可以拆分URL,也可以拼接URL 数据交 ...
- 基于树莓派(C语音)实现人脸识别(翔云平台)
1.树莓派中安装摄像头并测试摄像头 1.1.安装mjpg-streamer 在CRT中依次输入一下指令 sudo apt-get update #更新软件列表 sudo apt-get upgrade ...
最新文章
- SAP RETAIL初阶MM41创建商品主数据BASIC DATA里的Valuation Class
- BannerDemo【图片轮播图控件】
- 装个Redmine真是麻烦啊
- cv dnn识别动作规范 open_OpenCV开发笔记(七十三):红胖子8分钟带你使用opencv+dnn+yolov3识别物体...
- 【线上分享】基于人眼主观视觉的画质评价与提升
- WebAssembly,Web的新时代
- python实现英文新闻摘要自动提取_Automotive Innovation摘要集系列2:Intelligent and Connected Vehicles...
- vm 虚拟机 删除 权限_虚拟机win7一键傻瓜式安装
- 传承开源-耿航2018中国开源云超级人物获奖感言
- 2022年投影仪推荐 家用投影仪推荐一下哪款比较好2022
- 堡垒机和跳板机的三大区别分析-行云管家
- Excel表格数据导入到Oracle
- 华为OJ平台题目:(练习用)挑7
- ——java中的反射
- mysql 梅花掌_红砂手 梅花掌 红砂掌2
- SpringMVC —— @ResponseBody原理
- 单片机中的几种通信方式
- ASP.NET MVC3 技术(五) JSON 数据的传递
- Linux so库查看工具
- ubuntu安装安卓模拟器
热门文章
- 一个优秀的Java程序员必须了解的GC机制
- 文件服务器 导出权限,肿么导出共享文件夹的共享权限清单
- 雷达导论PART-III.7 雷达方程
- 雷达方程中Pr与cosα/R2成正比的简单推导过程
- Zipkin安装(Docker)
- c语言用栈编写计算器程序,用c语言实现简易的计算器四则运算的代码最好用栈方法实现,该怎么解决...
- 用最复杂的方式学会数组(Python实现动态数组)
- 明确市场定位让软文营销从针对性出发
- 杰理之蓝牙发射器的搜索设备的时间修改方法【篇】
- 查看当前Git工具的版本