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
相关产品推荐
相关产品推荐

