色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何實現YOLOv8 + ONNRUNTIME推理界面化與多線程支持

OpenCV學堂 ? 來源:OpenCV學堂 ? 2023-05-22 09:26 ? 次閱讀

2023年一月份跟二月份創建了一個PyQT5人工智能軟件開發系列的文章系列,過去的兩個月都沒怎么更新,心里一直想有時間繼續更新下去,今天又更新了一篇,基于PyQT5實現多線程、界面化、YOLOv8對象檢測、實例分割、姿態評估的推理。

基本設計思路

這個系列我好久沒有更新了,今天更新一篇PyQT5中如何實現YOLOv8 + ONNRUNTIME推理界面化與多線程支持。首先需要實現三個類分別完成YOLOv8的對象檢測、實例分割、姿態評估模型推理。然后在實現界面類,構建如圖:

3477fe08-f815-11ed-90ce-dac502259ad0.png

推理類型通過單選按鈕實現選擇,支持對象檢測、實例分割、姿態評估。參數設置選擇模型文件與標簽文件地址作為輸入,同時選擇置信度,置信度之在0~1之間。 推理按鈕開發推理演示,支持視頻與圖像文件,開始推理會單獨開啟一個推理線程實現推理,推理結果通過信號發送到指定的槽函數處理之后更新界面,通過信號與槽機制實現界面線程跟推理線程相互獨立與數據共享。

界面代碼實現

界面部分通過一個QWidget實現一個面板,通過垂直與水平布局實現界面組件的布局管理,相關的代碼實現如下:

classYOLOv8InferPanel(QtWidgets.QWidget):
def__init__(self,parent=None):
super().__init__(parent)

#文本標簽
self.rbtn0=QtWidgets.QRadioButton("對象檢測")
self.rbtn1=QtWidgets.QRadioButton("實例分割")
self.rbtn3=QtWidgets.QRadioButton("姿態評估")
self.rbtn0.setChecked(True)

hbox_layout1=QtWidgets.QHBoxLayout()
hbox_layout1.addWidget(self.rbtn0)
hbox_layout1.addWidget(self.rbtn1)
hbox_layout1.addWidget(self.rbtn3)

panel3=QtWidgets.QGroupBox("推理類型")
panel3.setLayout(hbox_layout1)

#輸入文本框
self.image_file_edit=QtWidgets.QLineEdit()
self.image_file_edit.setMinimumWidth(100)
self.image_file_edit.setEnabled(False)
fileBtn=QtWidgets.QPushButton("圖像文件")
self.weight_file_path=QtWidgets.QLineEdit()
self.weight_file_path.setMinimumWidth(100)
self.weight_file_path.setEnabled(False)
modelBtn=QtWidgets.QPushButton("模型文件")

self.label_file_path=QtWidgets.QLineEdit()
self.label_file_path.setMinimumWidth(100)
self.label_file_path.setEnabled(False)
labelBtn=QtWidgets.QPushButton("標簽文件")

self.conf_spinbox=QtWidgets.QDoubleSpinBox()
self.conf_spinbox.setRange(0,1)
self.conf_spinbox.setSingleStep(0.01)
self.conf_spinbox.setValue(0.25)

grid_layout2=QtWidgets.QGridLayout()
grid_layout2.addWidget(fileBtn,0,0)
grid_layout2.addWidget(self.image_file_edit,0,1)
grid_layout2.addWidget(modelBtn,0,2)
grid_layout2.addWidget(self.weight_file_path,0,3)

grid_layout2.addWidget(labelBtn,1,0)
grid_layout2.addWidget(self.label_file_path,1,1)
grid_layout2.addWidget(QtWidgets.QLabel("置信:"),1,2)
grid_layout2.addWidget(self.conf_spinbox,1,3)

panel2=QtWidgets.QGroupBox("參數設置")
panel2.setLayout(grid_layout2)

