0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PyQT5案例开发

OpenCV学堂 来源:OpenCV学堂 2023-05-25 09:46 次阅读

基本设计思路

基于YOLOv8对象检测/实例分割模型,实现一个基于检测的对象跟踪算法,YOLOv8支持两种主流的对象跟踪算法ByteTrack与Botsort。通过自定义数据训练YOLOv8对象检测器可以实现不同类别的对象的跟踪。同时基于检测与跟踪模型的输出,实现了对象计数、指定类别跟踪、区域流量统计、指定ID跟踪、单对象与多对象跟踪等操作。

应用开发层面,需要三个主要的交互与显示界面,一个是针对YOLOv8检测与跟踪模型的模型参数设置;第二个是针对YOLOv8检测与跟踪结果的显示过滤与输出过滤的后处理;第三个是针对后处理数据的显示包括流量出入、是否需要语音报警等应用层面的数据展示。

整个程序开发实现了跟踪线程与界面线程分别独立工作,支持数据交互,实时显示运行结果与流量统计信息展示。最终完成的界面设计如下:

cc1564a4-fa35-11ed-90ce-dac502259ad0.png

运行截图

实时车辆流量统计

cc1c9206-fa35-11ed-90ce-dac502259ad0.png

基于对象ID的单对象跟踪:

cc291350-fa35-11ed-90ce-dac502259ad0.png

人流量出入统计

cc325618-fa35-11ed-90ce-dac502259ad0.png

代码

启动跟踪开始交通流量统计线程的代码如下:

defon_yolov8_track(self):
image_file=self.image_file_edit.text()
label_file=self.label_file_path.text()
model_file=self.weight_file_path.text()
iflen(image_file)==0orlen(label_file)==0orlen(model_file)==0:
QtWidgets.QMessageBox.warning(self,"警告","参数文件未选择...")
return

self.traffic_delta_label.setText("流量净值:0")
self.traffic_jam_label.setText("总流量:0")
self.input_traffic_label.setText("进流量:0")
self.output_traffic_label.setText("出流量:0")

settings=DLInferSettings()
settings.weight_file_path=self.weight_file_path.text()
settings.label_map_file_path=self.label_file_path.text()
settings.score_threshold=self.conf_spinbox.value()
settings.input_image=image_file
settings.track_vehicle=self.vehicle_chkbox.isChecked()
settings.track_person=self.person_chkbox.isChecked()
settings.track_by_category_index=self.category_combox.currentIndex()
settings.track_id=self.track_by_id_spin_box.value()
settings.target_deploy=1
ifself.hline_rbtn.isChecked():
settings.track_line_type=0
ifself.vline_rbtn.isChecked():
settings.track_line_type=1
ifself.diagonal_rbtn.isChecked():
settings.track_line_type=2

self.work_thread=InferenceThread(settings)
self.work_thread.fire_stats_signal.connect(self.on_update_result_image)
self.work_thread.finished.connect(self.work_thread.deleteLater)
self.work_thread.start()
self.startBtn.setStyleSheet("background-color:gray;color:white")
self.startBtn.setEnabled(False)
self.stopBtn.setStyleSheet("background-color:cyan;color:black")
self.stopBtn.setEnabled(True)
使用槽函数更新界面,实现实时分析结果显示的代码如下:
defon_update_result_image(self,outs):
image=outs.get("result")
done=outs.get("done")
num_in=outs.get("num_in")
num_out=outs.get("num_out")
ifimageisnotNone:
dst=cv.cvtColor(image,cv.COLOR_BGR2RGB)
height,width,channel=dst.shape
bytesPerLine=3*width
img=QtGui.QImage(dst.data,width,height,bytesPerLine,QtGui.QImage.Format_RGB888)
pixmap=QtGui.QPixmap(img)
pix=pixmap.scaled(QtCore.QSize(1280,720),QtCore.Qt.KeepAspectRatio)
self.label.setPixmap(pix)
self.show_text("OpenCV开发者联盟-跟踪演示")
self.traffic_delta_label.setText("流量净值:%d"%(num_in-num_out))
self.traffic_jam_label.setText("总流量:%d"%(num_in+num_out))
self.input_traffic_label.setText("进流量:%d"%num_in)
self.output_traffic_label.setText("出流量:%d"%num_out)
ifdoneisnotNone:
self.stopBtn.setStyleSheet("background-color:gray;color:white")
self.stopBtn.setEnabled(False)
self.startBtn.setStyleSheet("background-color:cyan;color:black")
self.startBtn.setEnabled(True)





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 检测器
    +关注

    关注

    1

    文章

    860

    浏览量

    47651
  • 过滤器
    +关注

    关注

    1

    文章

    427

    浏览量

    19550

原文标题:PyQT5案例开发

