基本設計思路
基于YOLOv8對象檢測/實例分割模型,實現一個基于檢測的對象跟蹤算法,YOLOv8支持兩種主流的對象跟蹤算法ByteTrack與Botsort。通過自定義數據訓練YOLOv8對象檢測器可以實現不同類別的對象的跟蹤。同時基于檢測與跟蹤模型的輸出,實現了對象計數、指定類別跟蹤、區域流量統計、指定ID跟蹤、單對象與多對象跟蹤等操作。
應用開發層面,需要三個主要的交互與顯示界面,一個是針對YOLOv8檢測與跟蹤模型的模型參數設置;第二個是針對YOLOv8檢測與跟蹤結果的顯示過濾與輸出過濾的后處理;第三個是針對后處理數據的顯示包括流量出入、是否需要語音報警等應用層面的數據展示。
整個程序開發實現了跟蹤線程與界面線程分別獨立工作,支持數據交互,實時顯示運行結果與流量統計信息展示。最終完成的界面設計如下:
運行截圖
實時車輛流量統計
基于對象ID的單對象跟蹤:
人流量出入統計
代碼
啟動跟蹤開始交通流量統計線程的代碼如下:
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文章
885瀏覽量
48380 -
過濾器
+關注
關注
1文章
436瀏覽量
20176
原文標題:PyQT5案例開發
文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
在全志H616核桃派開發板上進行PyQt5的代碼編寫和運行
在全志H616核桃派開發板上部署PyQt5的信號與槽詳解
使用PyQt5自動初始化OpenVINO?環境出現報錯怎么解決?
【Firefly RK3399試用體驗】第二篇:PyQt5大戰點燈
利用PyQt5編輯軟件界面的簡單步驟
如何使用Python配合PyQT5模塊來開發圖形化應用程序
魯班貓0 ubuntu20 解決python3.10安裝pyqt5
Python PyQt5工具在Windows平臺上的安裝方法
PyQt5的中文教程電子書免費下載

PyQT5+OpenCV開發的應用如何打包發布?
2023年Python GUI桌面應用開發該選哪個庫
請問PyQT5是如何構建YOLOv8界面應用程序的
使用pycharm開發上位機配置pyqt5的環境

PYQT5自動化上位機開發記錄

基于PyQT5與ONNXRUNTIME實現風格遷移應用

評論