#輸入文本框
self.label=QtWidgets.QLabel()
self.label.setMinimumSize(1280,720)
pixmap=QtGui.QPixmap("images/wp.jpg")
pix=pixmap.scaled(QtCore.QSize(1280,720),QtCore.Qt.KeepAspectRatio)
self.label.setPixmap(pix)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setStyleSheet("background-color:black;color:green")

self.startBtn=QtWidgets.QPushButton("開始推理")
self.stopBtn=QtWidgets.QPushButton("停止")
self.startBtn.setStyleSheet("background-color:cyan;color:black")
self.stopBtn.setStyleSheet("background-color:gray;color:white")
self.stopBtn.setEnabled(False)
hbox_layout=QtWidgets.QHBoxLayout()
hbox_layout.addStretch(1)
hbox_layout.addWidget(self.startBtn)
hbox_layout.addWidget(self.stopBtn)
panel1=QtWidgets.QWidget()
panel1.setLayout(hbox_layout)

#添加到布局管理器中
vbox_layout=QtWidgets.QVBoxLayout()
vbox_layout.addWidget(panel3)
vbox_layout.addWidget(panel2)
vbox_layout.addWidget(panel1)
vbox_layout.addWidget(self.label)
vbox_layout.addStretch(1)

#面板容器
self.setLayout(vbox_layout)

#setuplistener
modelBtn.clicked.connect(self.on_weight_select)
fileBtn.clicked.connect(self.on_update_image)
labelBtn.clicked.connect(self.on_label_select)
self.startBtn.clicked.connect(self.on_yolov8_infer)
self.work_thread=None

推理線程

基于QThread繼承實現run方法,完成推理線程構建,根據傳入的參數不同,初始化不同的推理類型(對象檢測、實例分割、姿態評估),推理線程實現代碼如下:

classInferenceThread(QtCore.QThread):
fire_stats_signal=QtCore.pyqtSignal(dict)

def__init__(self,settings):
super(InferenceThread,self).__init__()
self.settings=settings
self.detector=None
ifself.settings.model_type==0:
self.detector=YOLOv8ORTDetector(settings)
ifself.settings.model_type==1:
self.detector=YOLOv8ORTSegment(settings)
ifself.settings.model_type==2:
self.detector=YOLOv8ORTPose(settings)
self.input_image=settings.input_image

defrun(self):
ifself.detectorisNone:
return
ifself.input_image.endswith(".mp4"):
cap=cv.VideoCapture(self.input_image)
whileTrue:
ret,frame=cap.read()
ifretisTrue:
self.detector.infer_image(frame)
self.fire_stats_signal.emit({"result":frame})
else:
break
else:
frame=cv.imread(self.input_image)
self.detector.infer_image(frame)
self.fire_stats_signal.emit({"result":frame})
self.fire_stats_signal.emit({"done":"done"})
return

351560e4-f815-11ed-90ce-dac502259ad0.png

354f9ef8-f815-11ed-90ce-dac502259ad0.png

356fb436-f815-11ed-90ce-dac502259ad0.png

應用程序演示

最終調用應用程序代碼,實現啟動與運行的界面如下:

#初始化APP實例
importplatform
app=QtWidgets.QApplication(sys.argv)
if'Windows'==platform.system():
app.setStyle('Windows')
#初始化桌面容器
main_win=QtWidgets.QMainWindow()
#設置APP窗口名稱
main_win.setWindowTitle("YOLOv8多線程推理應用演示-2號高手")
#初始化內容面板
content_panel=YOLOv8InferPanel()
#設置窗口大小
main_win.setMinimumSize(1340,960)
main_win.setCentralWidget(content_panel)

#請求顯示
main_win.show()
#加載窗口并啟動App
app.exec()
審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 軟件
    +關注

    關注

    69

    文章

    4968

    瀏覽量

    87701
  • 人工智能
    +關注

    關注

    1792

    文章

    47410

    瀏覽量

    238925
  • pyqt5
    +關注

    關注

    0

    文章

    25

    瀏覽量

    3403

原文標題:多線程界面化、ONNXRUNTIME + YOLOv8推理演示

