基本设计思路
基于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 是边缘人工智能的支持组件
无线脑—体电子元件治疗技术:治愈瘫痪,不仅仅是站立行走