在现代计算机视觉领域,YOLO(You Only Look Once)系列算法因其高效的实时目标检测能力而广泛应用。YOLOv5是其中较为流行的一个版本,它在速度和准确性上都有很好的表现。本教程将指导你如何使用Flask框架将YOLOv5部署到前端页面,实现视频中的目标检测。
环境准备
首先,你需要确保你的开发环境中安装了Python和Flask。如果你还没有安装,可以使用以下命令:
pip install flask
pip install torch torchvision torchaudio
pip install opencv-python
pip install numpy
pip install pyyaml
接下来,你需要克隆YOLOv5的代码库:
git clone https://github.com/ultralytics/yolov5.git
cd yolov5
pip install -r requirements.txt
构建Flask应用
接下来,我们创建一个简单的Flask应用。首先,创建一个新的Python文件,例如app.py
,并编写如下代码:
from flask import Flask, render_template, request, Response
import cv2
import torch
app = Flask(__name__)
# 加载YOLOv5模型
model = torch.hub.load('ultralytics/yolov5', 'yolov5s') # 使用YOLOv5s预训练模型
def generate_frames():
cap = cv2.VideoCapture(0) # 使用摄像头作为视频源
while True:
success, frame = cap.read()
if not success:
break
# 进行目标检测
results = model(frame)
# 将检测结果渲染到帧上
frame = results.render()[0]
# 编码为JPEG格式
ret, buffer = cv2.imencode('.jpg', frame)
frame = buffer.tobytes()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
@app.route('/')
def index():
return render_template('index.html')
@app.route('/video_feed')
def video_feed():
return Response(generate_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
创建HTML页面
然后,我们需要创建HTML文件来展示视频流。创建一个templates
文件夹,并在其中创建一个index.html
文件,代码如下:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>YOLOv5 视频检测</title>
</head>
<body>
<h1>YOLOv5 实时目标检测</h1>
<img src="{{ url_for('video_feed') }}" width="800" height="600">
</body>
</html>
运行Flask应用
确保你的摄像头已经连接,并且没有被其他应用占用。在命令行中运行以下命令启动Flask应用:
python app.py
打开浏览器,访问 http://127.0.0.1:5000/
,你会看到显示的视频流,其中包含YOLOv5检测出的目标。
总结
通过以上步骤,我们实现了一个简单的Flask应用,使用YOLOv5对实时视频流进行目标检测。这个示例可以作为基础,进而扩展更多功能,包括保存检测结果、选择不同的YOLO模型、以及对视频文件的处理等。希望这个教程能为你的项目提供帮助!