基于Linux的人脸识别功能

2023-11-13

前言:需要在翔云平台注册并购买人脸识别服务,通过https协议与个人中心的key和secret,与平台建立连接。

说明:使用http协议需要安装libcurl库,而使用https协议需要安装libcurl库选择加入ssl服务,ssl服务依赖于openssl库,所以需要先安装openssl库

相关库整体安装步骤流程详解

1.curl-7.71.1.tar.gz库下载

https://github.com/curl/curl/releases/tag/curl-7_71_1

2.解压压缩包

tar xvf curl-7.71.1.tar.gz

3.安装可支持https的openLLS

下载openssl-1.1.1

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

openLLS安装在默认路径下/usr/local:

解压openssl-1.1.1

tar -vxf openssl-1.1.1a.tar.gz

进入文件夹 并编译安装

./config
make
make test
sudo make install

4、 libcurl库编译安装(安装方式二选一)

方式一: 安装在默认路径下

cd curl-7.71.1 //进入文件夹
./configure --with-ssl //必须加入ssl服务
make //编译
sudo make install //安装

方式二: 安装在指定路径下

4.1、一般下载库文件,都可以先查看介绍文档 READMEdocs 下的相关文档,了解相关开发步骤。安装说明查看 docs/INSTALL 文档

4.2、指定安装在当前文件夹下的 _install 文件夹下

cd curl-7.71.1                  //进入curl-7.71.1文件夹
./configure --prefix=$PWD/_install --with-ssl       //自动生成_install文件夹
make                          //编译
sudo make install             //安装

注意:安装后curl库的头文件放在 _install/include/ 库文件放在 _install/lib (编译时需要链接到)

5、人脸识别代码demo.c(照片自选,这里我用的./reba.jpg和./reba2.jpg)

#include <unistd.h>

#define true 1
#define false 0
//c中无法识别布尔类型,需要自己定义
typedef 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("==================================Get data===============================\n");
//      printf("%s\n",buf);

}
char* getPicBase64FromFile(char *filePath)//获取图片的Base64流
{
    char *bufPic;
    char cmd[128]={'\0'};
    sprintf(cmd,"base64 %s >tmpFile",filePath);//获取图片base64编码值并将该字符串拼接存放到tmpFile中
    system(cmd);

    int fd = open("./tmpFile",O_RDWR);//打开tmpFile文件
    int filelen = lseek(fd,0,SEEK_END);//算出该文件的大小
    lseek(fd,0,SEEK_SET);//将光标定位到文件头
    char *bufpic =(char *)malloc(filelen+2);//开辟空间存放图片base64编码值
    memset(bufpic,'\0',filelen+2);//初始化清空存放空间
    read(fd,bufpic,filelen);//将图片编码值读到bufPic中
    close(fd);
    system("rm -f tmpFile");//删除内容供下次函数调用

    return bufpic;//返回base64编码值
}
bool postUrl()
{
    CURL *curl;
    CURLcode res;
    char *postString;//存放拼接的字符串

    char img1[12];
    char img2[12];

    char *key = "用自己的";
    char *secret = "用自己的";
    int typeId = 21;
    char *format = "xml";

    char *bufpic1 = getPicBase64FromFile("./reba.jpg");
    char *bufpic2 = getPicBase64FromFile("./reba2.jpg");


    int len = strlen(key)+strlen(secret)+strlen(bufpic1)+strlen(bufpic2)+124;
    postString = (char*)malloc(len);
    memset(postString, '\0' ,len);
    sprintf(postString,"&img1=%s&img2=%s&key=%s&secret=%s&typeId=%d&format=%s",
                    bufpic1,bufpic2,key,secret,21,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内容
        curl_easy_setopt(curl, CURLOPT_URL, "https://netocr.com/api/faceliu.do");   // 指定url
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, readData); //将返回的http头输出到fp指向的文件
        res = curl_easy_perform(curl);
        printf("OK:%d\n",res);
/*将返回的字符串与“是”进行比对,若不等于NULL,则为同一个人*/
        if(strstr(buf,"是") != NULL){
                printf("the same Person\n");
        }else{
                printf("diff Person\n");
        }
        curl_easy_cleanup(curl);
    }

    return true;
}
                                                                                                                         79,1-8        92%

