项目设计:基于Qt和百度AI的车牌识别系统(嵌入式ARM)

        基于Qt和百度AI智能云实现的智能车牌识别系统,具体可实现为停车场管理系统、智能计费停车系统…等。

1.系统实现思路及框架

1.1实现思路

         要实现一个车牌识别系统,有多种方法,例如用opencv图像算法实现,或用第三方算法接口,选择一种合适的方式。除算法部分外,还需要有用户交互界面即UI,UI界面的实现也有多种方法,也需要多种方法对比选出适合的一种。

         此外,还有很重要的一项,用哪种语言实现,如C/C++,python,java …等。

1.1.1系统功能需求

        要做一个项目,首先要明确系统的功能有哪些,再根据功能思考该如何实现。该项目的功能有如下:

  1. 打开摄像头并能实时显示画面;
  2. 车牌识别,能准确识别出摄像头拍到的车牌号码;
  3. 识别到车牌后,能显示车牌号码,并截下车辆图片;
  4. 若是车库或收费系统,还需要录入/删除车牌,计费等功能。

关于编译语言,多种语言均可实现,这里选择C/C++。

1.1.2界面实现

         UI界面的实现,本系统选择最常用的QT库,本系统的所有UI界面都能实现,包括各种界面显示,如视频显示,文字/图像等,还有用户交互的部分,如按钮,输入框等操作控件。此外,QT库学习入门快、网上资料教程多等也是选择的原因之一。

1.1.3车牌识别实现

车牌识别,不选择算法复杂的opencv,而是选用简单调用接口的百度AI平台。用百度AI平台,具体算法方面不用关心,只需要按照其访问要求来对接即可,即发送的内容要按照百度AI定义的协议要求来组织,具体要查看百度AI官方文档,后续再具体讲解。

1.2系统框架

1.2.1硬件框架

        系统的硬件主要分为两大部分:PC主机和ARM开发板,即需要一块ARM-Linux开发板(带屏幕),一个摄像头,一台PC主机,一根网线(开发板与PC主机连接)。

硬件框架

1.2.2软件框架

系统的软件框架主要分为三大部分:前台(ARM开发板)、后台(PC主机)、百度智能云。

前台(ARM开发板)主要功能是采集图像、信息显示等;后台(PC主机,ubuntu)主要是车牌管理(录入/删除车牌等)、对接百度智能云平台;百度智能云主要是识别车牌信息。

2.系统开发环境搭建

PC主机的运行环境是在windows上运行的虚拟机ubuntu系统。

2.1 Qt开发环境

界面采用QT进行开发,主要安装qt creator即可。

qt creator安装程序是图形化界面的,像在windows上安装软件一样,比较简单,不再累述。

2.2百度AI开发环境

与百度AI的通信方式是https,因此,百度AI相关的环境主要有OpenSSL库、Curl库和Json库的安装。

2.2.1 OpenSSL库安装

下载openssl库:/source/index.html (openssl.org)

实验版本:openssl-1.1.1s.tar.gz

将openssl库源码包放到ubuntu下,解压出来,并进入解压出来的目录。

配置编译选项:主要配置安装路径

$ ./config –prefix=/usr/local/openssl

编译:

$ make

安装:

$ sudo make install

安装完成,可在安装路径下见到openssl

2.2.2 Curl库安装

下载curl源码包:curl-7.88.0.tar.gz

下载地址:curl downloads

亦可用命令下载:

$ wget https://curl.se/download/curl-7.88.0.tar.gz

将源码包放入ubuntu,解压出来,并进入解压出来的目录:

配置编译选项:指定安装在/usr/local/curl目录,指定openssl的路径,

$ ./configure --prefix=/usr/local/curl --with-ssl=/usr/local/openssl

编译

$ make

安装

$ sudo make install

2.2.3 Jsoncpp安装

下载jsoncpp库:jsoncpp-master.tar.gz

open-source-parsers/jsoncpp: A C++ library for interacting with JSON. (github.com)

把源码包放到ubuntu上,解压出来并进入解压出来的目录:

执行amalgamate.py脚本,会在当前目录生成dist目录:

dist目录就是我们需要的源码文件,共有3个文件:

jsoncpp.cpp、json-forwards.h、json.h

将其包含在我们的工程源码一起编译即可使用json接口了。

使用时,只需包含头文件json.h

#include "json/json.h"

3.系统实现步骤

        整个系统的实现,分功能分模块逐个实现,由简入深,先表面再内部,就是说,先做界面和图像采集及显示的,然后调前台和后台之间的通信,最后再实现百度AI算法接口的调用。

3.1 Qt界面

3.1.1 界面显示及而已

