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

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

以上界面中,检测图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 sys


class 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.translate
        Dialog.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.translate
        self.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 cv2

model = 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创作中心,比较简单。

相关推荐
掘金一周7 分钟前
金石焕新程 >> 瓜分万元现金大奖征文活动即将回归 | 掘金一周 4.3
前端·人工智能·后端
白雪讲堂23 分钟前
AI搜索品牌曝光资料包(精准适配文心一言/Kimi/DeepSeek等场景)
大数据·人工智能·搜索引擎·ai·文心一言·deepseek
The Future is mine27 分钟前
Python计算经纬度两点之间距离
开发语言·python
斯汤雷29 分钟前
Matlab绘图案例,设置图片大小,坐标轴比例为黄金比
数据库·人工智能·算法·matlab·信息可视化
九月镇灵将29 分钟前
GitPython库快速应用入门
git·python·gitpython
ejinxian36 分钟前
Spring AI Alibaba 快速开发生成式 Java AI 应用
java·人工智能·spring
葡萄成熟时_40 分钟前
【第十三届“泰迪杯”数据挖掘挑战赛】【2025泰迪杯】【代码篇】A题解题全流程(持续更新)
人工智能·数据挖掘
机器之心1 小时前
一篇论文,看见百度广告推荐系统在大模型时代的革新
人工智能