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

基于Caffe的视频目标检测:修改读取本地视频代码遇报错求助

解决OpenCV读取本地视频时的AttributeError问题

你遇到的这个错误很典型,根源是**cv2.VideoCapture.read()和原代码里的VideoStream.read()返回值格式完全不同**:

  • 原代码用的VideoStream.read()直接返回单帧图像;
  • 而cv2.VideoCapture.read()返回的是一个包含两个元素的元组:(success, frame),其中success是布尔值(标记是否成功读取到帧),frame才是你需要的图像数据。

你现在直接把整个元组赋值给frame,后续调用imutils.resize()时,传入的是元组而非图像,自然会触发'tuple' object has no attribute 'shape'的错误。

修复步骤

只需要修改读取帧的代码,拆分返回的元组,并增加读取失败的判断逻辑:

print("[INFO] starting video stream...")
vs= cv2.VideoCapture('cars.avi')
# 可选:提前检查视频文件是否成功打开
if not vs.isOpened():
    print("[ERROR] 无法打开目标视频文件")
    exit()
time.sleep(2.0)
fps = FPS().start()

# 循环处理视频帧
while True:
    # 拆分读取返回的元组,分离状态和帧数据
    success, frame = vs.read()
    # 如果读取失败(比如视频播放完毕或文件损坏),终止循环
    if not success:
        print("[INFO] 视频读取完毕或出现错误")
        break
    # 继续后续的resize处理
    frame = imutils.resize(frame, width=400)
    
    # 保留你原来的目标检测、绘制结果、显示帧等代码
    # ...
    
    # 更新FPS计数器
    fps.update()

额外注意事项

  • 确保cars.avi文件和你的脚本在同一目录下,如果不在,要传入完整的文件路径(比如Windows系统下的'C:\\Users\\DEBASMITA\\videos\\cars.avi',注意路径的转义符);
  • 可以通过vs.isOpened()提前检查视频是否成功打开,快速排查文件路径错误或视频格式不支持的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:13:38