【发布时间】:2020-12-15 14:24:08
【问题描述】:
我有以下代码:
import numpy as np
import cv2
import pickle
import rtsp
import PIL as Image
face_cascade = cv2.CascadeClassifier('cascades\data\haarcascade_frontalface_alt2.xml')
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read("trainner.yml")
labels = {"person_name": 1}
with open("labels.pickle", 'rb') as f:
og_labels = pickle.load(f)
labels = {v:k for k,v in og_labels.items()}
url = 'rtsp://user:pass@xxx.xxx.x.xxx:YYYY/stream0/mobotix.mjpeg'
with rtsp.Client(url) as client:
client.preview()
while True:
frame = client.read(raw=True)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)
for (x,y,w,h) in faces:
print(x,y,w,h)
roi_gray = gray[y:y+h, x:x+w]
roi_color = frame[y:y+h, x:x+w]
#recognize?
id_, conf = recognizer.predict(roi_gray)
if conf>=45: # and conf <=85:
print(id_)
print(labels[id_])
font = cv2.FONT_HERSHEY_SIMPLEX
name = labels[id_]
color = (0,0,255)
stroke = 2
cv2.putText(frame, name, (x,y), font, 1, color, stroke, cv2.LINE_AA)
#img_item = "my-image.png"
#cv2.imwrite(img_item, roi_gray)
color = (0, 0, 255)
stroke = 2
end_cord_x = x + w
end_cord_y = y + h
cv2.rectangle(frame, (x,y), (end_cord_x, end_cord_y), color, stroke)
cv2.imshow('IP cam',frame)
if cv2.waitKey(20) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
一切正常,我正在运行我的代码,首先它打开“client.preview”的凸轮视图,此时人脸检测不起作用。当我关闭这个时,IPcam 窗口打开并且一切正常。 (RTSP 流仍然会丢失很多帧,但没有直接问题)。
如果我不使用代码“client.preview”,我会因为 src_empty 而从 opencv 收到错误消息。 如果我尝试将代码更改为“client.read()”,则由于 src_empty,opencv 会发生错误。
我应该如何解决这个问题?
【问题讨论】:
标签: python opencv rtsp face-detection