利用摄像头输入读取视频的yolov5.pt推理测试程序

部署运行你感兴趣的模型镜像

“拷贝即用” 的 YOLOv5 摄像头推理脚本:

  • 支持 USB 摄像头 / RTSP / 本地视频文件
  • q 退出,按 s 保存当前画面到 runs/detect_cam/
  • 自带 FPS 计数,分辨率可调
  • 依赖:已安装 torch + opencv-python + yolov5 即可运行

📁 文件: detect_cam.py

#!/usr/bin/env python3
"""
YOLOv5 摄像头/视频实时推理
usage:
    python detect_cam.py --weights yolov5s.pt --source 0        # USB摄像头
    python detect_cam.py --weights yolov5s.pt --source rtsp://xxx
    python detect_cam.py --weights yolov5s.pt --source video.mp4
"""
import argparse
import time
from pathlib import Path

import cv2
import torch
from numpy import ndarray

FILE = Path(__file__).resolve()
ROOT = FILE.parents[0]  # yolov5 根目录
print(f"ROOT:{ROOT}")

# ====== 1. 载入 yolov5 ======
model = torch.hub.load(ROOT, 'custom', path="yolov5s.pt", source='local')  # 本地 repo
model.eval()

# ====== 2. 参数 ======
parser = argparse.ArgumentParser()
parser.add_argument('--weights', type=str, default='yolov5s.pt', help='模型路径')
parser.add_argument('--source', type=str, default='0', help='0/1/2... 或 rtsp:// 或 *.mp4')
parser.add_argument('--img-size', type=int, default=640, help='推理尺寸')
parser.add_argument('--conf-thres', type=float, default=0.25, help='置信度阈值')
parser.add_argument('--save-dir', type=str, default='runs/detect_cam', help='保存目录')
opt = parser.parse_args()

# 数字则转 int
source = int(opt.source) if opt.source.isdigit() else opt.source
cap = cv2.VideoCapture(source)
assert cap.isOpened(), f'打不开摄像头/视频: {source}'

# 保存目录
save_path = Path(opt.save_dir)
save_path.mkdir(parents=True, exist_ok=True)
print(f'按 q 退出,按 s 保存截图到 {save_path}')

# ====== 3. 颜色 + FPS ======
names = model.names
colors = [(36, 255, 12), (255, 0, 0), (0, 255, 255)] * len(names)

# ====== 4. 推理函数 ======
@torch.no_grad()
def detect(frame: ndarray):
    img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    results = model(img, size=opt.img_size)
    return results

# ====== 5. 主循环 ======
frame_cnt = 0
while True:
    ret, frame = cap.read()
    if not ret:
        print('读取失败,退出')
        break

    t0 = time.time()
    results = detect(frame)          # yolov5 返回 pandas 格式
    fps = 1 / (time.time() - t0 + 1e-6)

    # 画框
    for *xyxy, conf, cls in results.xyxy[0].cpu().numpy():
        if conf < opt.conf_thres:
            continue
        x1, y1, x2, y2 = map(int, xyxy)
        label = f'{names[int(cls)]} {conf:.2f}'
        color = colors[int(cls) % len(colors)]
        cv2.rectangle(frame, (x1, y1), (x2, y2), color, 2)
        cv2.putText(frame, label, (x1, y1 - 5), cv2.FONT_HERSHEY_SIMPLEX,
                    0.6, color, 2)

    # 显示 FPS
    cv2.putText(frame, f'FPS:{fps:.1f}', (10, 30), cv2.FONT_HERSHEY_SIMPLEX,
                1, (0, 0, 255), 2)
    cv2.imshow('YOLOv5-Cam', frame)

    key = cv2.waitKey(1) & 0xFF
    if key == ord('q'):
        break
    elif key == ord('s'):  # 截图
        f = save_path / f'capture_{int(time.time())}.jpg'
        cv2.imwrite(str(f), frame)
        print(f'已保存 {f}')

cap.release()
cv2.destroyAllWindows()

🔧 依赖安装

pip install torch torchvision opencv-python

🚀 运行示例

# USB 摄像头(默认 0)
python detect_cam.py

# 本地视频
python detect_cam.py --source video.mp4

# RTSP 网络摄像头
python detect_cam.py --source rtsp://user:pass@ip:554/stream1

# 换模型 / 调阈值
python detect_cam.py --weights yolov5m.pt --conf-thres 0.4

脚本已包含:

  • 实时 FPS 显示
  • s 截图
  • q 退出

直接跑即可!

您可能感兴趣的与本文相关的镜像

Yolo-v5

Yolo-v5

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

### 香橙派5Pro上运行YOLOv8n模型进行摄像头推理 为了在香橙派5Pro设备上成功部署并使用YOLOv8n模型执行摄像头推理,需遵循一系列特定的操作步骤来配置环境和加载模型。 #### 安装必要的依赖库 确保已按照官方指导完成OpenCV 4.9.0版本的编译安装工作[^1]。这一步骤对于后续图像处理至关重要。接着需要准备Python虚拟环境以及安装PyTorch框架和其他辅助工具包: ```bash pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cpu pip install ultralytics opencv-python-headless numpy matplotlib scikit-image ``` #### 下载预训练权重文件 获取YOLOv8n模型对应的`.pt`格式参数文件,并将其放置于项目目录下方便调用: ```python import os from pathlib import Path model_path = "path/to/yolov8n.pt" if not os.path.exists(model_path): !wget -O {model_path} 'https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt' ``` #### 编写推理脚本 创建一个新的Python脚本来读取实时视频流数据并对每一帧画面实施目标检测任务。这里给出一段简化版代码样例供参考: ```python import cv2 import torch from PIL import Image, ImageDraw def load_model(): model = torch.hub.load('ultralytics/yolov5', 'custom', path=model_path) return model.eval() device = 'cuda' if torch.cuda.is_available() else 'cpu' cap = cv2.VideoCapture(0) with torch.no_grad(): while True: ret, frame = cap.read() img = Image.fromarray(cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)) results = model(img).pandas().xyxy[0] draw = ImageDraw.Draw(img) for index,row in results.iterrows(): label = f'{row["name"]} ({int(row["confidence"]*100)}%)' box = row[['xmin','ymin','xmax','ymax']].values.tolist() draw.rectangle(box,outline="red",width=3) draw.text((box[0],box[1]-10),label,fill="white") result_frame = cv2.cvtColor(np.array(img),cv2.COLOR_RGB2BGR) cv2.imshow('Detection Result',result_frame) key=cv2.waitKey(1)&0xFF if key==ord('q'): break cap.release() cv2.destroyAllWindows() ``` 上述程序实现了从默认摄像头上捕获连续影像片段,在每张图片上调用预先加载好的YOLOv8网络结构来进行物体识别标记,并通过矩形框加文字标签的方式直观展示预测结果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值