界面显示及布局可直接在Qt creator上添加想要的控件及设定其坐标位置即可,十分的直观快捷。

前台界面设计如下:

注:中间大图区域显示摄像头画面,右侧显示识别出来的车牌号信息。

后台界面设计如下:

注:中间大图区域显示摄像头画面或出入记录表格,右侧为识别结果及车牌管理相关功能。

3.1.2 摄像头图像采集及显示

对摄像头的驱动,采用的是linux系统的V4L2框架,这是linux系统内部的,不需要我们来实现,只管调用即可。

V4L2流程:申请若干个buffer,组成一个队列,每个buffer用于存放一帧图像,当摄像头有图像时便会填充到到这些buffer中,要读取数据时实际是取出一个已填充图像的buffer,读完图像又将该buffer塞入队列中。

采集到图像后,将送至屏幕显示以及传输给后台并由后台发送到百度AI平台识别,百度AI再返回识别结果,这样图像的流程就走完了。

图像流程

3.2 前后台通信

前后台通信采用的是socket套接字TCP连接,一切数据交互都是基于TCP连接的,后台为服务器,前台为客户端。

3.3 百度AI调用

3.3.1 创建百度设备

首先要在百度智能云官网上创建自己的账号,然后创建一个人车牌识别的项目/设备,具体操作请自行了解,这里不再展开。

3.3.2 百度AI算法的调用

百度AI算法的调用是基于https协议的,向百度AI服务器使用post发送请求,带上验证信息、图片数据等,百度AI处理post请求并识别图片中的车牌号后,再返回结果。

未完待续...

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

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

相关文章

输出梯形 C语言

解析:这个输出图形的题就是一个找规律加数学计算,我们发现每行比上一行多两个*,最后一行的*表达式为h(h-1)*2,即3*h-2,那么每一行就是一个先输出最后一行-当前行*个数个空格&#xf…

pytorch 图像数据集管理

目录 1.数据集的管理说明 2.数据集Dataset类说明 3.图像分类常用的类 ImageFolder 1.数据集的管理说明 pytorch使用Dataset来管理训练和测试数据集,前文说过 torchvision.datasets.MNIST 这些 torchvision.datasets里面的数据集都是继承Dataset而来&#xff0c…

[Redis]——Redis命令手册set、list、sortedset

