本文主要是介绍基于 Libcurl 通过 https 访问翔云 OCR 实现车牌识别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Libcurl 安装(Unix环境)
Libcurl 实现 Http 协议访问网页
一、准备工作:
1、 购买平台车牌识别次数
2、 实现车牌识别所需参数(以图片为 base64 流为例):
① 接口地址:https://netocr.com/api/recogliu.do
② 调用方法:post
接口接收参数(必传参数):
① 需要识别的车牌图片的 base64 流(字符型)
② 用户 key 和 secret 值,前往个人中心查看用户 OCR Key 和 OCR Secret 值(字符型)
③ 指定识别类型为 19,车牌识别(整型)
④ 指定返回格式(字符型)
3、 需要进行车牌识别的图片
二、代码:
#include <stdio.h>
#include <stdlib.h>
#include <curl/curl.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>#define true 1
#define false 0
typedef unsigned int bool;char *getPicBase64FromFile(char *filePath) //获取图片的 base64流函数
{int fd;int filelen;char cmd[128];char *bufPic;sprintf(cmd,"base64 %s > tmpFile",filePath); //拼接系统调用字符串system(cmd); //系统调用获取图片 base64流fd = open("./tmpFile",O_RDWR); //存放图片 base64 流的临时文件filelen = lseek(fd,0,SEEK_END); //计算文件字符数lseek(fd,0,SEEK_SET); //指针回到文件头部bufPic = (char *)malloc(filelen+2); //创建空间存放图片 base64流memset(bufPic,'\0',filelen+2); //初始化空间read(fd,bufPic,filelen); //文件内容读取到空间close(fd); //关闭文件描述符system("rm -f tmpFile"); //忽略提示关闭临时文件return bufPic; //返回图片 base64流
}size_t readData(void *ptr, size_t size, size_t nmemb, void *stream) //回调函数
{char buf[1024] = {'\0'};strncpy(buf,ptr,1024);printf("%s\n",buf); //打印识别结果
}bool postUrl()
{CURL *curl;CURLcode res;char *key = "xxxxxxxxxxxxxxxxxxxxxxxx"; //用户 OCR Key 值char *secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; //用户 OCR Secret 值int typeId = 19; //识别类型 19char *format = "xml"; //设置返回格式 "xml"char *postString;char *bufPic = getPicBase64FromFile("./plate.jpg"); //获取图片的 base64流int len = strlen(key)+strlen(secret)+strlen(bufPic)+124; //计算所需传参字符串大小postString = (char *)malloc(len); //为传参字符串创建空间memset(postString,'\0',len); //初始化传参字符串空间sprintf(postString,"&img=%s&key=%s&secret=%s&typeId=%d&format=%s",bufPic,key,secret,typeId,format); //拼接平台要求的传参字符串curl = curl_easy_init();if (curl){curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postString); //指定 post 内容curl_easy_setopt(curl, CURLOPT_URL, "https://netocr.com/api/recogliu.do"); //指定 urlcurl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, readData); //接收到数据,调用回调函数res = curl_easy_perform(curl);curl_easy_cleanup(curl); //清除 curl}return true;
}void main(void)
{postUrl(); // post 请求函数
}
三、编译:
export LD_LIBRARY_PATH=$PWD/curl-7.71.1/_install/lib/
gcc demo.c -o demo -I ./curl-7.71.1/_install/include/ -L ./curl-7.71.1/_install/lib/ -lcurl
四、识别完成:
这篇关于基于 Libcurl 通过 https 访问翔云 OCR 实现车牌识别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!