车牌识别--http协议

news2024/11/27 0:22:10

文章目录

  • libcurl
  • 车牌识别

前言

基于https协议访问网址实现车牌识别

http是超文本传输协议,它可以在B/S模式下解决tcp传输格式的问题,处于tcp之上在应用层

https是http加密版本,通过http+ssl实现加密版http

我们车牌识别通过http协议调用翔云API接口,实现车牌识别


一、libcurl

libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议

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

1.一般我们用一个库,会去访问该库的README,和INSTALL如何安装这个库,在去看docs这个文件夹,是对readme的一个补充

我们在docs看到install如何对这个库进行安装,它说去install.md看如何安装 

2. 进入install.md里面有三条指令

./configgure --prefix=(指定位置)  (安装在哪个位置,后面如果没指定参数就是安装到默认位置)
如何不知道怎么看如何安装到其他位置,用./configgure --help,进行查看
./configure --prefix=$PWD/_install,¥就是获取当前位置,我们安装到当前位置的_install
make 开始编译代码
make install 安装编译过后的代码,只有安装编译过后的代码,才会生成_install文件夹

二、车牌识别

1.curl使用

  • 调用curl_global_init()初始化libcurl
  • 调用curl_easy_init()函数返回一个easy interface型指针,一个句柄,跟fd一样
  • 调用curl_easy_setopt()设置我们需要传输选项
  • 调用curl_easy_perform()执行请求
  • 调用curl_easy_cleanup()释放内存

2.函数介绍

  • curl_easy_init用来初始化一个CURL的指针(有些像返回FILE类型的指针一样). 相应的在调用结束时要用curl_easy_cleanup函数清理,一般curl_easy_init意味着一个会话的开始. 它会返回一个easy_handle(CURL*对象), 一般都用在easy系列的函数中.
  • void curl_global_cleanup(void);结束libcurl使用的时候,用来对curl_global_init做的工作清理。类似于close的函数。
  • 调用curl_easy_perform()在setopt函数配置完成过后执行请求

curl_easy_setopt()

  •  CURLOPT_URL  设置要访问的网站
  •  CURLOPT_WRITEFUNCTION 回调函数原型为:size_t function( void *ptr, size_t size, size_t nmemb, void *stream); 函数将在libcurl接收到数据后被调用,因此函数多做数据保存的功能,
  •   curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);// 改协议头,setparam

3.登录翔云去购买key

根据翔云API文档的要求进行传参,翔云请求用的post请求,它和get请求的区别就是post参数不可见,get参数可见,post传参用&隔开,http协议就是请求行 请求头 请求体 

4.通过https协议调用翔云车牌识别接口 

#include <stdio.h>
#include <curl/curl.h>
#include <string.h>
#include <stdlib.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;
int ret;

size_t readData( void *ptr, size_t size, size_t nmemb, void *stream)
{
        char *buf=(char *)malloc(ret);

        strncpy(buf,ptr,ret);
        printf("%s\n",buf);

        free(buf);
}


char *getImg(char * argv)
{
        int fd;
        char param[128]={'\0'};
        char *buf=NULL;

        sprintf(param,"base64 %s > ./tmp",argv);
        system(param);

        fd = open("./tmp",O_RDWR);
        ret = lseek(fd,0,SEEK_END);
        lseek(fd,0,SEEK_SET);
        buf=(char *)malloc(ret);

        read(fd,buf,ret);

        return buf;

}

bool postUrl(char * argv)
{
        CURL *curl;
        CURLcode res;
        curl = curl_easy_init();    // 初始化

        int len;
        char *param = NULL;
1       char *img = NULL;
        char *key = "AD5KFKqkL4RWSvr3wZ8yme";
        char *secret = "aececfba2dbe4a82aec6ea5c79b5256d";
        char *format = "xml";
        int typeId = 19;

        img = getImg(argv);
        len = (strlen(img)+strlen(key)+strlen(secret)+strlen(format)+sizeof(int) +10 );
        param=(char *)malloc(len);
        sprintf(param,"&img=%s&key=%s&secret=%s&typeId=%d&format=%s",img,key,secret,typeId,format);

        if (curl)
        {
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, param);    // 传参
                                                curl_easy_setopt(curl,CURLOPT_URL,"https://netocr.com/api/recogliu.do");//fangwen wwww
                curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION , readData); //将返回的html主体数据输出到fp指向的文件

                res = curl_easy_perform(curl);   // 执行

                if (res != 0)
                {
                     curl_easy_cleanup(curl);//shifang
                }

                return true;
        }
}
int main(int argc,char **argv)
{


        postUrl(argv[1]);
}

