基于翔云OCR实现的人脸识别

翔云ocr平台需要的信息
基于翔云OCR实现的人脸识别_第1张图片

基于翔云OCR实现的人脸识别_第2张图片
使用post请求实现人脸识别:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#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目录进行如下操作
基于翔云OCR实现的人脸识别_第3张图片但是配置后显示没有openssl库所以需要下载openssl库
基于翔云OCR实现的人脸识别_第4张图片
读README
基于翔云OCR实现的人脸识别_第5张图片
需要打开INSTALL
基于翔云OCR实现的人脸识别_第6张图片
按照步骤安装,其中./config不使用–prefix,会安装到默认路径(usr/local);make test可以省略,之后的make install需要加sudo;

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

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#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中回调函数打印到标准输出结果判断;
基于翔云OCR实现的人脸识别_第11张图片

你可能感兴趣的:(网络编程,Linux,树莓派)