6、编译实现人脸识别

指定安装路径下:

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

默认安装方式下:

gcc demo1.c -lcurl

添加库文件环境变量

指定安装方式下:

export LD_LIBRARY_PATH=~/curl/curl-7.71.1/_install/lib

默认安装方式下:

export LD_LIBRARY_PATH=/usr/local/lib

参考博文:(1条消息) libcurl库及openssl库的安装与使用_one goto one的博客-CSDN博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于Linux的人脸识别功能 的相关文章

  • 就分页分段内存而言的程序寿命

    我对 x86 Linux 机器中的分段和分页过程有一个令人困惑的概念 如果有人能澄清从开始到结束所涉及的所有步骤 我们将很高兴 x86 使用分页分段内存技术进行内存管理 任何人都可以解释一下从可执行的 elf 格式文件从硬盘加载到主内存到它
  • 执行“minikube start”命令时出现问题

    malik malik minikube start minikube v1 12 0 on Ubuntu 18 04 Using the docker driver based on existing profile Starting c
  • Linux 上的 Pervasive ODBC 错误 [01000][unixODBC][驱动程序管理器]无法打开 lib '/usr/local/psql/lib/odbcci.so':找不到文件

    我正在尝试让 Pervasive v10 客户端 ODBC 在 Centos 6 上运行 据我所知 没有 64 位 ODBC 客户端 因此我必须使用 32 位客户端 我终于成功安装了它 但尝试使用时出现以下错误 isql v mydsn 0
  • 如何阻止ubuntu在使用apt安装或更新软件包时弹出“Daemons using outdatedlibraries”? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我最近新安装了 Ubuntu 22 04 LTS 我发现每次使用 apt 安装或更新软件包时 它都会询问我有关Which servic
  • 使用循环在 C 中管道传输两个或多个 shell 命令

    我正在尝试执行ls wc l通过 C 语言程序 而不是使用命令行 这是我当前的工作代码 int main int pfds 2 pipe pfds pid t pid fork if pid 0 The child process clos
  • 如何获取 (Linux) 机器的 IP 地址?

    这个问题和之前问的几乎一样如何获取本地计算机的IP地址 https stackoverflow com questions 122208 get the ip address of local computer 问题 但是我需要找到一个的I
  • 为什么 fopen("any_path_name",'r') 不给出 NULL 作为返回值?

    在调试一些代码时 我得到如下内容 include
  • C修改printf()输出到文件

    有没有办法修改printf为了将字符串输出到文件而不是控制台 我尝试在互联网上查找一些内容 发现了类似的电话dup dup2 and fflush这可能与此有关 EDIT 也许我不清楚 问题是这是C考试问题 问题如下 解释一个通常将字符串输
  • 在生产服务器上使用 Subversion 使文件生效的最佳方法是什么?

    目前我已经设置了 subversion 这样当我在 Eclipse PDT 中进行更改时 我可以提交更改 它们将保存在 home administrator 中项目文件 该文件具有 subversion 推荐的 branches tags
  • 如何在 *nix 中登录时运行脚本?

    我知道我曾经知道如何做到这一点 但是 如何在 unix 中登录时运行脚本 bash 可以 From 维基百科 Bash http en wikipedia org wiki Bash 28Unix shell 29 当 Bash 启动时 它
  • 如何在 Mac OSX Mavericks 中正确运行字符串工具?

    如何在 Mac OSX Mavericks 中正确运行字符串工具 我尝试按照我在网上找到的示例来运行它 strings a UserParser class 但我收到此错误 错误 Applications Xcode app Content
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser
  • 为什么 XRecordDisableContext() 不起作用?

    void Callback XPointer XRecordInterceptData pRecord std cout lt lt my logs n int main if auto const pDisplay XOpenDispla
  • [A-Z] 表示 [A-Za-z] 是怎么回事?

    我已经注意到 至少在我使用的一些基于 Unix 的系统上 ls A Z 已经给了我预期的结果ls A Za z 让我无法轻松获得以大写字母开头的该死的文件列表 我刚刚遇到了同样的事情grep 我无法让它停止与小写字母匹配 A Z 直到我最终
  • 为 OpenWrt 编写和编译程序

    我有一个在 OpenWRT 下运行的具有 MIPS 架构的嵌入式设备 系统类型 MediaTek MT7628AN ver 1 eco 2机器 WRTnode2P 处理器 0CPU型号 MIPS 24KEc V5 5 我想通过我的电脑 ub
  • 从核心转储中获取堆栈跟踪

    如何从核心转储文件中获取堆栈跟踪 该文件大约 14 mb 是在我的应用程序退出并显示 分段错误 后生成的 我使用的是红帽 5 5 gdb usr bin myapp binary corefile 然后 使用以下之一 gdb bt gdb
  • 跨 CPU 内核的 rdtsc 精度

    我从一个线程发送网络数据包 并在运行于不同 CPU 核心上的第二个线程上接收回复 我的流程测量每个数据包发送和接收之间的时间 类似于 ping 我使用 rdtsc 来获得高分辨率 低开销的计时 这是我的实现所需要的 所有测量结果看起来都很可
  • 如何找到进程启动时使用的原始用户名?

    有一个 perl 脚本需要以 root 身份运行 但我们必须确保运行该脚本的用户最初没有以用户 foo 身份登录 因为它将在脚本运行期间被删除 那么 我如何查明自登录以来可能已多次起诉的用户是否在该链中的任何时间都没有模拟过 foo 我发现