运行结果:

./a.out car2.jpg 

<?xml version="1.0" encoding="UTF-8"?>
<data>
   <message>
      <status>0</status>
      <value>识别完成</value>
   </message>
   <cardsinfo>
      <card type="19">
         <item desc="车牌号"><![CDATA[京N8P8F8]]></item>
         <item desc="车牌颜色"><![CDATA[蓝]]></item>
         <item desc="车牌颜色"><![CDATA[1]]></item>
         <item desc="车牌类型"><![CDATA[1]]></item>
         <item desc="整牌可信度"><![CDATA[86]]></item>
         <item desc="亮度评价"><![CDATA[145]]></item>
         <item desc="车牌运动方向"><![CDATA[0]]></item>
         <item desc="车牌位置(left_top_right_bottom)"><![CDATA[60_232_892_420]]></item>
      </card>
   </cardsinfo>
</data>


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/742547.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Django_admin数据管理后台

目录 一、基础操作 二、自定义后台操作数据行为 源码等资料获取方法 admin数据管理后台是django内置的一个后台管理界面&#xff0c;能查看已注册模型类的数据结构&#xff0c;以及对数据的增删改。 一、基础操作 1.1 检查项目目录下的urls.py有没有如下配置 1.2 创建djan…

使用U盘在无系统的机器上安装Ubuntu

1、在Bios中选择将USB 作为Boot Option #1 2、插入制作好的系统盘&#xff08;系统盘制作可以看上一篇博客&#xff09; 3、save & exit选择 save change and reset 4、 开始安装系统 如果出现安装窗口过大无法点击下一步&#xff0c;可以使用ALTF7拖动窗口。

java中的BIO NIO AIO

多路复用IO模型是目前使用的比较多的模型。java中的NIO常用的理解是在 网络IO中&#xff0c;那么在网络IO中为什么NIO比BIO效率更高&#xff1f;我们的web项目中是用的哪种呢&#xff1f;可以往下看。 JavaNIO实际上就是多路复用IO。在多路复用IO模型中&#xff0c;会有一个线程…

【Unity】Unity2022设置2D动画的sample

首先在主页面选择Animation 出现这样的一个框 点击红点行&#xff0c;最右侧的三个点 将Show Sample Rate勾选上即可

Fiddler工具 — Fiddler常用插件(Willow)

Fiddler已有的功能已经够我们日常工作中使用了&#xff0c;为了更好的扩展Fiddler&#xff0c;Fiddler也是支持一些插件的安装&#xff0c;也支持用户自己开发插件并安装。 Fiddler插件下载地址&#xff1a;https://www.telerik.com/fiddler/add-ons 1、Traific Difer插件 Tr…

【Java】Map(包括HashMap)

Map HashMap 和 Hashtable 的区别HashMap 和 HashSet 区别HashMap 的底层实现JDK1.8 之前JDK1.8红黑树 HashMap 的长度为什么是 2 的幂次方HashMap 多线程操作导致死循环问题HashMap 为什么线程不安全&#xff1f; ConcurrentHashMapConcurrentHashMap 和 Hashtable 的区别JDK …

常见面试题之JVM实践(调优)

1. JVM调优的参数可以在哪里设置参数值&#xff1f; 1.1 tomcat的设置vm参数 修改TOMCAT_HOME/bin/catalina.sh文件&#xff0c;如下图&#xff1a; JAVA_OPTS"-Xms512m -Xmx1024m" 1.2 springboot项目jar文件启动 通常在linux系统下直接加参数启动springboot项…

在Pandas中处理缺失数据

当没有为一个或多个项目或整个单元提供信息时&#xff0c;可能会出现数据缺失。缺失数据在现实生活中是一个非常大的问题。缺失数据在pandas中也可以称为NA&#xff08;不可用&#xff09;值。在DataFrame中&#xff0c;有时许多数据集只是缺少数据&#xff0c;因为它存在而未被…

52 # 二叉树的前中后遍历

二叉树的遍历 线性数据结构遍历比较简单&#xff0c;可以采用正序遍历、逆序遍历。 遍历树的目的一般是修改树&#xff0c;比如修改树的节点&#xff0c;采用访问者模式 前序遍历 前序遍历&#xff08;preorder traversal&#xff09;&#xff1a;先访问根节点&#xff0c;…

Go语言struct要使用 tags的原因解析

