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

  • 实现的目标
  • 安装openssl第三方的库
  • 安装libcurl第三方的库
  • 购买使用翔云平台人脸识别的次数
  • libcurl的使用
    • **参考以下博文**:
  • 代码实现
  • 如何编译实现人脸识别的程序
  • 运行
    • 运行后会发现以下错误
    • 配置完临时环境变量后,再次运行后的结果

运用翔云平台的人脸识别的方案,通过使用第三方libcurl的库,用HTTPS方式访问官网进行人脸识别的操作,并拿到人脸识别得到的结果

实现的目标

通过使用curl库实现HTTPS访问翔云平台的官网,对已有的两张照片(jpg格式)进行人脸识别

安装openssl第三方的库

  1. 原因:需要通过HPPTS的方式访问翔云平台的官网进行人脸识别,代码的实现是使用libcurl库。而能够使libcurl支持HTTPS,其需依赖openssl第三方的库,所以在安装libcurl第三方的库之前需要安装openssl第三方的库;
  2. 点击该链接下载openssl库的压缩包:https://www.openssl.org/source/old/1.1.1/openssl-1.1.1a.tar.gz
  3. 将下载好的libcurl库的压缩包拷贝到unbuntu linux上:可以用拖拽、文件传输或者共享文件夹的方式拷贝到unbuntu linux上;
  4. 解压命令
    tar xvf  openssl-1.1.1a.tar.gz
  1. 进入到openssl-1.1.1a文件中
    cd openssl-1.1.1a/
  1. 进行编译安装:依次输入以下命令(以默认的方式编译安装)
   ./configmakesudo make install

安装libcurl第三方的库

  1. libcurl简介: libcurl当前支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传(当然你也可以使用PHP的ftp扩展), HTTP基本表单上传,代理,cookies,和用户认证;
  2. 库下载链接:https://github.com/curl/curl/releases/tag/curl-7_71_1
  3. 进入上面的链接,点击下载:curl-7.71.1.tar.bz2
  4. 将下载好的libcurl库的压缩包拷贝到unbuntu linux上:可以用拖拽、文件传输或者共享文件夹的方式拷贝到unbuntu linux上;
  5. 解压命令
    tar xvf  curl-7.71.1.tar.bz2
  1. 进入到curl-7.71.1文件中
    cd curl-7.71.1/
  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)相关推荐

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

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

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

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

  3. 基于翔云OCR云平台的人脸识别(1)

    基于翔云OCR云平台的人脸识别 本节通过翔云OCR云平台来实现人脸识别.调用人脸对比API,通过https post方式向云服务器提交两张需要对比的图片Base64流以及其他信息,云服务器处理后返回判 ...

  4. 基于翔云OCR云平台的人脸识别(2)

    基于翔云OCR云平台的人脸识别(2) 项目思路 raspistill命令的相关参数说明 -v:调试信息查看 -w:图像宽度 -h:图像高度 -rot:图像旋转角度,只支持 0.90.180.270 度 ...

  5. 基于百度AI平台的人脸识别评分小程序

    face-recognition-scoring-applet 开放源代码,遵循Apache License 2.0 效果展示 可切换摄像头.拍照.从相册选择 效果预览 小程序账号注册及配置 地址:h ...

  6. 基于汉王云API的人脸识别

    http://down.51cto.com/data/2076078 源码地址,使用汉王云API,得预先申请汉王API key 转载于:https://blog.51cto.com/p6xos/167 ...

  7. AI 实战篇 |基于 AI开放平台实现 人脸识别对比 功能,超详细教程【附带源码】

  8. 阿里云平台的人脸识别接口测试

    需要导入的包: 必备模块:import urllib 请求模块:import urllib.request 解析模块:import urllib.parse  可以拆分URL,也可以拼接URL 数据交 ...

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

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

最新文章

  1. SAP RETAIL初阶MM41创建商品主数据BASIC DATA里的Valuation Class
  2. BannerDemo【图片轮播图控件】
  3. 装个Redmine真是麻烦啊
  4. cv dnn识别动作规范 open_OpenCV开发笔记(七十三):红胖子8分钟带你使用opencv+dnn+yolov3识别物体...
  5. 【线上分享】基于人眼主观视觉的画质评价与提升
  6. WebAssembly,Web的新时代
  7. python实现英文新闻摘要自动提取_Automotive Innovation摘要集系列2:Intelligent and Connected Vehicles...
  8. vm 虚拟机 删除 权限_虚拟机win7一键傻瓜式安装
  9. 传承开源-耿航2018中国开源云超级人物获奖感言
  10. 2022年投影仪推荐 家用投影仪推荐一下哪款比较好2022
  11. 堡垒机和跳板机的三大区别分析-行云管家
  12. Excel表格数据导入到Oracle
  13. 华为OJ平台题目:(练习用)挑7
  14. ——java中的反射
  15. mysql 梅花掌_红砂手 梅花掌 红砂掌2
  16. SpringMVC —— @ResponseBody原理
  17. 单片机中的几种通信方式
  18. ASP.NET MVC3 技术(五) JSON 数据的传递
  19. Linux so库查看工具
  20. ubuntu安装安卓模拟器

热门文章

  1. 一个优秀的Java程序员必须了解的GC机制
  2. 文件服务器 导出权限,肿么导出共享文件夹的共享权限清单
  3. 雷达导论PART-III.7 雷达方程
  4. 雷达方程中Pr与cosα/R2成正比的简单推导过程
  5. Zipkin安装(Docker)
  6. c语言用栈编写计算器程序,用c语言实现简易的计算器四则运算的代码最好用栈方法实现,该怎么解决...
  7. 用最复杂的方式学会数组(Python实现动态数组)
  8. 明确市场定位让软文营销从针对性出发
  9. 杰理之蓝牙发射器的搜索设备的时间修改方法【篇】
  10. 查看当前Git工具的版本