随机推荐

  • 对表的复杂查询

    1 连接查询 数据库中的各个表中存放着不同的数据 用户往往需要用多个表中的数据来组合 提炼出所需要的信息 如果一个查询需要对多个表进行操作 就称为连接查询 例 对student sno clno sname ssex sage course
  • Windows上安装Hadoop 3.x

    目录 0 安装Java 1 安装Hadoop 1 1 下载Hadoop 1 2 下载winutils 2 配置Hadoop 1 hadoop env cmd 2 创建数据目录 3 core site xml 4 hdfs site xml
  • 解决textarea文字不顶头显示/点击textarea 不是第一行

    问题描述 表单提交后发现内容前多了很多空格 而且每次更新表单提交都会有空格增加 后来发现 每次文字从数据库读到textarea后文字都不居左 在排出样式 转义字符等问题后 baidu google了一会始终没找到答案 后来发现原来问题处在H
  • 网络--正向代理和反向代理

    正向代理的概念 正向代理 也就是传说中的代理 他的工作原理就像一个跳板 简单的说 我是一个用户 我访问不了某网站 但是我能访问一个代理服务器 这个代理服务器呢 他能访问那个我不能访问的网站 于是我先连上代理服务器 告诉他我需要那个无法访问网
  • 如何将VS Code扩展插件迁移出系统盘

    背景 Windows的C盘 系统盘 容量经常不够用 经过排查发现VSCode的扩展插件所在目录占用了很大空间 为了节省系统盘的空间 需要将VSCode扩展插件迁移到D盘 环境 Windows VS Code 全称是Visual Studio
  • MySQL的JSON数据类型介绍以及JSON的解析查询

    文章目录 概述 JSON 数据类型的意义 JSON相关函数 测试 创建测试表 插入数据 查询数据 条件查询 优化JSON查询 解决方案 总结 概述 MySQL从5 7后引入了json数据类型以及json函数 可以有效的访问json格式的数据
  • iOS音视频—FFmepg:iOS平台下集成和应用

    1 在iOS平台下集成和应用FFmpeg Mac配置FFmpeg环境 1 安装homebrew ruby e curl fsSL https raw githubusercontent com Homebrew install master
  • Maven中测试插件(surefire)的相关配置及常用方法

    原创文章 版权所有 允许转载 标明出处 http blog csdn net wanghantong 1 在Maven中配置测试插件surefire html view plain copy
  • 通讯录管理系统(C++)

    1 菜单功能 功能描述 用户选择功能的界面 步骤 封装函数showMenu 显示该界面 在main函数中调用封装好的函数 菜单界面 void showMenu cout lt lt 1 添加联系人 lt lt endl cout lt lt
  • \t转义字符占几个字节?

    这个问题 在你学习编程过程中可能会考虑到 有时为了字节对齐而使用转义符中 t 但是到底 t占用几个空格呢 下面我们首先通过程序来体验下 然后在总结 include
  • ElasticSearch(7)---倒排索引

    上一篇 ElasticSearch 6 Kibana插件 1 正向索引和反向索引 涉及到索引的概念的时候 首先需要知道 索引可以分为正向索引和反向索引 也可以理解为倒排索引 正向索引 正向索引可以简单理解为从文档到单词 例如现在有4个文档
  • C库函数之memcpy的实现

    C库函数之memcpy的实现 memcpy的实现方式是当满足四字节对齐时 进行四字节的拷贝 不满足时进行单字节的拷贝 例如拷贝10个字节 循环两次拷贝四字节 在循环两次拷贝一字节 void mem memcpy void dst const
  • h5页面加空格常用的几种方法

    1 html table align center border 1px width 200px tr td 姓名 td td 姓名 td tr tr td 姓 nbsp 名 td td 姓 160 名 td tr tr td 姓 ensp
  • 原深感摄像头与face id实现人脸3D扫描和建模(转)

    原文地址 https tech china com article 20170914 2017091459353 html 就在本月13号 苹果在乔布斯剧院高调地召开了2017秋季新品发布会 本场发布会的最大亮点 也是此前外界最期待的 无疑
  • 正确认识H.264与MPEG-4技术产品

    MPEG4的技术规范如下表所示 H 264视频编解码标准被纳入MPEG 4 Part 10标准中 也就是说它只是附属于MPEG 4的第十部分 换句话说 H 264没有超出MPEG 4标准范畴 因此 网上有关H 264标准和视频传输质量高于M
  • errors and 0 warnings potentially fixable with the `--fix` option.

    vue 项目运行过程中出现 3 errors and 0 warnings potentially fixable with the fix option 的错误 报错问题 原因一 在创建vue项目中 会选择linter Formatter
  • 记一次MQ并发消费导致任务状态异常问题

    背景 项目中有一个短信群发任务 例如1次要发送1W条短信 系统会获取任务中每一条短信的MQ并发发送短信 任务默认状态是未发送 状态码 0 需要在这一批任务发送第一条短信的时候 将任务状态修改为发送中 状态码 1 在任务发送结束将状态修改为发
  • 轻量级卷积神经网络的设计技巧

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 这篇文章将从一个证件检测网络 Retinanet 的轻量化谈起 简洁地介绍 我在实操中使用到的设计原则和idea 并贴出相关的参考资料和成果供读者参考 因此本文是一篇注重
  • networkmanager is not running 网络管理没有运行

    如果确定网卡什么都安装好了 可以下面指令打开 network manager 服务 打开 sudo service network manager start PS network manager 服务 关闭 sudo service ne
  • 基于Linux的人脸识别功能

    前言 需要在翔云平台注册并购买人脸识别服务 通过https协议与个人中心的key和secret 与平台建立连接 说明 使用http协议需要安装libcurl库 而使用https协议需要安装libcurl库选择加入ssl服务 ssl服务依赖于