目標檢測系列(四)利用pyqt5實現yolov8目標檢測GUI界面

目錄

1、pyqt5安裝

2、PyCharm添加Qt Designer、PyUIC

3、Qt Designer設計界面

4、根據ui文件自動生成py文件

5、修改py文件來調用檢測程序

6、執行py文件啟動


1、pyqt5安裝

Qt Designer:一個用于創建圖形用戶界面的工具,可輕松構建復雜的用戶界面。它基于MVC架構,可以將界面設計與邏輯分離,使得開發更為便捷。在Qt Designer中,可以通過拖拽控件來靈活地調整界面,并可以實時查看控件效果。。

PyUIC:一個命令行工具,它將Qt Designer中設計的.ui文件轉換為Python代碼。這一功能極大地幫助了開發人員快速地將設計好的Qt Designer的.ui文件轉換為可用的Python代碼,從而提高了開發速度。

安裝方法:

pip install pyqt5

pip install pyqt5-tools

然后搜索“designer”就可以看到是否安裝好

2、PyCharm添加Qt Designer、PyUIC

點擊菜單欄File——選擇Setting,彈出設置界面。在設置界面中選擇Tools—>External Tools

然后重啟pycharm即可看見添加的外部工具:

3、Qt Designer設計界面

可以先打開Qt Designer,創建一個.ui然后保存到本地:

4、根據ui文件自動生成py文件

選中一個.ui,然后點擊配置好的外部工具:Tools->External Tools->pyuic5,就會自動生成對應的.py文件的。

如果實在不知道怎么配置pycharm,也可以直接用終端命令來生成:

先用cd命令進入ui文件所在的路徑下,然后執行命令:pyuic5 -o demo.py demo.ui

5、修改py文件來調用檢測程序

經過前面幾步只是對界面構建元素控件,接下來需要寫代碼來對每個控件進行點擊響應操作:

①選擇圖片上傳

②顯示環境

③啟動程序

④在setupui中添加上述點擊響應函數

⑤修改繼承類為QmainWindow并添加初始化函數

完整代碼如下:

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'BscanObjDetection.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog
import sysfrom PyQt5 import QtCore, QtGui, QtWidgets
import torch
import torchvision
import cv2from ultralytics import YOLOclass Ui_MainWindow(QMainWindow):def __init__(self):super().__init__()self.setupUi(self)self.retranslateUi(self)def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(1131, 932)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.pushButton = QtWidgets.QPushButton(self.centralwidget)self.pushButton.setGeometry(QtCore.QRect(40, 20, 98, 26))self.pushButton.setObjectName("pushButton")self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)self.pushButton_2.setGeometry(QtCore.QRect(220, 20, 98, 26))self.pushButton_2.setObjectName("pushButton_2")self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)self.pushButton_3.setGeometry(QtCore.QRect(390, 20, 98, 26))self.pushButton_3.setObjectName("pushButton_3")self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)self.textBrowser.setGeometry(QtCore.QRect(40, 70, 1031, 61))self.textBrowser.setObjectName("textBrowser")self.label = QtWidgets.QLabel(self.centralwidget)self.label.setGeometry(QtCore.QRect(40, 180, 511, 451))self.label.setObjectName("label")self.label_2 = QtWidgets.QLabel(self.centralwidget)self.label_2.setGeometry(QtCore.QRect(590, 180, 491, 461))self.label_2.setObjectName("label_2")MainWindow.setCentralWidget(self.centralwidget)self.menubar = QtWidgets.QMenuBar(MainWindow)self.menubar.setGeometry(QtCore.QRect(0, 0, 1131, 23))self.menubar.setObjectName("menubar")MainWindow.setMenuBar(self.menubar)self.statusbar = QtWidgets.QStatusBar(MainWindow)self.statusbar.setObjectName("statusbar")MainWindow.setStatusBar(self.statusbar)self.retranslateUi(MainWindow)QtCore.QMetaObject.connectSlotsByName(MainWindow)# 點擊響應函數self.pushButton.clicked.connect(self.uploadImage)self.pushButton_2.clicked.connect(self.showEnvironment)self.pushButton_3.clicked.connect(self.startProgram)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))self.pushButton.setText(_translate("MainWindow", "上傳圖片"))self.pushButton_2.setText(_translate("MainWindow", "顯示環境"))self.pushButton_3.setText(_translate("MainWindow", "啟動程序"))self.label.setText(_translate("MainWindow", "                           原圖"))self.label_2.setText(_translate("MainWindow", "                        識別后圖片"))def uploadImage(self):file_dialog = QFileDialog()image_path, _ = file_dialog.getOpenFileName(self, '選擇圖片', '', 'Images (*.png *.xpm *.jpg *.bmp)')self.image_path = image_pathif image_path:# 在這里添加加載圖片的邏輯,例如顯示圖片到labelpixmap = QtGui.QPixmap(image_path)self.label.setPixmap(pixmap)self.label.setScaledContents(True)def showEnvironment(self):pytorch_version = torch.__version__torchvision_version = torchvision.__version__self.textBrowser.setText(f"PyTorch Version: {pytorch_version}\n"f"Torchvision Version: {torchvision_version}")def startProgram(self):self.textBrowser.setText(self.image_path)model = YOLO(r'C:\work\PycharmProjects\BscanObjDetection\frame_count\runs\detect\best.pt')results = model(self.image_path)annotated_frame = results[0].plot()# 圖片暫存save_image_name = self.image_path.split("/")[-1].split(".")[0] + "_pred"cv2.imwrite(f"C:\work\PycharmProjects\BscanObjDetection\data\predict\{save_image_name}.jpg", annotated_frame)# 將圖像數據轉換為QImage格式height, width, channel = annotated_frame.shapebytes_per_line = 3 * widthqimage = QtGui.QImage(annotated_frame.data, width, height, bytes_per_line, QtGui.QImage.Format_RGB888)# 將QImage轉換為QPixmappixmap = QtGui.QPixmap.fromImage(qimage)# 都執行:self.label_2.setPixmap(pixmap)self.label_2.setScaledContents(True)if __name__ == '__main__':app = QApplication(sys.argv)MainWindow1 = QMainWindow()  # MainWindow1隨便改ui = Ui_MainWindow()  # 隨便改ui.setupUi(MainWindow1)MainWindow1.show()sys.exit(app.exec_())

