项目设计:基于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.mfbz.cn/a/425895.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

02-设计概述

上一篇:01-导言 本章重点讨论 JNI 中的主要设计问题。本节中的大多数设计问题都与本地方法有关。调用 API 的设计将在第 5 章:调用 API 中介绍。 2.1 JNI 接口函数和指针 本地代码通过调用 JNI 函数来访问 Java 虚拟机功能。JNI 函数可通过接口指针使用…

设计模式(九)模版方法模式

请直接看原文:设计模式(九)模版方法模式_模板方法模式的优缺点-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- 1.模版方法模式简介 模版方法模式介…

无人机巡检技术方案,无人机智能化巡检在火电厂的应用场景分析

无人机智能化巡检是一种将先进的无人机技术与人工智能、大数据分析等现代信息技术相结合的新型巡检方式,主要用于替代或辅助传统的人工巡检,在多个领域实现高效、精准和安全的巡查工作。 无人机技术在火电厂巡检中的应用: 无人机电力巡航&a…

中科大计网学习记录笔记(十七):拥塞控制原理 | TCP 拥塞控制

前言: 学习视频:中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程 该视频是B站非常著名的计网学习视频,但相信很多朋友和我一样在听完前面的部分发现信…

(每日持续更新)jdk api之PipedReader基础、应用、实战

博主18年的互联网软件开发经验,从一名程序员小白逐步成为了一名架构师,我想通过平台将经验分享给大家,因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验,晚上进行用心精简、整理、总结、定稿&…

多路转接之epoll

常用的三个API: epoll_create(); //例如 int epfd epoll(10);创建一棵有10个结点的红黑树,注意:这个数只是对内核建议的数值,内核参照这个参数去构建epoll_ctrl();//参数2 op可以取值 EPOLL_CTL_ADD/MOD/DELevents:EPOLLIN/…

C++进阶(二) 多态

一、多态的概念 多态的概念:通俗来说,就是多种形态, 具体点就是去完成某个行为,当不同的对象去完成时会 产生出不同的状态。举个栗子:比如买票这个行为,当普通人买票时,是全价买票;学…

Sora:探索大型视觉模型的前世今生、技术内核及未来趋势

Sora,一款由OpenAI在2024年2月推出的创新性文生视频的生成式AI模型,能够依据文字说明,创作出既真实又富有想象力的场景视频,展现了其在模拟现实世界方面的巨大潜能。本文基于公开技术文档和逆向工程分析,全面审视了Sor…

java八股文复习-----2024/03/03

1.接口和抽象类的区别 相似点: (1)接口和抽象类都不能被实例化 (2)实现接口或继承抽象类的普通子类都必须实现这些抽象方法 不同点: (1)抽象类可以包含普通方法和代码块&#x…

work 3/1

1>机械臂 #include <head.h> #define SER_POTR 8899 #define SER_IP "192.168.125.223" int main(int argc, const char *argv[]) {//创建套接字int cfdsocket(AF_INET,SOCK_STREAM,0);if(cfd-1){perror("");return -1;}//链接struct sockaddr_i…

腾讯云4核8G服务器申请费用多少?性能如何?支持几个人?

腾讯云4核8G服务器支持多少人在线访问&#xff1f;支持25人同时访问。实际上程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#xff0c;假设公网带宽太小&#xff0c;流量直接卡在入口&#xff0c;4核8G配置的CPU内存也会造成计算…

【详识JAVA语言】面向对象程序三大特性之三:多态

多态 多态的概念 多态的概念&#xff1a;通俗来说&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同的状态。 多态实现条件 在java中要实现多态&#xff0c;必须要满足如下几个条件&#xff0c;缺一不可&#xf…

Sqli-labs靶场第20关详解[Sqli-labs-less-20]自动化注入-SQLmap工具注入

Sqli-labs-Less-20 通过测试发现&#xff0c;在登录界面没有注入点&#xff0c;通过已知账号密码admin&#xff0c;admin进行登录发现&#xff1a; 登录后会有记录 Cookie 值 设想如果在Cookie尝试加上注入语句&#xff08;报错注入&#xff09;&#xff0c;测试是否会执行…

Hololens2开发环境配置及项目生成部署

Hololens2开发环境配置及项目生成部署 Hololens2开发环境配置及项目生成部署一、官方文档及推荐配置说明1.官方文档介绍2.推荐配置及配置说明 二、安装步骤0.现有Visual Stuido和Unity卸载1.Windows SDK安装2.Visual Studio安装3.Unity安装4.MRTK配置 三、初次环境配置1.新建Un…

C++进阶(三) 二叉搜索树

一、二叉搜索树 1.1 二叉搜索树概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值若它的右子树不为空&#xff0c;则右子树上所有节点的值都大于根节…

Postman上传文件的操作方法

前言 调用某个接口&#xff0c;测试上传文件功能。一时间不知如何上传文件&#xff0c;本文做个操作记录&#xff0c;期望与你有益。 步骤一、设置Headers key:Content-Type value:multipart/form-data 步骤二、设置Body 选择form-data key:file下拉框选择file类型value&…

2024年【道路运输企业主要负责人】考试报名及道路运输企业主要负责人模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 道路运输企业主要负责人考试报名根据新道路运输企业主要负责人考试大纲要求&#xff0c;安全生产模拟考试一点通将道路运输企业主要负责人模拟考试试题进行汇编&#xff0c;组成一套道路运输企业主要负责人全真模拟考…

Mysql学习之各种锁

锁 事务的隔离性由锁来实现 MySQL并发事务访问相同记录 并发事务访问相同记录的情况大致可以分为3种&#xff1a; 读-读的情况 读-读情况&#xff0c;即并发事务相继读取相同的记录。读取操作本身不会对记录由有任何的影响&#xff0c;并不会引起什么问题&#xff0c;所以允许…

【SQL注入】宽字节注入原理讲解

一、addslasehes()转义函数 addslashes() 是 PHP 中用于转义字符串中的特殊字符的函数之一。它会在指定的预定义字符&#xff08;单引号、双引号、反斜线和 NUL 字符&#xff09;前面添加反斜杠&#xff0c;以防止这些字符被误解为代码注入或其他意外操作。 1. 用法 string …

对程序、进程、线程、并发、并行、高并发概念的讲解

一、概述 程序、进程、线程、并发、并行和高并发是计算机科学领域中非常重要的概念。 了解进程、线程、并发和并行的概念&#xff0c;可以更好地利用计算机的多核处理器和并行计算能力&#xff0c;提高计算机性能。 了解进程和线程为操作系统中的资源管理提供了基础&#xff…
最新文章