为什么我的视频在 Python open cv 过一会儿后挂起(无响应)?
Why does my video feed hang after a while (Not Responding) on Python open cv?
我目前正在尝试编写一个程序,可以打开实时视频源(网络摄像头)并实时识别 QR 或条形码,因为它们出现在摄像头下,但视频源总是在一段时间后挂起。我在 python 上 运行 并且导入了以下库:
- 二维码
- csv
- cv2
- numpy
- 从pyzbar.pyzbar导入解码
这是我在控制台中调用的函数:
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()
一次
很多人认为这些步骤是可选的。他们不是。他们是必不可少的。不要遵循错误的教程。
我目前正在尝试编写一个程序,可以打开实时视频源(网络摄像头)并实时识别 QR 或条形码,因为它们出现在摄像头下,但视频源总是在一段时间后挂起。我在 python 上 运行 并且导入了以下库:
- 二维码
- csv
- cv2
- numpy
- 从pyzbar.pyzbar导入解码
这是我在控制台中调用的函数:
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()
一次
很多人认为这些步骤是可选的。他们不是。他们是必不可少的。不要遵循错误的教程。