6、執行py文件啟動

效果如下視頻:

qt designer

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36130.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36130.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36130.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux kernel slab分配器

slab分配器是一種高效的內存管理機制,主要用于小塊內存的分配和釋放。 slab分配器簡述 slab分配器是一種內存管理機制,它將內存分割成多個"緩存"(cache),每個緩存包含固定大小的對象。這些對象可以是內核數據結構、緩沖區或其他小塊內存。 slab分配器用途 高…

還在花錢做數據可視化?為大家推薦一款免費可視化工具

在當今數據驅動的世界里,數據可視化已經成為不可或缺的工具,幫助我們更好地理解和分析信息。然而,許多企業和個人仍在為昂貴的可視化軟件買單,承受著高昂的費用和復雜的操作流程。因此,作為一個經常接觸數據可視化的相…

php聚合快遞寄快遞小程序

一、引言:告別傳統寄件,擁抱便捷新選擇 在數字化時代,我們越來越追求便捷和高效。傳統的寄件方式已經無法滿足現代人快速、便捷的需求。因此,一款聚合快遞優惠寄件小程序應運而生,它集合了多家快遞公司,為…

信創產業生態圈各企業分布

文章目錄 應用系統:辦公管理:云平臺網絡安全基礎軟件操作系統數據庫中間件 基礎硬件芯片 我們國家在前幾年提出了信創戰略計劃,就是為了在信息技術領域,將一些國外牌子的設備和應用、軟件逐漸替換成國產的,保證國家的金…

綜合布線實訓室建設可行性報告

1、 建設綜合布線實訓室的目的和意義 1.1 響應國家職業教育政策 在國家對職業教育的高度重視和政策支持下,綜合布線實訓室的建設不僅是對國家教育方針的積極響應,也是對技術教育改革的有力推動。通過這一平臺,我們旨在培育出一批具有強烈實…

mac app應用程序如何自定義圖標, 更換.app為自己喜歡的圖標或者圖片 詳細圖文講解

在mac系統中,我們可以對任何的app應用程序更換或者自定義圖標, 這個圖標可以是擁有的app的圖標,或者是你自己制作的 x.icns 圖標 或者是 任意的圖片, 建議大小512x512 。 自定義圖標方法如下: 1. 更換為已有app的圖標…

倒計時日期 桌面倒數日 重要日期倒計時提醒

在工作、學習、生活中,我們往往會有很多重要的日子需要我們去標記。在工作中的季度考核、學習中的關鍵時間點、生活中的各種紀念日……等等,都需要我們去對未來這些重要的時間節點做一個倒計時提醒。 日期倒計時讓我們對未來的時間,有一個非…

【深度學習】基于深度離散潛在變量模型的變分推理

1.引言 1.1.討論的目標 閱讀并理解本文后,大家應能夠: 掌握如何為具有離散潛在變量的模型設定參數在可行的情況下,使用精確的對數似然函數來估計參數利用神經變分推斷方法來估計參數 1.2.導入相關軟件包 # 導入PyTorch庫,用于…

揭秘Soundex算法:解鎖聲音背后的數字密碼

