4. designer建立关于目标检测的简单界面(python)

ops/2025/2/26 23:50:09/

首先建立的界面效果如下:

        以上界面中,检测图1是yolov8模型检测得到的图片显示,检测图2是deeplabv3模型检测处理后得到的图片;下面检测数量是两个模型分别检测到的目标数量(图片中人的个数);右上角的相同是指两个模型的检测数量是否相同,若相同则显示"true",否则显示“false”。下面简单介绍该功能实现的步骤。

1.实现步骤

一、 读取图片

二、yolov8检测图片,得到检测结果(图片、类名称、目标数量)

四、deeplabv3检测图片,得到检测结果(图片、类名称、目标数量)

五、designer界面显示检测的结果

2.designer功能的实现

一、安装Qt Designer

在虚拟环境下终端运行以下代码即可

pip install PyQt5
pip install pyqt5-tools

其他操作步骤可以看博客:Qt Designer 详细介绍-CSDN博客。

二、将.UI文件转为.py文件

在pycharm的终端运行以下代码即可:

# 对于 PyQt5
pyuic5 -x designer.ui -o ui_designer.py
# 对于 PySide2
pyside2-uic designer.ui > ui_designer.py

修改后的结果如下:

from PyQt5 import QtCore, QtGui, QtWidgets
import cv2
import sysclass Ui_Dialog(object):def setupUi(self, Dialog):Dialog.setObjectName("Dialog")Dialog.resize(819, 632)self.start = QtWidgets.QPushButton(Dialog)self.start.setGeometry(QtCore.QRect(310, 570, 79, 23))self.start.setObjectName("start")self.finish = QtWidgets.QPushButton(Dialog)self.finish.setGeometry(QtCore.QRect(440, 570, 79, 23))self.finish.setObjectName("finish")self.detection1_text = QtWidgets.QLabel(Dialog)self.detection1_text.setGeometry(QtCore.QRect(180, 420, 61, 20))self.detection1_text.setObjectName("detection1_text")self.detection_nums1 = QtWidgets.QLabel(Dialog)self.detection_nums1.setGeometry(QtCore.QRect(120, 490, 71, 20))self.detection_nums1.setObjectName("detection_nums1")self.detection2_text = QtWidgets.QLabel(Dialog)self.detection2_text.setGeometry(QtCore.QRect(580, 420, 61, 20))self.detection2_text.setObjectName("detection2_text")self.detection_nums2 = QtWidgets.QLabel(Dialog)self.detection_nums2.setGeometry(QtCore.QRect(550, 490, 71, 20))self.detection_nums2.setObjectName("detection_nums2")self.compares = QtWidgets.QLabel(Dialog)self.compares.setGeometry(QtCore.QRect(650, 30, 41, 16))self.compares.setObjectName("compares")self.nums1 = QtWidgets.QLineEdit(Dialog)self.nums1.setGeometry(QtCore.QRect(190, 490, 71, 20))self.nums1.setObjectName("nums1")self.nums2 = QtWidgets.QLineEdit(Dialog)self.nums2.setGeometry(QtCore.QRect(630, 490, 71, 20))self.nums2.setObjectName("nums2")self.true_false = QtWidgets.QLineEdit(Dialog)self.true_false.setGeometry(QtCore.QRect(690, 30, 71, 20))self.true_false.setObjectName("true_false")self.img1 = QtWidgets.QLabel(Dialog)self.img1.setGeometry(QtCore.QRect(30, 90, 371, 311))self.img1.setAutoFillBackground(True)self.img1.setFrameShape(QtWidgets.QFrame.Box)self.img1.setFrameShadow(QtWidgets.QFrame.Sunken)self.img1.setObjectName("img1")self.img2 = QtWidgets.QLabel(Dialog)self.img2.setGeometry(QtCore.QRect(430, 90, 371, 311))self.img2.setAutoFillBackground(True)self.img2.setFrameShape(QtWidgets.QFrame.Box)self.img2.setFrameShadow(QtWidgets.QFrame.Sunken)self.img2.setObjectName("img2")self.retranslateUi(Dialog)QtCore.QMetaObject.connectSlotsByName(Dialog)def retranslateUi(self, Dialog):_translate = QtCore.QCoreApplication.translateDialog.setWindowTitle(_translate("Dialog", "目标检测"))self.start.setText(_translate("Dialog", "开始"))self.finish.setText(_translate("Dialog", "结束"))self.detection1_text.setText(_translate("Dialog", "检测图1"))self.detection_nums1.setText(_translate("Dialog", "检测数量1:"))self.detection2_text.setText(_translate("Dialog", "检测图2"))self.detection_nums2.setText(_translate("Dialog", "检测数量2:"))self.compares.setText(_translate("Dialog", "相同:"))self.img1.setText(_translate("Dialog", "显示图片"))self.img2.setText(_translate("Dialog", "显示图片"))# UI界面更新实时数据def real_time_update_paramas(self,detect_img1_nums,detect_img2_nums,true_or_false):_translate = QtCore.QCoreApplication.translateself.nums1.setText(_translate("Dialog", detect_img1_nums))# 图片1检测到的目标数量self.nums2.setText(_translate("Dialog", detect_img2_nums))# 图片2检测到的目标数量self.true_false.setText(_translate("Dialog", true_or_false))# 两个数量是否相同(true or false)# UI界面显示图片def show_img1(self,img_path1):# 显示lena图像pixmap = QtGui.QPixmap(img_path1)  # 创建相应的QPixmap对象ui.img1.setScaledContents(True)  # 设置铺满ui.img1.setPixmap(pixmap)  # 显示lena图像def show_img2(self,img_path2):# 显示lena图像pixmap = QtGui.QPixmap(img_path2)  # 创建相应的QPixmap对象ui.img2.setScaledContents(True)  # 设置铺满ui.img2.setPixmap(pixmap)  # 显示lena图像if __name__ == "__main__":# ====================>   1.建立一个UI显示界面   <====================app = QtWidgets.QApplication(sys.argv)Dialog = QtWidgets.QDialog()ui = Ui_Dialog()ui.setupUi(Dialog)# 1.基本参数显示#  下面用两种模型检测图片# 读取图片# =====================>   2.yolov8检测图片   <=====================# ===================>   3.deeplabv3检测图片   <===================# ================>   4.将两种检测结果在UI界面显示   <================# 2.检验图片的显示path1 = "D:\AI\\ultralytics-main\\tests\img3.jpg" # yolov8模型检测结果path2 = "D:\AI\\ultralytics-main\\tests\img3.jpg" # deeplabv3模型检测结果ui.show_img1(path1)ui.show_img2(path2)# 检验结果的文本显示detect_img1_nums = "1"detect_img2_nums = "1"true_or_false = "true"ui.real_time_update_paramas(detect_img1_nums,detect_img2_nums,true_or_false)Dialog.show()sys.exit(app.exec_())

