IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 基于翔云OCR实现的人脸识别 -> 正文阅读

[人工智能]基于翔云OCR实现的人脸识别

翔云ocr平台需要的信息
在这里插入图片描述

在这里插入图片描述
使用post请求实现人脸识别:

#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>

#define true  1
#define false 2
typedef unsigned int bool;

char buf[1024] = {'\0'};

size_t readData( void *ptr, size_t size, size_t nmemb, void *stream)
{
        char buf[1024] = {'\0'};
        strcpy(buf,ptr);
        printf("%s\n",buf);
}

bool postUrl()
{
    CURL *curl;
    CURLcode res;
    char *postString;

    char img1[1024];         
    char img2[1024];
    //ocr平台所需要的参数
    char *key = "";               //此处加入ocr平台的key
    char *secret = "";			  //ocr平台的secret
    int typeld = 21;              
    char *format = "xml";

    int len = strlen(img1)+strlen(img2)+strlen(key)+strlen(secret)+128;
    postString = (char *)malloc(len);
    memset(postString,'\0',len);
    sprintf(postString,"&img1=%s&img2=%s&key=%s&secret=%s&typeId=%d&format=%s",img1,img2,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);

        res = curl_easy_perform(curl);
        printf("ok!%d\n",res);

        curl_easy_cleanup(curl);
    }
    return true;
}

int main(void)
{
    postUrl();
}

由于该方案使用的是https协议,之前编译出的libcurl不支持ssl,所以需要重新编译
删除之前编译出来的_install文件
在这里插入图片描述
阅读docs中INSTALL.md文件,查看编译步骤,发现如果需要支持SSL需要进行在config中加入如下选项
在这里插入图片描述
退出docs目录进行如下操作
在这里插入图片描述但是配置后显示没有openssl库所以需要下载openssl库
在这里插入图片描述
读README
在这里插入图片描述
需要打开INSTALL
在这里插入图片描述
按照步骤安装,其中./config不使用–prefix,会安装到默认路径(usr/local);make test可以省略,之后的make install需要加sudo;

继续到curl文件夹中安装ssl
在这里插入图片描述
安装完之后在make,编译curl
在这里插入图片描述
安装make install在这里插入图片描述
接下来就可以编译post请求的代码,并执行,由于图片没有上传所以会出现必传参数为空字样
在这里插入图片描述
将图片放入进去
Base64:
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。使用Base64编码具有不可读性,需要解码才能阅读。
图片可以利用LInux下base64命令转换成base64格式;
在这里插入图片描述
在代码中使用system将base64格式存放到临时文件中;

#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>

#define true  1
#define false 2
typedef unsigned int bool;

char buf[1024] = {'\0'};


size_t readData(void *ptr, size_t size, size_t nmemb, void *stream)
{
        strcpy(buf,ptr);
        printf("%s\n",buf);
}

char* getPicBase64(char *filePath)         //获取64位编码函数
{
        char *bufPic = NULL;
        char cmd[128] = {'\0'};
        sprintf(cmd,"base64 %s > tmpFile",filePath);   //拼接base64 filePath  >  tmpfile   
        system(cmd);                                   //使用system函数将base64格式放到tmpfile中

        int fd = open("./tmpFile",O_RDWR);             //打开tmpfile文件
        int fileLen = lseek(fd,0,SEEK_END);            //利用光标获取文件的大小
        lseek(fd,0,SEEK_SET);                          //将光标返回到文件起始位置
        bufPic = (char *)malloc(sizeof(char)*(fileLen+2));    //为buf开辟空间
        memset(bufPic,'\0',fileLen+2);                  //初始化buf
        read(fd,bufPic,fileLen);                        //将tmpfile中的内容读到buf中
        close(fd);                                      //关闭文件
        system("rm -rf tmpfile");                       //删除文件,第二张图片调用该函数是重新创建,并且base64格式是从文件起始位置写入

        return bufPic;                                  //将buf返回
}

bool postUrl()
{
    CURL *curl;
    CURLcode res;
    char *postString;

    char img1[1024];
    char img2[1024];
    char *key = "";
    char *secret = "";
    int typeld = 21;
    char *format = "xml";

    char *bufPic1 = getPicBase64("./mi.jpeg");        //调用函数获取base64编码
    char *bufPic2 = getPicBase64("./mi2.jpeg");

    int len = strlen(img1)+strlen(img2)+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);

        res = curl_easy_perform(curl);
        printf("ok!%d\n",res);

        curl_easy_cleanup(curl);
    }
    return true;
}

int main(void)
{
    postUrl();
}


比较两个图片利用set-opt中回调函数打印到标准输出结果判断;
在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-03 11:10:51  更:2021-08-03 11:11:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 21:56:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码