当前位置:   article > 正文

pyqt5 yolov8目标检测界面_pyqt5 yolov8 图片目标识别

pyqt5 yolov8 图片目标识别

目录

前言

一、下载安装工具

一、下载并安装PyQt5

二、下载YOLOv8

二、经典算法/框架及优缺点

经典算法/框架:

1.YOLO (You Only Look Once)

2.Faster R-CNN (Region-based Convolutional Neural Networks)

3.SSD (Single Shot MultiBox Detector)

超参数调整和模型评估:

二、前端界面实现

1.导包

2.设计界面生成

三、进行目标检测

1.图片检测

单张图片检测

批量图片检测

2.视频检测

单个视频检测

批量视频检测

四、总结会收获


前言

深度学习技术尤其是目标检测模型的发展,极大地促进了图像分析和物体识别的精度和效率。YOLOv5作为一种快速、准确的目标检测模型,近年来备受关注。结合PyQt5这样强大的Python GUI框架,我们能够创建一个直观且功能强大的用户界面,用于展示和应用YOLOv5模型的目标检测能力。本博客将深入探讨如何结合神经网络和深度学习技术,利用PyQt5框架构建一个实时目标检测的应用程序。

一、下载安装工具

要下载并安装PyQt5和YOLOv8,可以遵循以下步骤:

一、下载并安装PyQt5

  1. 确定Python版本
    • 确保你的计算机上已经安装了Python。如果没有,可以从Python官网下载最新版本的Python,并按照提示进行安装。
  2. 安装PyQt5
    • PyQt5可以通过Python的包管理工具pip来安装。
    • 打开命令行窗口(在Windows上可以使用cmd或PowerShell,在MacOS或Linux上可以使用终端)。
    • 输入以下命令来安装PyQt5:pip install pyqt5
    • 等待安装完成。

二、下载YOLOv8

  1. 通过GitHub仓库下载
    • 克隆仓库: 首先,确保你的系统中安装了Git。然后,在命令行中输入以下命令来从Ultralytics的GitHub仓库克隆YOLOv8的代码:
      git clone https://github.com/ultralytics/ultralytics.git
    • 进入项目目录: 克隆完成后,进入项目文件夹:
         cd ultralytics
    • 安装Ultralytics库: 在项目目录中,使用pip安装Ultralytics库。这一步也会安装YOLOv8相关的依赖:
         pip install -e 
  2. 安装依赖项(如果需要运行或训练YOLOv8模型):
    • 打开命令行窗口,进入YOLOv8的源代码目录。
    • 使用pip安装所需的依赖项,通常这些依赖项会列在项目的requirements.txt文件中。可以使用命令pip install -r requirements.txt来安装所有依赖项。

二、经典算法/框架及优缺点
 

经典算法/框架:

1.YOLO (You Only Look Once)

优点:快速、高效,适用于实时目标检测任务。

缺点:对小目标检测效果可能不佳,定位精度相对较低。

2.Faster R-CNN (Region-based Convolutional Neural Networks)

优点:较准确,适用于小目标检测和复杂场景。
缺点:速度较慢,不适合实时应用。

3.SSD (Single Shot MultiBox Detector)

优点:速度快,适用于实时目标检测。
缺点:对小目标检测效果可能不如 Faster R-CNN

超参数调整和模型评估:

  1. 模型版本选择:选择合适的 YOLO 版本(如 YOLOv3、YOLOv4),平衡模型大小、速度和精度。

  2. 输入图像尺寸:调整输入图像的分辨率,影响模型的检测速度和精度。

  3. 学习率:调整模型训练时的学习率,影响模型收敛速度和最终精度。

  4. 批量大小:调整每个训练批次中图像的数量,可能影响训练速度和模型稳定性。

  5. 数据增强策略:调整数据增强的方法(如随机裁剪、色彩增强等),影响模型对多样化数据的泛化能力。

二、前端界面实现

1.导包

导入实现界面的pyqt5的相关依赖

  1. from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QFileDialog
  2. from PyQt5.QtGui import QPixmap, QPalette, QBrush
  3. from PyQt5.QtCore import Qt

