为什么我的视频在 Python open cv 过一会儿后挂起(无响应)?

Why does my video feed hang after a while (Not Responding) on Python open cv?

我目前正在尝试编写一个程序,可以打开实时视频源(网络摄像头)并实时识别 QR 或条形码,因为它们出现在摄像头下,但视频源总是在一段时间后挂起。我在 python 上 运行 并且导入了以下库:

这是我在控制台中调用的函数:

def open_camera():
cap = cv2.VideoCapture('rtsp://admin:MCCUED@192.168.1.112/H264?ch=1&subtype=0')

while True:
    success, img = cap.read()
    for barcode in decode(img):
        idString = barcode.data.decode('utf-8')
        pts = np.array([barcode.polygon], np.int32)
        pts2 = barcode.rect
        
        pts.reshape((-1, 1, 2))
        cv2.polylines(img, [pts], True, (100, 100, 255), 5)
        pts2 = barcode.rect
        draw_text(img, "ID:" + idString, font_scale=2, pos=(pts2[0], pts2[1] - 44), text_color_bg=(0, 0, 0))

    cv2.imshow('Result', img)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

输出:视频源出现并运行了一段时间,可以检测到一些 QR/Barcodes 但它在大约 10 秒后挂起并且显示没有响应。我也收到此错误:


Helper function'draw_text' 只是在我的文本下方放置了一个背景框,以便更清晰的文本输出:

def draw_text(img, text,
          font=cv2.FONT_HERSHEY_PLAIN,
          pos=(0, 0),
          font_scale=3,
          font_thickness=2,
          text_color=(0, 255, 0),
          text_color_bg=(0, 0, 0)
          ):
x, y = pos
text_size, _ = cv2.getTextSize(text, font, font_scale, font_thickness)
text_w, text_h = text_size
cv2.rectangle(img, pos, (x + text_w, y + text_h), text_color_bg, -1)
cv2.putText(img, text, (x, y + text_h + font_scale - 1), font, font_scale, text_color, font_thickness)

return text_size
success, img = cap.read()

你绝对必须检查:

if not success:
    break

表示视频已结束或流中断。

并且您必须在进入循环之前检查(断言)cap.isOpened()一次

很多人认为这些步骤是可选的。他们不是。他们是必不可少的。不要遵循错误的教程。