Python+PyQt5编写的VLPRVTL目标检测软件结构与使用说明
Intelligent Traffic Scene Monitoring System
@Copyright by: JoeyforJoy,WHU222huan,GanAHE
You can find more information and software update by visiting
www.ganahe.top
一、 程序前端技术设计原理
(一) 设计模型
前端采用的框架为PyQt5,遵循GPL v3开源协议。
前端主要是对后端技术的封装与逻辑调用,采用MVC的设计模式,将数据与界面分离,整体设计结构如下:
视图为软件界面,通过界面操作发送动作指令,控制器接收后按条件执行相应的动作。在执行动作有需要数据的支持时,通过发送请求到model,实现数据的请求获取或存储。Model的数据来自于控制器传入的数据以及持久化存储的config.json文件,可以实现对数据的临时与长久存储、数据中转等操作。
对于视图,根据功能的划分设计如下:
界面的显示包括目标检测、模型训练、信息监控、多文档界面、弹窗提示、文件筛选器等,用到的组件为Qwindow、QWight、QDialog。子窗体与主窗体、其他窗体等的信息数据传递依赖于PyQt5强大的信号/信号槽机制。某一个动作(事件)需要传递数据时,先将数据存储到datebase中转区域,随后发送指定信号,与该信号绑定的槽函数将对中转区域的数据进行相应的处理,由此完成了窗体之前的数据传递与交互。
(二) 多线程与信息反馈机制设计
表1 不同类型目标检测的代码
Code | 链接目标 | 功能 |
---|---|---|
201 | 子线程1-目标检测 | 视频检测 |
202 | 子线程1-目标检测 | 单张图像检测 |
203 | 子线程1-目标检测 | 批量图像检测 |
由于模型识别、训练等的处理所需耗时较长,在等待过程中由于拥塞极易导致软件出现假死现象,为提高软件的健壮性与适用性,在广泛添加异常捕捉机制之外,还采用了多线程的设计架构,以应对复杂的多任务与高占用处理需求。 | ||
对于软件的事件处理逻辑,正常情况下,目标检测、模型训练等功能在遇到需要进行如启动线程等的信息反馈时,通过图3的标注紫线启动信息传递中间信息到指定线程以激活对应的子线程,进而实现脱离窗体主线程完成高占用工作。 | ||
当出现重要信息展示、错误信息提示和操作错误警告时,将由QDialog发送信息,按照严重程度进行不同级别的反馈。 |
表2 不同信号代码对应的层级
Code | 响应组件 | 级别 | 反馈目标层 | 作用 |
---|---|---|---|---|
E | QDialog | 一级 | QWindow | 弹窗信息,分别对应:Error、Warn、Tip以及Reply |
W | QDialog | 一级 | QWindow | |
T | QDialog | 一级 | QWindow | |
R | QDialog | 一级 | QWindow | |
F | QTextEdit | 一级 | QWindow | 传替文件路径设置文件列表树 |
I | QTextEdit | 一级 | QWindow | 主窗体状态栏信息传替 |
F[1] | lcdNumber | 二级 | QWight | 设定视频检测时的FPS |
file | QtCore.pyqtSignal | 二级 | QWight | 链接一级F,转送文件路径 |
train | QTextEdit | 二级 | QWight | 显示模型训练重要信息 |
M | Qlabel | 二级 | QWight | 显示视频每一帧识别结果 |
A | QLabel | 二级 | QWight | 显示图像识别后的结果 |
V | Win32com | 二级 | QThread | 将信号、信息传替子线程播送 |
[1] 层级不同信号代码可以相同
二、操作说明
(一) 软件整体结构与功能说明
1.1 界面说明
图2-1 欢迎页面
二、 需求规格
(一) 概述
交通场景智能监控综合系统软件(以下简称为本软件)使用Python语言编写,在Windows操作系统下运行。为了进行神经网络的训练与测试需要安装tensorflow库;为了在神经网络训练与测试过程中使用GPU加速,需要配置NVIDIA公司推出的适用于NVIDIA显卡的并行计算框架CUDA,同时安装深度神经网络的加速库cuDNN;针对图像与视频处理需要安装OpenCV库;针对数学运算需要安装Numpy库。
(二) 环境
操作系统环境:Windows 10(向下兼容)
程序语言:Python 3.X
软件包管理系统和环境管理系统:Conda
GPU并行计算框架:CUDA
(三) 库
程序运行所需的库保存在requirement.txt文件中,包含以下内容:
scipy==1.4.1
opencv_python==3.4.5.20
Keras==2.1.5
numpy==1.17.4
tensorflow==1.14.0
matplotlib==3.0.3
Pillow==7.1.2
PyQt5==5.14.2
scikit_learn==0.23.1
scikit_image==0.17.2
hyperlpr==0.0.2
(四) 环境与库配置方法
Python、Conda与CUDA等环境的安装配置请自行查阅有关教程,在此不再赘述。
大多数库可在终端通过pip install或conda install指令安装。
(五) 测试机硬件参数
Ø 测试机1
型号:LENOVO Y7000P
CPU:Intel(R) Core(TM) i5-8300U CPU @2.30GHz 2.30 GHz,8G内存
GPU:NVIDIA GeForce GTX 1060
操作系统:Windows 10
Ø 测试机2
型号:HP Pavilion Gaming Laptop 15-dk0xxx
CPU:Intel(R) Core(TM) i5-9300U CPU @2.40GHz 2.40 GHz,8G内存
GPU:NVIDIA GeForce GTX 1660Ti
操作系统:Windows 10
Ø 测试机3
型号:acer Laptop
CPU: Intel(R) Core(TM) i5-7300HQ CPU @ 2.50GHz,8G内存
GPU:NVIDIA GeForce GTX 1050
操作系统:Windows 10
三、 软件安装
(一) 安装包解压到安装路径
双击ITSMS Official2.2.0 setup.exe进行软件安装:
图1 安装界面:协议接受
选择“I accept the agreement”后点击“Next”进入下一步。
图2 选择安装路径
选择软件安装路径之后,点击“Next”进行安装。
图3 等待文件解压安装
创建桌面快捷方式,并等待大约一分钟即可安装完成,之后可以使用软件对交通场景进行智能监控。
(二) 安装完成
安装完成后,点击ITSMS Official 2.2.0,初次打开会比较慢,请稍微等待片刻,随后即可进入如下软件欢迎界面:
图4 欢迎界面
四、 软件操作手册
(一) 软件操作基本内容说明
(1) 界面构成
界面结构组成主要为操作与显示区、信息监控区、操作菜单栏、弹出式提示/操作窗口组成。
操作与显示区域为各类功能的操作面板与结果等信息呈现的区域,是整个软件的交互最为核心的组成部分;
信息监控区是软件所有运行状态的监控区域,有助于用户和开发者等掌握软件整体情况与进程;
操作菜单栏是在操作与显示区域操作面板上的进一步提升,用来实现软件整体的交互操作;
弹出式提示/操作窗口有“关于”、“设置”等窗体,用来装载软件的相关信息、进行设置操作以及异常错误等信息弹窗提醒。
图5 结构三大组成结构
图6 弹出式提示/操作窗口示例:设置界面
(2) 信息监测
信息监测由文件列表栏与状态信息栏构成。文件列表栏主要用于呈现打开文件后文件目录信息(尤其是工作空间),状态信息栏是软件必不可少的一部分,其实现了软件的所有内部运行信息监控,有助于用户了解当前软件的进程,同时方便开发者进行调试,并对重要信息进行呈现。
文件列表栏与状态信息栏可以调节大小和位置,可以调节为浮动。在需要呈现更多信息时也可以隐藏。
图7 信息检测栏组成与信息监控展示
(组)图8 监控信息栏不同设置与展现的演示:状态信息栏为例
隐藏后如果需要显示,需要点击菜单栏的开关按钮实现重新开启,下图中1控制状态信息栏的开启与隐藏,2控制文件列表栏的隐藏与启用。
图9 文件列表与状态信息栏开关
(3) 菜单栏
菜单栏是所有软件整体功能的操作区域,控制着软件全局操作逻辑,具体的菜单栏内容将在后文结合实际功能进行说明。
(4) 软件设置功能
软件设置功能是整个软件的设置部分,包括工作路径、运行环境、语音提示等的设置。按照下图操作即可打开设置面板:
图10 打开设置面板
工作路径设置
该功能为软件的重要设置部分,在进行图像检测、监控视频检测、模型训练时都需要用到该功能。
其中工作路径是图像、监控视频等检测结果与报告的输出路径,运行软件后的输出结果可在该功能进行修改;
模型文件默认,如有新的模型可以更改,否则该项一般不需要去设置;
道路相机参数极为重要,每一个不同道路监控摄像头的相机参数与其相应的视频一一对应,即每次对不同监控相机摄像的视频都需要更改为这个摄像机的相机参数,这样才能保证速度检测、车牌识别等功能是正常的。
文件路径的第一个按钮(带三个点)为自定义更改的路径按钮,点击后可以自行设置自己需要的路径,“默认”按钮则会恢复当前操作的默认路径。
最下排的按钮分别用来恢复所有路径默认值、保存修改、退出设置界面等。注意:每次修改后,如果不保存,则当前软件是已经生效了的,当在关闭软件后所有设置项都将在下一次打开时恢复默认设置;如果选择保存,则后续无论什么时候打开软件,所有设置的内容都将保存为修改后的结果。
图11 工作路径设置
运行环境设置
运行环境主要是CPU与GPU的区别,由于时间有限,GPU加速功能暂不支持。
图12 运行环境设置
其他设置
该功能是为辅助软件操作准备的一个自动语音朗读提示功能,在进行关键操作或是发生错误时,如果开启该功能就可以进行语音提示。
图13 其他设置:系统提示语音
(二) 图像检测与流量统计
点击菜单栏:功能-图像检测与流量统计进入该功能。
图14 打开步骤演示
(1) 参数设置
表1 图像检测参数对照表
参数 | 对应功能与作用 |
---|---|
识别检测目标 | 默认情况下是全选状态,可以通过勾选自定义检测目标 |
自动保存结果到工作空间 | 为在检测后将检测标记好的影像自动存储到工作空间中,该功能能够保存与原图相同或近似的分辨率 |
识别模式 | 提供了“目标检测与数量统计”、“目标检测与车牌识别”两个功能 |
多张影像弹出或是逐张显示 | 此参数是在进行批量识别情况下的设置,默认为逐张显示,此时检测后的图像将显示在界面内,如果选择弹出窗显示,则会一张一张弹出显示,此情况下可以在弹出窗内对图像进行额外的操作,如放大查看、另存到指定目录等 |
图15 图像检测参数操作面板
(2) 图像检测与流量统计
提供了单张图像检测、多张图像批量检测的功能。以单张影像检测的操作为例,点击对应的按钮弹出文件选择框:
图16 导入图像进行检测演示
如果有提示“检测到当前为初次使用……”则请稍等片刻,此时会预加载模型,为后续提供高速的检测功能。
图17 首次使用弹窗说明
检测完成,得到如下结果:
图18 图像检测结果信息呈现区域
其中中间部分是检测并标注后的图像,右侧对应检测信息,左侧图表为流量统计结果。
(3) 保存检测结果
1》 自动保存到工作空间
上文已说明,选择后即可实现保存到工作空间,输出文件路径为/workspace/Image_Result/,文件名为:RESULT_[当前检测图像图像名].png,此时也可以从文件列表栏看到文件的变动。
2》 检测后的界面图像右键另存
在检测后的界面上显示的图像点击右键,弹出选择对话框实现图像另存,该方法可以实现自定义的路径输出与命名,但分辨率相对于自动保存的结果会减低。
图19 图像检测结果自动保存/右键自定义保存演示
3》多张图像批量检测弹出窗另存
在弹出的窗体选择图像另存,效果与右键保存的效果一致。
图20 批量图像检测弹出窗显示效果及自定义保存
(三) 监控视频超速车辆检测
在菜单栏上,选择:功能-监控视频超速视频检测。
(1) 导入待检测视频文件
图21 导入检测视频
按照图示标示一步步进行操作即可,导入相机参数操作亦同。
(2) 导入待检测视频对应的相机参数文件
图22 导入相机参数
(3) 参数设置
表2 视频识别参数对照表
参数 | 对应功能与作用 |
---|---|
识别目标 | 与上文图像检测目标设定相同 |
保存视频识别帧功能 | 自动将视频识别并标注后的每一帧保存到工作空间,路径为/workspace/ [当前检测的视频名称] FRAME_RESULT/,命名为1……n.jpg; |
保存识别后视频 | 自动将标注后每一帧合成一个视频,保存在workspace中,命名为[当前检测的视频名称]_Detection.avi |
仅检测不跟踪模式 | 是视频检测的一个方法,一般不需要设置 |
限速与检测距离 | 当前路段的限速情况,用来判别和界定车辆是否超速违章。相应的值可以上下调节,当需要跨度较大的调节方式时,可以鼠标点击轮盘摁住旋转,可以快速调整限速阈值,范围为0-150km/h。 |
图23 视频检测面板
(4) 开始检测
点击开始检测,即可。
注意,视频检测中,还提供了一个图像识别的功能,该功能主要是为了在当前视频进程不结束的情况下,可以进行图像检测等来实现对比等功能。
图24 视频检测操作步骤
图25 视频检测车辆超速违章信息
图26 视频检测结束总统计
(5) 强制终止检测进程
当视频过长或是无需完成检测视频时,可以执行强制终止操作。值得说明的是,强制终止进程后,此前进行检测的违章报告、自动保存帧(选择情况下)、自动保存视频(选择情况下)都会保存相应的文件。
(6) 查看导出信息
以video-02.mp4这一段视频为例,只检测视频前几秒内的画面,导出后的文件情况如下,视频检测参数选择全部导出时的导出项如图27:
图27导出项展示
图28 保存视频检测帧功能的结果展示
图29 自动导出的违章检测报告
由于监控视频角度不好、相机参数不够准确、视频分辨率不高等因素,会导致车牌识别的效果较差。
(四) 自定义训练检测模型
模型训练功能是为专业人员增设的一个功能,在当前模型不能满足识别目标的情况下,可以通过待检测目标相近的数据集进行训练,以获得对特殊情况下的识别与检测需求。
(1) 训练界面说明
点击菜单栏:“功能-模型检测”可进入训练界面,界面如下:
图30 模型训练界面组成
在“参数设置区”中,可设置模型训练时的必要参数,其具体含义将在下一节中介绍。
在“训练控制区”中,可控制训练的进行。设置完训练参数后,点击“训练模型”按钮,即可开始模型的训练;点击“强制终止”按钮,则中断模型的训练;点击“测试模型”,会出现以下提示:
图31 训练结束后的测试提示
点击“Yes”,便会自动跳转到“监控视频超速车辆检测”界面,进行测试。在测试之前,需要在系统设置中修改需要测试的模型的权重文件。
在“信息输出区”中,会实时输出训练过程中产生的信息。
(2) 训练输入参数
表3 模型训练参数
参数 | 对应功能与说明 |
---|---|
标注文件路径 | 标注文件的路径,标注文件的格式如下: 每一行的格式为: , 其中 的格式为: (无空格) |
标注文件配套类名文件路径 | 类名文件定义了网络层输出层目标类别的具体含义,每一行都是一个类名,每一行的序号就是对应类型的 |
anchors文件路径 | anchors文件记录了使用的anchor box的尺寸。其格式如下: …… 其中 分别表示第 个anchor box的宽和高 |
batch size | batch size,指每一次训练时输入的图像数,受CPU或GPU的容量限制 |
number of epoches | 指训练集的遍历次数 |
加载预训练模型 | 是否要加载预训练模型。如果是,则需在”权重文件路径”中指定预训练模型的权重路径 |
权重文件路径 | 预训练模型的权重路径,加载预训练模型时设置 |
冻结darnet主体 | 如果冻结,则训练模型时只改变输出层的权重值 |
训练模型保存路径 | 指模型训练完毕后,权重文件的保存路径 |
五、下载软件
请到原文获取下载地址与源代码。