文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    在全志H616核桃派开发板上进行PyQt5的代码编写和运行

    : utf-8 -*- # pyQT5 For WalnutPi from PyQt5 import QtCore, QtGui, QtWidgets classUi_MainWindow(object
    发表于 05-13 09:59

    在全志H616核桃派开发板上部署PyQt5的信号与槽详解

    什么是信号和槽 信号(signal)和槽(slot)是PyQt5对象之间通讯纽带。一个完整的信号和槽流程有4个内容: 发送者、信号、接收者、槽。 他们之间最简单的流程如下: 举个例子:在前面第一个
    发表于 05-13 10:10

    【Firefly RK3399试用体验】第二篇:PyQt5大战点灯

    ,使用命令apt install python3-pyqt5Ubuntu里也提供了一些IDE开发工具如IDLE、Spyder等等,此处不详细介绍它们安装过程。之后我们开始编写Pyqt5点灯,需要的前提
    发表于 06-12 07:49

    利用PyQt5编辑软件界面的简单步骤

    的操作以及利用PyQt5编辑软件界面的简单步骤。实现难度不大,但需要运行第二线程运行输出脉冲的程序。 首先,推荐一下PyQt5和Eric6的学习资料...
    发表于 09-16 07:48

    如何使用Python配合PyQT5模块来开发图形化应用程序

    By Toradex秦海1).简介随着Python在互联网人工智能领域的流行,大家也慢慢感受到Python开发的便利,本文就基于嵌入式ARM平台,介绍使用Python配合PyQT5模块来开发图形化
    发表于 12-24 06:41

    鲁班猫0 ubuntu20 解决python3.10安装pyqt5

    前面用pip install pyqt5,总是安装不成功。经查阅资料,最后用:udo apt install python3-pyqt5成功安装cat@lubancat:~$
    发表于 04-09 11:04

    Python PyQt5工具在Windows平台上的安装方法

    Python PyQt5工具安装步骤:1. 安装Python3.4.1,默认安装路径:C:\Python34;2. 安装PyQt5,会根据Python的安装路径自动进行安装,不需要修改;3. 测试安装是否成功。创建一个py文件,写入以下代码,运行后弹出widget窗口就说
    发表于 02-13 10:45 2594次阅读

    PyQt5的中文教程电子书免费下载

     本教程的目的是带领你入门PyQt5。教程内所有代码都在Linux上测试通过。PyQt4 教程是PyQt4的教程,PyQt4是一个Python(同时支持 2和3)版的Qt库。
    发表于 08-06 08:00 13次下载
    <b class='flag-5'>PyQt5</b>的中文教程电子书免费下载

    PyQT5+OpenCV开发的应用如何打包发布?

    我自己用PyQT5写了一个应用程序,基本上都写好了,到了打包发布这个环节,我知道的有两个工具可以帮我打包分别是。
    的头像 发表于 10-25 09:40 2458次阅读

    OpenCV+PyQT5开发桌面应用几个重要的坑与解决

    大概去年八月份的时候,我打算用OpenCV+PyQT5开发一套OpenCV教学演示与快速验证桌面软件,说实话那个时候我对PyQT5的理解就是Hello World水平。经过一年多开发
    的头像 发表于 12-13 11:55 1605次阅读

    2023年Python GUI桌面应用开发该选哪个库

    当前主流的Python GUI库主要有PyQT5、TKinter、Pyside、PyQT5/PySide+QML、Kivy、PySimpleGUI等,PyQT5是它们当中绝对的佼佼者,它基于著名的Qt框架构建,拥有众多
    的头像 发表于 01-30 11:57 1663次阅读

    请问PyQT5是如何构建YOLOv8界面应用程序的

    PyQT5中引用OpenMV2023版本支持SDK,实现二次开发使用。OpenMV算法层已经开放SDK调用支持,从图像处理、分析、测量到深度学习推理全部支持SDK调用方式实现第三方应用与程序集成。
    的头像 发表于 02-14 17:07 1457次阅读

    使用pycharm开发上位机配置pyqt5的环境

    在上位机的开发过程中,使用QT的图形化界面,是开发上位机最好最简单的选择,因此我将讲述配置pyqt5的环境。 软件安装: 安装:pycharm的社区2021.02版 QT(安装参考https
    发表于 05-29 16:12 0次下载
    使用pycharm<b class='flag-5'>开发</b>上位机配置<b class='flag-5'>pyqt5</b>的环境

    PYQT5自动化上位机开发记录

    记录使用PYQT5快速开发生产工具使用python开发用于wafer切割系统控制部分 文章简介 项目简介 控制框图 DEMO展示 基础环境搭建 因其他原因停止更新使用python开发
    发表于 05-11 18:25 2次下载
    <b class='flag-5'>PYQT5</b>自动化上位机<b class='flag-5'>开发</b>记录

    基于PyQT5与ONNXRUNTIME实现风格迁移应用

    2023年一月份跟二月份创建了一个PyQT5人工智能软件开发系列的文章系列,过去的两个月都没怎么更新,心里一直想有时间继续更新下去,今天又更新了一篇,基于PyQT5实现多线程、界面化、风格迁移模型的实时推理。
    的头像 发表于 10-25 10:35 491次阅读
    基于<b class='flag-5'>PyQT5</b>与ONNXRUNTIME实现风格迁移应用