2.设计界面生成

  1. # 创建一个名为ObjectDetector的类,继承自QWidget
  2. class ObjectDetector(QWidget):
  3. def __init__(self):
  4. super().__init__()
  5. # 初始化用户界面
  6. self.initUI()
  7. # 初始化用户界面的函数
  8. def initUI(self):
  9. # 设置窗口标题和大小
  10. self.setWindowTitle('yolov识别检测系统') # 设置窗口标题
  11. self.setGeometry(200, 200, 800, 400) # 设置窗口大小
  12. # 设置背景图片
  13. palette = QPalette()
  14. pixmap = QPixmap("bei.jpg")
  15. palette.setBrush(QPalette.Background, QBrush(pixmap.scaled(self.size(), Qt.IgnoreAspectRatio)))
  16. self.setPalette(palette)
  17. # 创建选择图片文件按钮并连接到select_image函数
  18. self.btn_select_image = QPushButton('检测一张图片', self)
  19. self.btn_select_image.clicked.connect(self.select_image)
  20. self.btn_select_image.setGeometry(150, 100, 200, 30) # 设置选择图片文件按钮的初始位置
  21. # 创建选择视频文件按钮并连接到select_video函数
  22. self.btn_select_video = QPushButton('检测一个视频', self)
  23. self.btn_select_video.clicked.connect(self.select_video)
  24. self.btn_select_video.setGeometry(450, 100, 200, 30) # 设置选择视频文件按钮的初始位置
  25. self.btn_select_image_folder = QPushButton('批量检测图片文件夹', self)
  26. self.btn_select_image_folder.clicked.connect(self.select_image_folder)
  27. self.btn_select_image_folder.setGeometry(150, 250, 200, 30)
  28. self.btn_select_video_folder = QPushButton('批量检测视频文件夹', self)
  29. self.btn_select_video_folder.clicked.connect(self.select_video_folder)
  30. self.btn_select_video_folder.setGeometry(450, 250, 200, 30)

这个代码可以生成一个前端窗口页面


三、进行目标检测

1.图片检测