文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于YOLOv8實現自定義姿態評估模型訓練

    Hello大家好,今天給大家分享一下如何基于YOLOv8姿態評估模型,實現在自定義數據集上,完成自定義姿態評估模型的訓練與推理
    的頭像 發表于 12-25 11:29 ?2871次閱讀
    基于<b class='flag-5'>YOLOv8</b><b class='flag-5'>實現</b>自定義姿態評估模型訓練

    使用YOLOv8做目標檢測和實例分割的演示

    YOLOv8是來自Ultralytics的最新的基于YOLO的對象檢測模型系列,提供最先進的性能。
    的頭像 發表于 02-06 10:11 ?7543次閱讀

    YOLOv8自定義數據集訓練到模型部署推理簡析

    如果你只是想使用而不是開發,強烈推薦通過pip安裝方式獲取YOLOv8包!YOLOv8安裝命令行
    的頭像 發表于 03-24 09:27 ?4705次閱讀

    TensorRT 8.6 C++開發環境配置與YOLOv8實例分割推理演示

    YOLOv8實例分割TensorRT 推理代碼已經完成C++類封裝,三行代碼即可實現YOLOv8對象檢測與實例分割模型推理,不需要改任何代
    的頭像 發表于 04-25 10:49 ?5861次閱讀
    TensorRT 8.6 C++開發環境配置與<b class='flag-5'>YOLOv8</b>實例分割<b class='flag-5'>推理</b>演示

    YOLOv8版本升級支持小目標檢測與高分辨率圖像輸入

    YOLOv8版本最近版本又更新了,除了支持姿態評估以外,通過模型結構的修改還支持了小目標檢測與高分辨率圖像檢測。原始的YOLOv8模型結構如下。
    的頭像 發表于 05-16 11:14 ?1.2w次閱讀
    <b class='flag-5'>YOLOv8</b>版本升級<b class='flag-5'>支持</b>小目標檢測與高分辨率圖像輸入

    教你如何用兩行代碼搞定YOLOv8各種模型推理

    大家好,YOLOv8 框架本身提供的API函數是可以兩行代碼實現 YOLOv8 模型推理,這次我把這段代碼封裝成了一個類,只有40行代碼左右,可以同時
    的頭像 發表于 06-18 11:50 ?3087次閱讀
    教你如何用兩行代碼搞定<b class='flag-5'>YOLOv8</b>各種模型<b class='flag-5'>推理</b>

    目標檢測算法再升級!YOLOv8保姆級教程一鍵體驗

    YOLO作為一種基于圖像全局信息進行預測的目標檢測系統,始終保持著極高的迭代更新率,從YOLOv5到YOLOv8,本次升級主要包括結構算法、命令行界面、PythonAPI等。具體到YOLOv8
    的頭像 發表于 02-28 11:16 ?2731次閱讀
    目標檢測算法再升級!<b class='flag-5'>YOLOv8</b>保姆級教程一鍵體驗

    三種主流模型部署框架YOLOv8推理演示

    深度學習模型部署有OpenVINO、ONNXRUNTIME、TensorRT三個主流框架,均支持Python與C++的SDK使用。對YOLOv5~YOLOv8的系列模型,均可以通過C++推理
    的頭像 發表于 08-06 11:39 ?2765次閱讀

    解鎖YOLOv8修改+注意力模塊訓練與部署流程

    很多人也想跟修改YOLOv5源碼一樣的方式去修改YOLOv8的源碼,但是在github上面卻發現找到的YOLOv8項目下面TAG分支是空的
    的頭像 發表于 08-11 14:14 ?4424次閱讀
    解鎖<b class='flag-5'>YOLOv8</b>修改+注意力模塊訓練與部署流程

    如何修改YOLOv8的源碼

    很多人也想跟修改YOLOv5源碼一樣的方式去修改YOLOv8的源碼,但是在github上面卻發現找到的YOLOv8項目下面TAG分支是空的,然后就直接從master/main下面把源碼克隆出來一通
    的頭像 發表于 09-04 10:02 ?2042次閱讀
    如何修改<b class='flag-5'>YOLOv8</b>的源碼

    YOLOv8實現任意目錄下命令行訓練

    當你使用YOLOv8命令行訓練模型的時候,如果當前執行的目錄下沒有相關的預訓練模型文件,YOLOv8就會自動下載模型權重文件。這個是一個正常操作,但是你還會發現,當你在參數model中指定已有
    的頭像 發表于 09-04 10:50 ?1134次閱讀
    <b class='flag-5'>YOLOv8</b><b class='flag-5'>實現</b>任意目錄下命令行訓練

    OpenCV4.8+YOLOv8對象檢測C++推理演示

    自從YOLOv5更新成7.0版本,YOLOv8推出以后,OpenCV4.6以前的版本都無法再加載導出ONNX格式模型了,只有OpenCV4.7以上版本才可以支持最新版本YOLOv5與
    的頭像 發表于 09-27 11:07 ?1589次閱讀
    OpenCV4.8+<b class='flag-5'>YOLOv8</b>對象檢測C++<b class='flag-5'>推理</b>演示

    基于YOLOv8的自定義醫學圖像分割

    YOLOv8是一種令人驚嘆的分割模型;它易于訓練、測試和部署。在本教程中,我們將學習如何在自定義數據集上使用YOLOv8。但在此之前,我想告訴你為什么在存在其他優秀的分割模型時應該使用YOLOv8呢?
    的頭像 發表于 12-20 10:51 ?796次閱讀
    基于<b class='flag-5'>YOLOv8</b>的自定義醫學圖像分割

    YOLOv8實現旋轉對象檢測

    YOLOv8框架在在支持分類、對象檢測、實例分割、姿態評估的基礎上更近一步,現已經支持旋轉對象檢測(OBB),基于DOTA數據集,支持航拍圖像的15個類別對象檢測,包括車輛、船只、典型
    的頭像 發表于 01-11 10:43 ?1892次閱讀
    <b class='flag-5'>YOLOv8</b><b class='flag-5'>實現</b>旋轉對象檢測

    基于OpenCV DNN實現YOLOv8的模型部署與推理演示

    基于OpenCV DNN實現YOLOv8推理的好處就是一套代碼就可以部署在Windows10系統、烏班圖系統、Jetson的Jetpack系統
    的頭像 發表于 03-01 15:52 ?1717次閱讀
    基于OpenCV DNN<b class='flag-5'>實現</b><b class='flag-5'>YOLOv8</b>的模型部署與<b class='flag-5'>推理</b>演示
    主站蜘蛛池模板: 美女18毛片免费视频| 一边亲着一面膜下的免费过程| 动漫美女喷水| 伊人久久大香线蕉综合网站| 日本 一二三 不卡 免费| 黄色网址在线播放| 丰满老熟女白浆直流| 97公开超碰在线视频| 亚洲妈妈精品一区二区三区| 日本一卡精品视频免费| 美女的避毛| 久久爱狠狠综合网| 国产精品久久久久影院色| free乌克兰性xxxxhd| 在线免费观看毛片网站| 亚洲国产精品一区二区久久第| 日韩欧美一区二区三区在线视频| 蜜臀AV熟女人妻中文字幕| 精品亚洲午夜久久久久| 国产日韩精品SUV| 闺蜜扒开我尿口使劲揉| zooskoo1videos人与狗| 97午夜伦伦电影理论片| 真实伦 乱| 一二三四在线播放免费观看中文版视频| 色综合色综合久久综合频道| 欧美人妇无码精品久久| 米奇影视999| 久久视热频国只有精品| 久草在线草a免费线看| 国产永久视频| 国产精品永久免费| 国产精品亚洲欧美| 国产精品视频免费观看| 国产-第1页-浮力影院| 高清无码色大片中文| 岛国在线无码免费观| 调教日本美女| 菲律宾毛片| 国产精品v片在线观看不卡| 国产成人精品免费视频大全办公室|