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