文章目錄 引言一、Soundex算法簡介二、Soundex算法的工作原理1.預處理2.初始化3.編碼轉換4.補齊編碼5.匹配計算6.判斷相似得分 三、算法實現代碼Demo四、Soundex算法的應用場景五、Soundex算法的局限性總結 引言 在信息爆炸的今天,數據處理和檢索成為了我們日常生活…

如何在Windows/Mac/Linux上運行Python代碼?

1. 在Windows上運行Python代碼 1.1 安裝Python 1.1.1 從官方網站下載 打開瀏覽器,訪問 Python官網.點擊頁面頂部的“Downloads”按鈕,選擇適用于Windows的版本(一般建議選擇最新穩定版本)。下載完成后,運行安裝程序…

處理key value數據

循環以上數據 <u-popup :round"10" :show"tab OilType" close"close" mode"bottom"><view class"container"><view v-for"(allData, allType) in allList" :key"allType"><view …

注意!流量卡的禁區并不一樣,請看清楚后再下單!

大家好&#xff0c;我是搜卡之家&#xff0c;今天我又來給大家科普了&#xff01; 今天科普的內容是關于流量卡禁區&#xff01; 首先要說一下&#xff0c;流量卡為什么會有禁區&#xff1f;運營商設立禁區主要是為了應對電信詐騙和違法使用電話卡的行為&#xff0c;確保網絡…

Web應用和Tomcat的集成鑒權2-Form Authentication

作者:私語茶館 1.相關章節 1) Web應用和Tomcat的集成鑒權1-BasicAuthentication-CSDN博客 2) Web應用和Tomcat的集成鑒權2-Form Authentication-CSDN博客 集成鑒權+定制化登錄 2.前言 上章講述了Tomcat的Basic Authentication鑒權模式,可以讓Web應用和Tomcat的鑒權集成起來…

【Flink metric(1)】Flink指標系統的系統性知識:獲取metric以及注冊自己的metric

文章目錄 一. Registering metrics&#xff1a;向flink注冊新自己的metrics1. 注冊metrics2. Metric types:指標類型2.1. Counter2.2. Gauge2.3. Histogram(ing)2.4. Meter 二. Scope:指標作用域1. User Scope2. System Scope ing3. User Variables 三. Reporter ing四. System…

面試題-Java垃圾回收之垃圾收集器

1.基礎知識 (1)知識點補充 Stop -the -World:發生時&#xff0c;除了GC所用的線程之外&#xff0c;所有的線程都處于等待狀態 Safepoint: 可達性分析算法時&#xff0c;必須保證在某個快照點進行。 分析的過程中對象的引用關系不會發生變化&#xff01; JVM的運行模式&#x…

數據結構-分析期末選擇題考點(排序)

何似清歌倚桃李 一爐沈水醉紅燈 契子 ? 上一期給大家提供了大概會考的題型給老鐵們復習的大致思路 這一期還會是一樣&#xff0c;我將整理一下排序的題型以及解題方法給你們 由于時間還很多&#xff0c;我就慢慢總結吧&#xff0c;一天一章的樣子&#xff0c;明天總結串、后天…

MyBatis源碼分析--一級緩存、二級緩存原理

前言&#xff1a; 有點項目經驗的朋友都知道緩存的重要性是不言而喻的&#xff0c;不僅僅我們在開發項目業務功能的時候使用了各種緩存&#xff0c;框架在設計的時候也有框架層面的緩存&#xff0c;尤其在查詢多的場景下&#xff0c;緩存可以大大的減少數據庫訪問&#xff0c;…

微前端框架是為了解決項目應用在大型項目中帶來的復雜性和維護難題而提出的技術方案。

微前端框架是為了解決單頁應用&#xff08;SPA&#xff09;在大型項目中帶來的復雜性和維護難題而提出的技術方案。Qiankun.js、MicroApp 和 Wujie 是三種流行的微前端框架。以下是對這三種框架的優缺點分析&#xff1a; Qiankun.js 優點 成熟度高&#xff1a;Qiankun.js 基…

【知識學習】闡述Unity3D中FogLOD的概念及使用方法示例

在Unity3D中&#xff0c;Fog&#xff08;霧效&#xff09;和LOD&#xff08;Level of Detail&#xff0c;細節層次&#xff09;是兩種用于提高場景視覺效果和性能的技術。 Fog&#xff08;霧效&#xff09; 霧效是一種視覺效果&#xff0c;用于模擬大氣中的霧或煙&#xff0c…

YOLOv8數據集標注

1 簡介 數據集是必不可少的部分&#xff0c;數據集的優劣直接影響訓練效果。一般來說&#xff0c;一個完整的數據集應該包括訓練集、測試集和驗證集。通常&#xff0c;數據集會被劃分為訓練集和測試集&#xff0c;比如將數據集的70%用作訓練集&#xff0c;30%用作測試集。在進行…