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

在Google Colab用摄像头评估YOLOv8遇报错,求原因及解决方法

YOLOv8在Colab调用摄像头报错的原因与解决办法

报错原因

YOLOv8官方代码中加入了Colab/Kaggle环境的强制检测:当你设置source='0'调用本地摄像头时,代码会自动检测当前运行环境,若判定为Colab或Kaggle,直接抛出NotImplementedError。这和YOLOv7的逻辑不同——YOLOv7没有做这个强制拦截,所以你之前用的摄像头补丁能生效,但YOLOv8直接阻断了这条调用路径。

解决办法

  • 方法1:修改YOLOv8源码绕过检测
    直接删除YOLOv8中阻止Colab调用摄像头的检测代码,在Colab中执行以下命令即可:

    !sed -i '52,54d' /usr/local/lib/python3.8/dist-packages/ultralytics/yolo/data/dataloaders/stream_loaders.py
    

    执行后,你原来的YOLOv8推理代码就能正常运行,再配合之前用在YOLOv7上的摄像头补丁即可完成测试。

  • 方法2:手动捕获摄像头画面逐帧推理
    不依赖YOLOv8的source参数,通过Colab的摄像头API手动获取画面,再传给模型推理,无需修改源码:

    from ultralytics import YOLO
    import cv2
    import numpy as np
    from google.colab.patches import cv2_imshow
    from IPython.display import display, Javascript
    from google.colab.output import eval_js
    from base64 import b64decode
    
    # 加载训练好的模型
    model = YOLO('/content/gdrive/MyDrive/yolov8/Mask-Wearing-19/runs/detect/train2/weights/best.pt')
    
    def get_camera_frame(quality=0.8):
        js = Javascript('''
            async function getFrame(quality) {
                const video = document.createElement('video');
                video.style.display = 'none';
                const stream = await navigator.mediaDevices.getUserMedia({video: true});
                document.body.appendChild(video);
                video.srcObject = stream;
                await video.play();
                
                const canvas = document.createElement('canvas');
                canvas.width = video.videoWidth;
                canvas.height = video.videoHeight;
                canvas.getContext('2d').drawImage(video, 0, 0);
                stream.getVideoTracks()[0].stop();
                document.body.removeChild(video);
                return canvas.toDataURL('image/jpeg', quality);
            }
        ''')
        display(js)
        data = eval_js('getFrame({})'.format(quality))
        binary = b64decode(data.split(',')[1])
        return cv2.imdecode(np.frombuffer(binary, np.uint8), cv2.IMREAD_COLOR)
    
    # 循环推理
    while True:
        try:
            frame = get_camera_frame()
            results = model(frame)
            # 绘制检测结果
            annotated_frame = results[0].plot()
            cv2_imshow(annotated_frame)
            # 手动中断循环即可停止
        except KeyboardInterrupt:
            break
        except Exception as e:
            print(e)
            break
    
    cv2.destroyAllWindows()
    
  • 方法3:本地运行推理(最稳定)
    将训练好的best.pt模型下载到本地电脑,在本地Python环境中安装ultralytics、opencv-python等依赖后,直接运行你原来的代码即可,完全不受Colab环境限制,是最稳定的测试方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:55:34