分段错误如何修复OpenCV python



我正试图使用Yolov5在网络摄像头上运行一个简单的异议检测,但我一直得到下面的错误。

zsh: segmentation fault

相机似乎打开然后立即关闭,代码退出上面的错误。这是我的代码

def object_detector():
DEVICE = "cuda" if torch.cuda.is_available() else "cpu" 
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
# mmocr = MMOCR(det='TextSnake', recog='SAR')
cam = cv2.VideoCapture(0)

while(True): 
ret, frame = cam.read()
# ocr_result = mmocr.readtext(frame, output='demo/cam.jpg', export='demo/', print_result=True, imshow=True)
# print("RESULT n ", ocr_result)
frame = frame[:, :, [2,1,0]]
frame = Image.fromarray(frame) 
frame = cv2.cvtColor(np.array(frame), cv2.COLOR_RGB2BGR)
# ocr_result = mmocr.readtext(frame, output='demo/cam.jpg', export='demo/', print_result=True, imshow=True)
# print("RESULT n ", ocr_result)
result = model(frame,size=640)
# Results
# crops = result.crop(save=True)
cv2.imshow('YOLO', np.squeeze(result.render()))
if cv2.waitKey(1) & 0xFF == ord('q'):
break

cam.release()
cv2.destroyAllWindows()

我做错了什么,我该怎么做?

您不是在测试cam.read()的返回值,请确保ret是成功代码,并且frame不是nullptr,然后再继续。

首先需要检查是否返回了图像。cam.read()产生的第一个返回告诉您是否已接收到图像。你可以这样使用它:

...
while(True): 
ret, frame = cam.read()
if ret:
frame = frame[:, :, [2,1,0]] 
...
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cam.release()
cv2.destroyAllWindows()

相关内容

  • 没有找到相关文章

最新更新