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

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

项目思路
在这里插入图片描述

raspistill命令的相关参数说明

-v:调试信息查看
-w:图像宽度
-h:图像高度
-rot:图像旋转角度,只支持 0、90、180、270 度(这里说明一下,测试发现其他角度的输入都会被转换到这四个角度之上)
-o:图像输出地址,例如image.jpg,如果文件名为“-”,将输出发送至标准输出设备
-t:获取图像前等待时间,默认为5000,即5秒

raspistill -o test.png -w 400 -h 400 -t 1000
摄像头拍摄分辨率为400x400的图片,等待时间为1s,保存在当前文件夹的test.png

OCR平台返回的字符串格式

<?xml version="1.0" encoding="UTF-8"?>
<data>
   <message>
      <status>0</status>
      <value>比对完成</value>
   </message>
   <cardsinfo>
      <card type="21">
         <item desc="判定值"><![CDATA[0.9075357]]></item>  //对比率为0.9075357
         <item desc="判定结果"><![CDATA[是]]></item>	//判断为是同一个人
      </card>
   </cardsinfo>
</data>

例程

#include <stdio.h>
#include <curl/curl.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>

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

char post_info[500];
size_t ReadHandler( void *ptr, size_t size, size_t nmemb, void *stream)
{
	int buf_size=size*nmemb;
	char *buf=malloc(buf_size+1);
	memset(buf,'\0',buf_size+1);
	strncpy(buf,ptr,buf_size);
	//printf("%s\n",buf);
	strcat(post_info,buf);
	free(buf);
	return buf_size;
}
char* getImgBase64(char *img_name)
{
	int fd; 	
	int size=0;
	char cmd[30];
	char *img_buf;
	sprintf(cmd,"base64 %s >tmpfile.txt",img_name);//将图片Base64流保存到tmpfile.txt文件
	if(system(cmd)==256)
	{
		return NULL;
	}
	fd=open("tmpfile.txt",O_RDWR);
	size=lseek(fd,0,SEEK_END);
	//printf("size:%d\n",size);
	img_buf=malloc(size+2);
	memset(img_buf,'\0',size+2);
	lseek(fd,0,SEEK_SET);
	read(fd,img_buf,size);
    close(fd);
	//printf("%s\n",img_buf);
	system("rm tmpfile.txt");
	return img_buf;
}
char* getCamBase64()
{
        int fd;
        int size=0;
        char cmd[30];
        char *img_buf;
		system("raspistill -o cambuf.png -w 400 -h 400 -t 1000");//摄像头拍摄
		sleep(1);
        sprintf(cmd,"base64 %s >tmpfile.txt","cambuf.png");//将图片Base64流保存到tmpfile.txt文件
        if(system(cmd)==256)
        {
                return NULL;
        }
        fd=open("tmpfile.txt",O_RDWR);
        size=lseek(fd,0,SEEK_END);
        //printf("size:%d\n",size);
        img_buf=malloc(size+2);
        memset(img_buf,'\0',size+2);
        lseek(fd,0,SEEK_SET);
        read(fd,img_buf,size);
        close(fd);
        //printf("%s\n",img_buf);
        system("rm tmpfile.txt");
		system("rm cambuf.png");
        return img_buf;
}

bool postUrl(char* img1_name)
{
    CURL *curl;
    CURLcode res;
    char *PostString;
    char *img1;
    char *img2;
    char *key="yourkey";
    char *secret="yoursecret";
    int  typeId=21;
    char *format="xml";
	char *info_loop=NULL;
    float result_rate=0;
    img1=getImgBase64(img1_name);
    img2=getCamBase64();
    if((img1==NULL))
    {
    	printf("img dont exist!\n");
		return false;
    }
    PostString=malloc(strlen(img1)+strlen(img2)+strlen(key)+strlen(secret)+sizeof(typeId)+strlen(format));
    sprintf(PostString,"&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");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS,PostString);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, ReadHandler);
        res = curl_easy_perform(curl);
		//printf("OK:%d\n",res);
        curl_easy_cleanup(curl);
		if((info_loop=strstr(post_info,"判定值"))!=NULL)
        {
				if((info_loop=strstr(info_loop,"CDATA"))!=NULL)
				{
					info_loop+=6;
					info_loop = strtok(info_loop, "]");
					result_rate=atof(info_loop);
					printf("the result rate:%f\n",result_rate);
					if(result_rate>0.75)
					{
						printf("the result:same person\n");
					}
					else
					{
						printf("the result:different person\n");
					}
				}
				else
				{
					printf("get result error!\n");
				}
        }
        else
        {
                printf("get result error!\n");
        }
    }
    free(img1);
    free(img2);
    return true;
}
int main(int argc,char* argv[])
{
    memset(post_info,'\0',500);
    if(argc!=2)
    {
    	return -1;
    }
    curl_global_init(CURL_GLOBAL_ALL);
    postUrl(argv[1]);
    curl_global_cleanup();
}

运行程序

./mycurl xxx (xxx为参考图片文件)

pi@raspberrypi:~/Desktop/mycurl/test $ ./mycurl hui.png
the result rate:0.874296
the result:same person
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一盆电子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值