yolov5行人检测ui界面
时间: 2024-04-28 16:17:53 浏览: 207
YOLOv5是一种用于目标检测的深度学习算法,可以用于检测行人、车辆、动物等目标。与此同时,它也提供了用户友好的UI界面,方便用户进行使用和调试。以下是YOLOv5行人检测UI界面的介绍:
1.主界面:该界面显示YOLOv5行人检测的整体情况,包括图片或视频的载入和检测结果的显示。
2.设置界面:该界面提供了参数设置的选项,包括模型选择、置信度、非极大值抑制(NMS)的阈值等。
3.结果界面:该界面显示YOLOv5行人检测的结果,包括检测到的行人数量、坐标位置以及置信度等信息。
4.日志界面:该界面显示YOLOv5行人检测过程中的日志信息,包括载入图片或视频的时间、模型初始化时间、检测时间等。
相关问题
行人检测系统:基于YOLOv5的行人检测与UI界面实现
### 基于 YOLOv5 的行人检测系统实现方法
#### 数据集准备
为了训练一个有效的行人检测模型,需要准备好标注好的数据集。通常使用的数据格式为 COCO 或 Pascal VOC 格式。可以使用工具如 LabelImg 进行图像标注[^2]。
#### 模型选择与配置
YOLOv5 提供了多个预定义的模型变体,包括 YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l 和 YOLOv5x。其中,YOLOv5s 是最常用的版本,在性能和速度之间取得了良好的平衡[^3]。可以通过克隆官方仓库并安装依赖来获取模型:
```bash
git clone https://github.com/ultralytics/yolov5.git
cd yolov5
pip install -r requirements.txt
```
接着下载预训练权重文件 `yolov5s.pt` 并将其放置到项目的指定目录下。
#### 训练过程
在完成上述准备工作之后,可以启动模型训练。以下是典型的命令示例:
```bash
python train.py --img 640 --batch 16 --epochs 50 --data dataset.yaml --cfg models/yolov5s.yaml --weights yolov5s.pt
```
这里需要注意的是,`dataset.yaml` 文件应包含路径指向训练集和验证集的信息,同时还需要指明类别数量和其他必要的参数设置。
#### 推理阶段
当模型训练完成后,即可进入推理阶段。对于单张图片或者视频流中的每一帧都可以调用如下脚本来执行预测操作:
```python
from utils.general import non_max_suppression, scale_coords
import torch
model = torch.hub.load('ultralytics/yolov5', 'custom', path='best.pt')
results = model(img)
print(results.xyxy[0]) # 打印边界框坐标 (xmin, ymin, xmax, ymax, confidence, class_id)
```
以上代码片段展示了加载自定义模型并对输入图像运行推断的过程。
---
### 配套 UI 界面设计教程
#### 使用 PyQt5 构建桌面应用程序
如果偏好本地部署的应用程序,则可以选择利用 Python GUI 库之一——PyQt5 来创建交互式的用户界面。下面是一个简单的例子说明如何集成 YOLOv5 到 PyQt5 中去显示检测结果:
```python
import sys
from PyQt5.QtWidgets import QApplication, QLabel, QPushButton, QVBoxLayout, QWidget, QFileDialog
from PIL.ImageQt import ImageQt
from torchvision.transforms.functional import to_pil_image
import cv2
import numpy as np
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
layout = QVBoxLayout()
btn_load_img = QPushButton("Load Image", self)
btn_load_img.clicked.connect(self.openImageDialog)
self.label = QLabel(self)
layout.addWidget(btn_load_img)
layout.addWidget(self.label)
self.setLayout(layout)
def openImageDialog(self):
options = QFileDialog.Options()
fileName, _ = QFileDialog.getOpenFileName(self,"QFileDialog.getOpenFileName()", "","All Files (*);;Python Files (*.py)", options=options)
if fileName:
img_cv = cv2.imread(fileName)
results = perform_detection_on_frame(img_cv) # 调用函数进行目标检测
detected_img = draw_boxes_on_image(results, img_cv) # 绘制边框
qim = ImageQt(to_pil_image(torch.from_numpy(detected_img)))
pixmap = QPixmap.fromImage(qim).scaled(800, 600)
self.label.setPixmap(pixmap)
def perform_detection_on_frame(frame): ...
def draw_boxes_on_image(detections, frame): ...
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
```
此段代码实现了基本的功能框架,允许用户从磁盘上选取一张照片并通过按钮触发事件来进行分析,并最终把带有标记的结果呈现在界面上[^1]。
#### Streamlit Web App 开发
另一种更轻量级的方式是采用 Streamlit 工具包快速搭建在线演示平台。它支持直接嵌入机器学习模型而无需过多关注前端细节。以下是如何结合两者的一个简单实例:
```python
import streamlit as st
from PIL import Image
import cv2
import numpy as np
st.title("Pedestrian Detection with YOLOv5")
uploaded_file = st.file_uploader("Choose an image...", type="jpg")
if uploaded_file is not None:
file_bytes = np.asarray(bytearray(uploaded_file.read()), dtype=np.uint8)
opencv_image = cv2.imdecode(file_bytes, 1)
detections = perform_detection_on_frame(opencv_image) # 对上传的照片做处理
annotated_image = draw_boxes_on_image(detections, opencv_image) # 添加矩形框至原图之上
st.image(cv2.cvtColor(annotated_image, cv2.COLOR_BGR2RGB), caption='Processed Image.', use_column_width=True)
```
这段脚本会生成一个网页服务端口,默认情况下访问 http://localhost:8501 即可查看效果。
---
基于yolov8 的行人检测模型
### 使用 YOLOv8 构建行人检测模型的完整流程
YOLOv8 是一种高效的实时目标检测框架,适用于多种应用场景,包括行人检测。以下是构建基于 YOLOv8 的行人检测模型的主要步骤和示例代码。
#### 1. 数据预处理
在行人检测任务中,数据集的选择至关重要。可以使用公开的数据集(如 Market1501[^2] 或 CrowdHuman[^3])进行训练。数据预处理包括标注文件的格式转换、图像增强等操作,以确保模型能够更好地学习到行人特征。
```python
# 数据集配置文件 (data.yaml)
train: ./data/train/images
val: ./data/val/images
nc: 1 # 类别数量(行人)
names: ['person'] # 类别名称
```
#### 2. 模型训练
YOLOv8 提供了灵活的训练接口,可以通过简单的命令行或 Python 脚本完成模型训练。
```bash
# 使用命令行进行训练
yolo train model=yolov8n.yaml data=data.yaml epochs=100 batch=16 imgsz=640
```
上述命令将使用 `yolov8n.yaml` 配置文件和自定义数据集 `data.yaml` 进行训练,设置训练轮数为 100,批次大小为 16,输入图像大小为 640x640[^3]。
#### 3. 模型评估
在训练完成后,可以对模型进行评估,以验证其性能是否满足需求。
```python
from ultralytics import YOLO
# 加载训练好的模型
model = YOLO('runs/detect/train/weights/best.pt')
# 在验证集上评估模型
metrics = model.val()
print(metrics) # 输出评估结果
```
#### 4. 实时检测与 UI 界面构建
为了方便用户使用,可以构建一个基于 Streamlit 的简单 UI 界面,用于上传图像并显示检测结果。
```python
import streamlit as st
from PIL import Image
from ultralytics import YOLO
# 加载预训练模型
model = YOLO('best.pt')
# 创建UI界面
st.title('YOLOv8 行人检测')
uploaded_file = st.file_uploader("上传图像", type=["jpg", "png", "jpeg"])
if uploaded_file is not None:
img = Image.open(uploaded_file)
st.image(img, caption="上传的图像", use_column_width=True)
# 使用YOLOv8进行检测
results = model(img)
# 显示检测结果
st.image(results.render()[0], caption="检测结果", use_column_width=True)
```
#### 5. 工具函数
在实际应用中,可能需要一些工具函数来辅助检测过程,例如加载模型、检测目标以及绘制边界框。
```python
from ultralytics import YOLO
import cv2
import numpy as np
def load_model(model_path):
return YOLO(model_path)
def detect_objects(frame, model, conf_threshold=0.5):
results = model(frame, conf=conf_threshold)
detections = []
for result in results:
boxes = result.boxes.cpu().numpy()
for box in boxes:
r = box.xyxy[0].astype(int)
cls = int(box.cls[0])
conf = round(float(box.conf[0]), 2)
label = f"person {conf}"
detections.append((r, label))
return detections
def draw_detections(frame, detections):
for (r, label) in detections:
cv2.rectangle(frame, (r[0], r[1]), (r[2], r[3]), (0, 255, 0), 2)
cv2.putText(frame, label, (r[0], r[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
return frame
```
通过上述代码,可以实现从模型加载到实时检测的完整流程[^5]。
---
阅读全文
相关推荐