🌳List类型常见命令 LPUSH / RPUSH [KEY] [element] …… 向列表左侧或者右侧插入一个或多个元素 LPOP / RPOP [key] 删除左边或者右边第一个元素 LRANGE [key] start end 返回索引start到end的元素(索引从0开始) BLPOP / BRPOP [key] [等…

【C++】类的默认成员函数(上)

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 文章目录 一、默认成员函数二、构造函数构造函数的概念及特性 三、析构函数析构函数的特性…

蓝桥杯倒计时 43天 - 前缀和,单调栈

最大数组和 算法思路&#xff1a;利用前缀和化简 for 循环将 n^2 简化成 nn&#xff0c;以空间换时间。枚举每个 m&#xff0c;m是删除最小两个数&#xff0c;那k-m就是删除最大数&#xff0c;m<k&#xff0c;求和最大的值。暴力就是枚举 m-O(n)&#xff0c;计算前 n-(k-m)的…

PCSA时钟控制集成之时钟门控级别

这一部分描述了&#xff1a; • 时钟门控的级别。 • 实现最大效果的时钟门位置。 • 实现有效和高效时钟门控的集成方法。 时钟树是由时钟缓冲器构建的&#xff0c;这些缓冲器在时钟源&#xff08;时钟输入或PLL&#xff09;与时钟终端&#xff08;寄存器或RAM&#xff09…

ULN2003(COM的作用)

单路内部电路原理图 三极管多级放大电路&#xff0c;最大可达到500ma&#xff1b; 典型应用&#xff1a; ULN2003属于灌电流驱动方式&#xff1b;输入与输出电平反向&#xff0c;下拉4K电阻&#xff0c;为解决单片机上电IO瞬间不稳定&#xff1b; COM端 1.可悬空&#xff1a…

git标签操作

一.标签管理 1.理解标签 标签 tag &#xff0c;可以简单的理解为是对某次 commit 的⼀个标识&#xff0c;相当于起了⼀个别名,当我们需要回退到某个重要版本时&#xff0c;直接使⽤标签就能很快定位到 2.创建标签 ⾸先&#xff0c;切换到需要打标签的分⽀上,然后&#xf…

经典目标检测网络Yolo——原理部分

目标检测问题 分为两个子问题: 找到图片中哪些位置、哪些区域含有目标对象识别这些区域中的目标对象是什么基于CNN的目标检测算法能够很好的解决第二个问题,在一张图片仅含一个对象,且该对象占据了整张图片绝大部分面积时,基于CNN的对象识别算法具有很高的准确率。 一种定…

操作系统(1)——学习导论(Ⅱ)

目录 小程一言专栏链接: [link](http://t.csdnimg.cn/6grrU) 学习导论&#xff08;Ⅱ&#xff09;操作系统-赏前人佳作大型操作系统大型操作系统的一些特点和功能举例 服务器操作系统服务器操作系统特点和功能举例 多处理器操作系统举例 个人计算机操作系统举例 掌上计算机操作…

设计模式:什么是设计模式?①

一、什么是设计模式&#xff1f; 1. 是一类程序设计思想 2. 是在大量实践过程中摸索总结出的标准经验提炼 3. 具有多样性和丰富性&#xff0c;不同情况应用的思想不同 二、设计模式的好处 1. 代码生产力和效率的提升 2. 让代码表现更为规整&#xff0c;简洁。阅读维护管理的成本…

【竞技宝】DOTA2-梦幻联赛S22:AR命悬一线 XG确定晋级淘汰赛

北京时间2024年2月28日&#xff0c;DOTA2梦幻联赛S22的比赛在昨日进入小组赛第三个比赛日&#xff0c;本次梦幻联赛共有AR、XG、IG三支中国区的队伍参赛&#xff0c;那么经过三日激烈的比赛之后&#xff0c;目前三支队伍的积分情况以及晋级形势如何呢&#xff1f; XG XG是小组…

贪心(基础算法)--- 区间选点

905. 区间选点 思路 &#xff08;贪心&#xff09;O(nlogn) 根据右端点排序 将区间按右端点排序 遍历区间&#xff0c;如果当前区间左端点不包含在前一个区间中&#xff0c;则选取新区间&#xff0c;所选点个数加1&#xff0c;更新当前区间右端点。如果包含&#xff0c;则跳…

常见的算法

查找算法 基本查找 package MyApi.search;public class a01BasicSearchdemo01 {public static void main(String[] args) { int[] arr{131,127,147,81,103,23,7,79}; int number82;System.out.println(BasicSearch(arr,number));}public static boolean BasicSearch(int[] ar…

Java二叉树(1)

&#x1f435;本篇文章将对二叉树的相关概念、性质和遍历等知识进行讲解 一、什么是树 在讲二叉树之前&#xff0c;先了解一下什么是树&#xff1a;树是一种非线性结构&#xff0c;其由许多节点和子节点组成&#xff0c;整体形状如一颗倒挂的树&#xff0c;比如下图&#xff1…

给nginx部署https及自签名ssl证书

一、生成服务器root证书 openssl genrsa -out root.key 2048 openssl req -new -key root.key -out root.csr#Country Name (2 letter code) [XX]:---> CN#Country Name (2 letter code) [XX]:---> CN#State or Province Name (full name) []:---> Shanghai#Locality…

多层感知机 + 代码实现 - 动手学深度学习v2 | 李沐动手学深度学习课程笔记

感知机 感知机≈二分类问题 感知机和其他问题的对比 训练感知机 如果小于等于零&#xff0c;说明预测错啦 &#xff0c;其实就是同号为正&#xff0c;异号为负 举个分类的例子 增加样本&#xff0c;改变分类线 继续分类 感知机的收敛定理 XOR问题 XOR问题其实就是第1、3象限数…

【踩坑】一条指令解决torch_scatter等安装报错安装不上问题

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 目录 背景说明 (推荐方法)解决方法一&#xff1a;使用conda安装。 解决方法二&#xff1a;指定pip的网站。 解决方法三&#xff1a;直接去下载whl文件。 (终极方法)解决方法四&#xff1a;配置MSVC 特殊情况…

构建 ESLint 内存泄露检测插件入门:提升代码质量与防范运行时风险

前言 本文目的是介绍如何创建开发一个自定义规则 ESLint 插件。利用其能力,检测一些代码中可能存在的内存泄露并及时进行提示,避免潜在的后期影响。 本文实现其中一部分功能–检测事件监听器的使用是否存在内存泄露为例来演示基本的 ESLint 自定义规则插件开发的过程。用以…

nginx笔记整理

目录 一.Nginx基础介绍 二.nginx安装配置 三.Nginx配置文件 3.1nginx主配置文件(/etc/nginx/nginx.conf) 3.2默认的网站配置文件(/etc/nginx/conf.d/default.conf) 四.创建新的虚拟主机 五.Nginx日志 5.1nginx日志格式 5.2查看日志 5.3日志缓存(了解) 5.4日志轮转(/…