此项目为本人本科毕业设计项目,非常简单的一个停车收费系统,我的重点放在了Qt开发上位机软件上,简单记录一下。
利用ARM Cortex-A9芯片作为车道控制设备中央处理器,基于Linux系统开发下位机程序,搭建服务器,驱动摄像头,采集传输车牌视频信息。利用Qt开发平台自主开发一款配套下位机系统的上位机管理软件,实现视频接收、车牌识别、计费管理、记录查询等相关操作。
1、登录模块
本系统的用户名和密码由系统进行分配注册,输入已注册的用户名和对于的密码,点击“登录”按钮,后台会在管理员数据库表中查找相应用户名,对比其密码,密码一致即可成功登录,进入操作界面,密码及用户名错误或不存在则提示登录失败,界面阻塞不可进入。
2、数据管理及服务器连接界面
在登录系统成功后,为完成接收下位机监控视频的功能,我们需要连接下位机TCP服务器,网络管理在数据管理界面的右下部分。下位机服务器正常运行后,输入下位机对应的服务器的IP和端口号,点击“网络连接”按钮,没有问题即可连接成功。若服务器未运行,点击按钮则不会有反应,若服务器运行异常,则登录失败。
在“数据管理”模块可以对车辆用户进行增删改查的基本数据库管理操作。车辆用户用来记录车辆用户的个人信息及账户余额,每一个第一次入库的车辆必须先在此登记信息,进行账户充值,方可入库停车。所有的入库用户信息在此列表显示。
3、监控计费主界面
在服务器成功连接之后,回到“监控计费”界面,我们可以看到入口和出口的监控视频显示区域显示“监控未打开”字样,我们点击“打开监控”即可接收相应监控的视频画面。
4、记录查询
在“记录查询”页面可以查看车辆出入库的记录,通过数据库记录了所有出入库车辆的车牌号、出入库状态、出入库时间及停车时长,分页逐条显示。可以点击相应按钮跳转页面,也可删除选择项及清空数据库。
为了方便记录备份及查看,我们可以点击“导出记录”按钮将当前页面数据以Excel文件的方式导出,点击保存即可。
5、使用帮助
随便写一些装逼。
6、用户管理
切换用户、查看个人信息及关闭系统等操作。
7、车牌识别
车牌识别功能主要调用百度智能云的API,登录百度智能云官网,我们可以看到如图4.2.8所示的相关百度智能云服务。在本设计中我们可以选择图像识别,创建应用,从而获取相应的API密匙。
在上位机客户端软件编写中,我们就需要用到从百度智能云获取的车牌识别API密匙,Qt中调用百度API进行车牌识别的代码如下,封装了一个百度车牌识别的类进行实现,通过公有函数getCharNumber()返回识别的车牌号,在其他文件中需要的地方进行调用获取。
baiduAPI::baiduAPI(QWidget *parent) :
QWidget(parent)
{
AK="8IK1ddUmBy*************";//百度智能云获取的密匙
SK="ubEfVro4XX*************";
requestUrl="https://aip.baidubce.com/rest/2.0/ocr/v1/license_plate";
renewal_token(); //更新token值
manager = new QNetworkAccessManager();
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
}
void baiduAPI::networkPost()
{
//设置url
QUrl url(requestUrl+"?access_token="+accessToken);
QNetworkRequest request(url);
//设置http header
request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/x-www-form-urlencoded"));
//设置http body
QString name = "./car1.jpg";
QImage image(name);
QByteArray ba;
QBuffer buffer(&ba);
buffer.open(QIODevice::WriteOnly);
image.save(&buffer, "jpg");
QByteArray header = "image=";
QByteArray postData = header+ba.toBase64().toPercentEncoding();
//post方式发送
manager->post(request,postData);
}
QString baiduAPI::getCarNumber()
{
return carnumber;
}
1、启动服务器
在Linux系统中运行服务器代码,如如5.1.1所示,摄像头初始成功,服务器初始化成功,等待客户端连接。
2、客户端连接
3、入库测试
在上位机软件中打开入口的摄像头,接收视频画面,视频显示正常点击车牌识别按钮车牌识别正常,入库时间及车位数量等都计算无误。
4、出库测试
在上位机软件中打开出口的摄像头,接收视频画面,视频显示正常点击车牌识别按钮车牌识别正常,出库时间、收费计算及车位数量等都计算无误,闸门打开正常。
5、记录查询
在经过入库及出库测试后,在上位机的记录查询界面可以看到刚才的出入库记录,车牌号及出入库时间等相关信息均无误。
下位机选择了FS4412开发板,FS4412的主频可以达到1.4~1.6GHz,处理器采用Exynos4412, 该处理器是三星比较新的一款ARM Cortex-A9四核CPU,采用广受欢迎的ARM MPCore技术兼容[10]。ARM的成本低,效率高,最主要的是它能够运行Linux操作系统,方便对ARM的开发,能够编写TCP服务器程序完成网络通信。
下位机程序开发环境为VMware Workstation Pro,虚拟机为Ubuntu12.04,采用vim 编辑器及gcc4.6.4调试器。另外ARM需移植Linux操作系统,Linux系统内核为Linux3.14。
上位机软件开发采用Qt开发,它是跨平台的C++图形用户界面应用程序开发框架,其可以跨平台开发使用就是选择它的主要原因。版本:Qt 5.9.1,Qt Creator4.3.1,构建套件(Kit)为Qt5.9.1 MinGW_32,编译器支持C/C++编译,常用gdb调试器。如下图Qt中的编译器配置界面,采用MinGW 5.3.0 32位编译器。
关于上位机,如果没有ARM开发板,当然直接运用电脑自带摄像头,在linux下运行服务器代码也可完全达到运行效果,用ARM是在实用上,作为毕业设计装逼就行了。
服务器实现流程如下,非常简单
对于AMR开发板,只需移植linux操作系统,运行服务器代码即可,摄像头驱动都已经写好了的。
需要上位机软件运行及服务器客户端源代码参考的可点击链接下载:
https://download.csdn.net/download/qq_41632571/19860567?spm=1001.2014.3001.5503
https://download.csdn.net/download/qq_41632571/19860620?spm=1001.2014.3001.5503