注意:上面代码留出了目标检测和语义分割模型检测的功能,容易实现。

3.yolov8功能的实现

yolov8的检测不需要所有的开源文件,比如要用yolo模型时,只需要复制出yolov8文件夹下的ultralytics文件即可,并和该文件同级别写个1.preds.py的检测文件,文件内容如下:

from ultralytics import YOLO
#from PIL import Image
import cv2model = YOLO("yolov8n.pt")im2 = cv2.imread("img1.jpg")
results = model.predict(source=im2, save=True, save_txt=True)  # 将预测保存为标签
print()
for item in results:if item == "name":print(item)if item == "save_dir":print(item)if item == "path":print(item)

其实,直接运行这个文件就可以了,但我们还可以对ultralytics文件内的一些文件进行删减,因为该文件不仅仅是yolo测试,还有其他检测。

我们进入该文件夹下的models文件夹下再次删减,删减后的结果如下:

当然,删除后,该文件夹下的一些py文件需要修改:

1.下图中的__init__.py文件的修改后的内容如下:

2.下图中的__init__.py文件的修改后的内容如下:

最后运行1.preds.py的代码,结果如下:

4.deeplabv3功能的实现

该模型可以看专栏专栏管理-CSDN创作中心,比较简单。


http://www.ppmy.cn/ops/161532.html

相关文章

蓝桥杯——按键

一&#xff1a;按键得原理图 二&#xff1a;按键的代码配置 step1 按键原理图对应引脚配置为输入状态 step2 在GPIO中将对应引脚设置为上拉模式 step3 在fun.c中写按键扫描函数 写完后的扫描函数需放在主函数中不断扫描 扫描函数主要通过两个定义变量的值来判断&#xf…

Vscode编辑器获取更新远程最新分支

解决&#xff1a;打开当前项目的终端&#xff0c;输入 git remote update origin --prune # 查看远程分支 git branch -r --prune --prune 参数告诉 Git 清理那些远程仓库中已经删除但本地仍然存在的跟踪分支。 命令作用 更新远程仓库引用&#xff1a; git remote update …

互联网医院系统源码解析:如何开发智能化的电子处方小程序?

今天&#xff0c;我将从互联网医院系统源码的角度&#xff0c;解析如何开发一款智能化的电子处方小程序&#xff0c;帮助开发者更好地把握这一领域的技术趋势与开发实践。 一、电子处方小程序的背景与发展趋势 电子处方作为一种数字化医疗文档&#xff0c;广泛应用于互联网医…

安全见闻4

今天学了Windows操作系统和驱动程序的相关知识 Windows注册表 注册表是windows系统中具有层次结构的核心数据库 储存的数据对windows 和Windows上运行的应用程序和服务至关重要。注册表时帮助windows控制硬件、软件、用户环境和windows界面的一套数据文件。 打开注册表编辑器…

去中心化 AI:赋权还是混乱?

DeepSeek 如何在 AI 去中心化方面迈出了巨大的一步&#xff0c;以及为什么这比你想象的更重要 Nadia Piet AIxDESIGN & Archival Images of AI / Better Images of AI / AI Am Over It / CC-BY 4.0 2025 年 1 月 27 日星期一&#xff0c;DeepSeek —— 一家几乎凭空冒出来…

AI赋能的未来城市:如何用智能化提升生活质量?

这会是我们憧憬的未来城市吗&#xff1f; 随着技术的不断进步和城市化进程的加速&#xff0c;现代城市面临着诸多挑战——交通拥堵、环境污染、能源消耗、人口老龄化等问题愈发突出。为了应对这些挑战&#xff0c;建设智慧城市已成为全球发展的重要趋势。在这一进程中&#xf…

如何在 Ubuntu 上安装和使用 Podman ?

Podman 是一个容器管理工具&#xff0c;提供与 Docker 类似的功能&#xff0c;但被设计成无守护进程和脱离 root 权限。这意味着您不需要长时间运行的后台服务 (守护进程) 来管理您的容器&#xff0c;并且您不需要 root 权限来进行大多数操作。 在 Ubuntu 上安装 Podman 1. U…

详解golang的Gengine规则引擎

一:简介 Gengine是一款基于golang和AST(抽象语法树)开发的规则引擎, Gengine支持的语法是一种自定义的DSL, Gengine通过内置的解释器对规则文件进行解析,构建规则模型,进行相应的规则计算和数据处理。Gengine于2020年7月由哔哩哔哩(bilibili.com)授权开源。Gengine现已应用…