PyQT5案例开发

基本设计思路
基于yolov8对象检测/实例分割模型,实现一个基于检测的对象跟踪算法,yolov8支持两种主流的对象跟踪算法bytetrack与botsort。通过自定义数据训练yolov8对象检测器可以实现不同类别的对象的跟踪。同时基于检测与跟踪模型的输出,实现了对象计数、指定类别跟踪、区域流量统计、指定id跟踪、单对象与多对象跟踪等操作。
应用开发层面,需要三个主要的交互与显示界面,一个是针对yolov8检测与跟踪模型的模型参数设置;第二个是针对yolov8检测与跟踪结果的显示过滤与输出过滤的后处理;第三个是针对后处理数据的显示包括流量出入、是否需要语音报警等应用层面的数据展示。
整个程序开发实现了跟踪线程与界面线程分别独立工作,支持数据交互,实时显示运行结果与流量统计信息展示。最终完成的界面设计如下:
运行截图
实时车辆流量统计
基于对象id的单对象跟踪:
人流量出入统计
代码
启动跟踪开始交通流量统计线程的代码如下:
def on_yolov8_track(self):    image_file = self.image_file_edit.text()    label_file = self.label_file_path.text()    model_file = self.weight_file_path.text()    if len(image_file) == 0 or len(label_file) == 0 or len(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    if self.hline_rbtn.ischecked():        settings.track_line_type = 0    if self.vline_rbtn.ischecked():        settings.track_line_type = 1    if self.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)使用槽函数更新界面,实现实时分析结果显示的代码如下:def on_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)    if image is not none:        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)    if done is not none:        self.stopbtn.setstylesheet(background-color:gray; color: white)        self.stopbtn.setenabled(false)        self.startbtn.setstylesheet(background-color:cyan; color: black)        self.startbtn.setenabled(true)


以数据传输为核心的物联网WiFi解决方案
Vuzix宣布为其AR眼镜Vuzix Blade增添天气预报功能
土壤水分温度盐分PH速测仪的用途有哪些
正心参展国际展会,现磨五谷杂粮自动售卖机亮相
安立推出搭载双射频输出端口的矢量信号源MG3710A
PyQT5案例开发
如何创建一个更有效的电容式触摸人机界面
GB 24827-2009《道路与街路照明灯具性能要求》| 智慧照明国家标准文档免费下载
国新办举行工业和信息化发展情况新闻发布会
JSR株式会社开发出5G通信系统的绝缘材料 并开始销售
新型光电传感存储器让人工视觉系统更加智能
小仪器也有大作用!带你种草日本家用美容仪!
技嘉宣布AORUS Gen4 AIC SSD 8TB硬盘即将上市 读写速度可达15GB/s
第一代高通S7系列音频平台发布 远距离用Wi-Fi连耳机是亮点
混动专用的高压油箱为什么这么重要?
苹果新获两项专利 悬停触摸感知技术吸睛
单片机的死循环有什么作用
区块链usdt支付系统C2C支付通道搭建
为什么 FPGA 是边缘人工智能的支持组件
无线脑—体电子元件治疗技术:治愈瘫痪,不仅仅是站立行走