目标检测的任务是找出图像或视频中所有感兴趣的目标(物体),确定它们的类别和位置。这涉及到在复杂的背景中准确地识别并定位出各种物体,如车辆、行人、动物等。目标检测在多个领域有着广泛的应用,如自动驾驶、安防监控、图像检索、智能客服、图像分析等。在自动驾驶领域,目标检测可以帮助汽车或无人机识别周围环境中的物体,以便做出更准确的决策;在安防监控领域,目标检测可以帮助实现关键布控,识别出感兴趣的目标。

  1. 单张图片检测

    1. import os
    2. import sys
    3. import cv2
    4. from ultralytics import YOLO
    5. # 选择图片文件的函数
    6. def select_image(self):
    7. options = QFileDialog.Options()
    8. # 获取用户选择的图片文件路径
    9. image_path, _ = QFileDialog.getOpenFileName(self, "检测一张图片", "", "Image Files (*.jpg *.png)", options=options)
    10. if image_path:
    11. # 调用detect_objects函数进行目标检测
    12. self.detect_objects(image_path)
    13. # 图片目标检测函数
    14. def detect_objects(self, file_path):
    15. # 加载YOLO模型
    16. model = YOLO("yolov8n.pt")
    17. classnameList = model.names
    18. if file_path.endswith(('.jpg', '.png')):
    19. # 读取图片文件
    20. image = cv2.imread(file_path)
    21. # 对图片进行目标检测
    22. results = model.predict(image)
    23. for result in results:
    24. boxes = result.boxes.cpu().numpy()
    25. for box in boxes:
    26. r = box.xyxy[0].astype(int)
    27. # 在图像上绘制检测框和标签
    28. cv2.rectangle(image, (r[0], r[1]), (r[2], r[3]), (0, 255, 0), 2)
    29. classID = box.cls[0]
    30. label = classnameList[classID]
    31. x = max(r[0] - 10, 10)
    32. y = max(r[1] - 10, 10)
    33. cv2.putText(image, label, (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)
    34. # 显示检测结果
    35. cv2.imshow('Detection Results', image)
    36. cv2.waitKey(0)
    37. cv2.destroyAllWindows()

  2. 批量图片检测

    1. def select_image_folder(self):
    2. # 打开文件夹选择对话框
    3. options = QFileDialog.Options()
    4. folder_path = QFileDialog.getExistingDirectory(self, "批量检测图片文件夹", options=options)
    5. if folder_path:
    6. # 创建用于保存检测结果的文件夹
    7. output_folder = os.path.join(folder_path, "image_output")
    8. os.makedirs(output_folder, exist_ok=True)
    9. # 遍历文件夹中的所有文件
    10. for file_name in os.listdir(folder_path):
    11. if file_name.endswith(('.jpg', '.png')):
    12. image_path = os.path.join(folder_path, file_name)
    13. self.detect_objects_folder(image_path, output_folder)
    14. def detect_objects_folder(self, file_path, output_folder):
    15. # 初始化 YOLO 模型
    16. model = YOLO("yolov8n.pt")
    17. classnameList = model.names
    18. if file_path.endswith(('.jpg', '.png')):
    19. # 读取图像文件
    20. image = cv2.imread(file_path)
    21. # 使用模型预测物体
    22. results = model.predict(image)
    23. # 遍历预测结果
    24. for result in results:
    25. boxes = result.boxes.cpu().numpy()
    26. # 在图像上绘制边界框和标签
    27. for box in boxes:
    28. r = box.xyxy[0].astype(int)
    29. cv2.rectangle(image, (r[0], r[1]), (r[2], r[3]), (0, 255, 0), 2)
    30. classID = box.cls[0]
    31. label = classnameList[classID]
    32. x = max(r[0] - 10, 10)
    33. y = max(r[1] - 10, 10)
    34. cv2.putText(image, label, (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)
    35. # 保存带有检测结果的图像
    36. output_path = os.path.join(output_folder, os.path.basename(file_path))
    37. cv2.imwrite(output_path, image)

2.视频检测

  1. 单个视频检测

    1. # 选择视频文件的函数
    2. def select_video(self):
    3. options = QFileDialog.Options()
    4. # 获取用户选择的视频文件路径
    5. video_path, _ = QFileDialog.getOpenFileName(self, "检测一个视频", "", "Video Files (*.mp4 *.avi)", options=options)
    6. if video_path:
    7. # 调用detect_objectss函数进行视频目标检测
    8. self.detect_objectss(video_path)
    9. # 视频目标检测函数
    10. def detect_objectss(self, video_path):
    11. # 加载YOLO模型
    12. model = YOLO("yolov8n.pt")
    13. classnameList = model.names
    14. cap = cv2.VideoCapture(video_path)
    15. if not cap.isOpened():
    16. print("Error: Could not open video.")
    17. return
    18. while True:
    19. ret, frame = cap.read()
    20. if not ret:
    21. break
    22. # 对视频帧进行目标检测
    23. results = model.predict(frame)
    24. for result in results:
    25. boxes = result.boxes.cpu().numpy()
    26. for box in boxes:
    27. r = box.xyxy[0].astype(int)
    28. # 在视频帧上绘制检测框和标签
    29. cv2.rectangle(frame, (r[0], r[1]), (r[2], r[3]), (0, 255, 0), 2)
    30. classID = box.cls[0]
    31. label = classnameList[classID]
    32. x = max(r[0] - 10, 10)
    33. y = max(r[1] - 10, 10)
    34. cv2.putText(frame, label, (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)
    35. # 显示检测结果
    36. cv2.imshow('Detection Results', frame)
    37. if cv2.waitKey(1) & 0xFF == ord('q'):
    38. break
    39. cap.release()
    40. cv2.destroyAllWindows()
  2. 批量视频检测

  1. def select_video_folder(self):
  2. # 打开文件夹选择对话框
  3. options = QFileDialog.Options()
  4. folder_path = QFileDialog.getExistingDirectory(self, "批量检测视频文件夹", options=options)
  5. if folder_path:
  6. # 创建用于保存检测结果的文件夹
  7. output_folder = os.path.join(folder_path, "video_output")
  8. os.makedirs(output_folder, exist_ok=True)
  9. # 遍历文件夹中的所有文件
  10. for file_name in os.listdir(folder_path):
  11. if file_name.endswith(('.mp4', '.avi')):
  12. video_path = os.path.join(folder_path, file_name)
  13. self.detect_videos_folder(video_path, output_folder)
  14. def detect_videos_folder(self, video_path, output_folder):
  15. # 初始化 YOLO 模型
  16. model = YOLO("yolov8n.pt")
  17. classnameList = model.names
  18. # 打开视频文件
  19. cap = cv2.VideoCapture(video_path)
  20. if not cap.isOpened():
  21. print("Error: Could not open video.")
  22. return
  23. frame_width = int(cap.get(3))
  24. frame_height = int(cap.get(4))
  25. out = cv2.VideoWriter(os.path.join(output_folder, os.path.basename(video_path)), cv2.VideoWriter_fourcc(*'mp4v'), 30, (frame_width, frame_height))
  26. while True:
  27. ret, frame = cap.read()
  28. if not ret:
  29. break
  30. # 使用模型预测视频帧中的物体
  31. results = model.predict(frame)
  32. # 在视频帧上绘制边界框和标签
  33. for result in results:
  34. boxes = result.boxes.cpu().numpy()
  35. for box in boxes:
  36. r = box.xyxy[0].astype(int)
  37. cv2.rectangle(frame, (r[0], r[1]), (r[2], r[3]), (0, 255, 0), 2)
  38. classID = box.cls[0]
  39. label = classnameList[classID]
  40. x = max(r[0] - 10, 10)
  41. y = max(r[1] - 10, 10)
  42. cv2.putText(frame, label, (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)
  43. # 写入带有检测结果的视频帧
  44. out.write(frame)
  45. cap.release()
  46. out.release()
  47. cv2.destroyAllWindows()

四、总结会收获

通过目标检深度学习模型选择、GUI界面设计和图像处理流程,我们提升了目标检测应用的性能和用户体验。优化模型选择和量化处理,加速了推理速度;改进界面设计和资源管理,增强了应用的响应性和稳定性;优化图像处理流程,提高了检测结果的精确性。这些措施不仅使应用更高效,还提升了用户满意度,为未来的进一步优化和扩展奠定了坚实基础。

本文文章链接:写文章-CSDN创作中心icon-default.png?t=N7T8https://mp.csdn.net/mp_blog/creation/editor/139789919

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/897620
推荐阅读
相关标签
  

闽ICP备14008679号