这篇文章主要介绍了为什么 Go 语言 struct 要使用 tags,在本文中&#xff0c;我们将探讨为什么 Go 语言中需要使用 struct tags&#xff0c;以及 struct tags 的使用场景和优势&#xff0c;需要的朋友可以参考下 在 Go 语言中&#xff0c;struct 是一种常见的数据类型&#xf…

由于找不到vcomp100.dll,无法继续执行代码,解决方法

为什么会由于找不到vcomp100.dll,无法继续执行代码问题呢&#xff1f; 文件被误删除&#xff1a;有时候&#xff0c;在进行系统清理或卸载应用程序时&#xff0c;可能会不小心删除了vcomp100.dll文件。如果某个程序依赖于该文件&#xff0c;并且文件被删除&#xff0c;那么该程…

ESP32开发:IDFV4.4配置LVGL8.3

配置LVGL8.3源码 LVGL GITHUB代码仓库如下&#xff1a;https://github.com/lvgl/lvgl/tree/release/v8.3 官方已经在ESP32上移植好的代码demo&#xff0c;目前最新版是LVGL 7.9&#xff1a;https://github.com/lvgl/lv_port_esp32 我们可以将LVGL官方配置好的ESP32 LVGL仓库下…

超详细的学习笔记:CSS盒子模型(附代码示例)

目录 一、CSS三大特性 1、继承性 2、层叠性 3、优先级 4、权重叠加的计算 二、PxCook的基本使用 三、盒子模型 1、盒子模型的介绍 2、内容的宽度和高度 3、边框 (border) 1、连写形式 2、单方向设置 3、单个属性 8、内边距&#xff08;padding&#xff09;和外边…

arm学习stm32之spi总线数码管倒计时

由于时间没有用时间计时器操作&#xff0c;有些误差&#xff0c;后续有空会翻新计时器版本 main.c #include "spi.h" extern void printf(const char *fmt, ...); void delay_ms(int ms) {int i,j;for(i 0; i < ms;i)for (j 0; j < 1800; j); } int num[10…

钉钉提示 redirect_url的域名不在appid的安全域名内

钉钉提示 redirect_url的域名不在appid的安全域名内 1、需要在《钉钉开放平台》- 开发者后台设置《钉钉扫码登陆功能》 2、如果钉钉界面没有钉钉扫码登陆功能-》点击浏览器右下角-》《返回旧版》 3、备注&#xff1a;当前访问的IP地址跟钉钉扫码登陆功能填写的IP地址需保持一致…

代码审计工具Fortify基本使用

最近接触到一款代码审计的工具 — Fortify SCA and Applications 22.2.0&#xff0c;现就其基本使用做一简单介绍&#xff01; Fortify是一个应用安全测试软件&#xff0c;是Micro Focus旗下AST&#xff08;应用程序安全测试&#xff09;产品。 Fortify能够提供静态和动态应用…

Acwing 853.有边数限制的最短路

Acwing 853.有边数限制的最短路 链接:853. 有边数限制的最短路 - AcWing题库 /* 题解:bellman_ford算法 可以算是一种暴力的算法了 他可以解决有复权边的单源最短路径 也可以解决图是否存在负环的问题 还可以求出 不超过k条边的最短路径问题 但是效率低下 时间复杂度为o(nk)n…

超有趣的linux命令2

超有趣的linux命令2 此次实验命令均在Ubuntu16.04版本上测试 注意有些命令需要在图形化界面才能显示效果 温馨提示&#xff1a;可能有人是第一次接触Ubuntu&#xff0c;所以下面详细写了如何配置源和网络&#xff0c;以及安装命令的方式 1. 首先配置软件源 以命令行方式配置…

Comate代码助手推出,现场生成了贪吃蛇游戏,我们距离AI自动编程还有多远?

Comate代码助手推出&#xff0c;现场生成了贪吃蛇游戏&#xff0c;我们距离AI自动编程还有多远&#xff1f; 百度智能云推出“Comate”代码助手&#xff0c;并正式开放邀测&#xff0c;不算很意外。 毕竟让AI写代码&#xff0c;跑一跑贪吃蛇&#xff0c;算是传统艺能。 不过你…

MongoDB 简介及安装(windows环境下)

一、MongoDB 简介 1、MongoDB 是什么 MongoDB 是一个开源的、基于分布式的、面向文档存储的非关系型数据库。是非关系型数据库当中功能最丰富、最像关系数据库的。 MongoDB 将数据存储为一个文档&#xff0c;数据结构由键值(key>value)对组成。MongoDB 文档类似于 JSON 对…