You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

YOLOv5摄像头实时检测卡顿在Adding AutoShape问题求助

YOLOv5实时检测卡顿、依赖报错与维度问题解决

一、先解决blinker依赖报错

出现「Expected end or semicolon (after name and no valid version specifier)」是pip解析blinker版本时的问题,按下面步骤处理:

  • 升级pip到最新版:python -m pip install --upgrade pip
  • 重新安装兼容的blinker版本,比如:pip install blinker==1.7.0
  • 或者卸载后重装:pip uninstall blinker -y && pip install blinker

二、解决「Adding AutoShape...」卡顿与维度不匹配

卡顿是因为AutoShape在实时帧循环里重复做预处理,关闭它后要手动处理图像维度(YOLOv5模型要求输入是4维张量:(batch, channel, height, width),单帧是3维,得加batch维度)。修改后的代码如下:

import torch
import cv2
import numpy as np

# 加载模型时关闭autoshape,手动控制输入
model = torch.hub.load('yolov5', 'custom', path='best.pt', source='local', force_reload=True, autoshape=False)
model.eval()  # 设置为评估模式

cap = cv2.VideoCapture(0)
# 把摄像头分辨率设成和训练时一致的尺寸,比如640x640,减少计算量
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 640)

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    
    # 手动预处理:OpenCV读的是BGR,转成YOLOv5需要的RGB,再加batch维度
    img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    img = np.expand_dims(img, axis=0)  # 从(640,640,3)变成(1,640,640,3)
    
    # 模型推理
    results = model(img)
    
    # 渲染结果后转回BGR给OpenCV显示
    rendered_img = results.render()[0]
    rendered_img = cv2.cvtColor(rendered_img, cv2.COLOR_RGB2BGR)
    
    cv2.imshow('YOLO', rendered_img)

    if cv2.waitKey(10) & 0XFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

额外优化建议

  • 检查是否用GPU推理:执行print(torch.cuda.is_available()),如果返回True,把模型移到CUDA:model = model.cuda(),输入也同步移过去,能大幅提速
  • 关闭后台多余程序,降低系统负载
  • 确保摄像头分辨率和训练时的输入尺寸一致,避免重复缩放带来的性能损耗

内容的提问来源于stack exchange,提问作者Ceemor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 22:32:54