Я пытаюсь использовать каскад Хаара в OpenCV 4.0 для определения лиц для оценки эмоций, пола и возраста. иногда функция detemultiscale () возвращает пустой кортеж, что вызывает ошибку в более поздних частях распознавания.
Я пытался создать цикл while до тех пор, пока лицо не будет обнаружено, но, кажется, что после того, как лицо не обнаружено, оно не обнаруживается снова (в том же захваченном кадре), я получаю пустые кортежи. Странно то, что иногда программа работает без нареканий.
модель обнаружения загружается правильно, поскольку cv2.CascadeClassifier.empty (face_cascade) возвращает False.
Кажется, нет проблем с захваченным кадром, так как я могу правильно его отобразить.
после поиска я обнаружил, что detectmultiscale () фактически возвращает пустой кортеж, когда лица не обнаружены.
Код обнаружения лица Python OpenCV иногда вызывает объект `'tuple', не имеющий атрибута 'shape'`
face_cascade = cv2.CascadeClassifier(
'C:\\Users\\kj\\Desktop\\jeffery 1\\trained_models\\detection_models\\haarcascade_frontalface_alt.xml')
retval = cv2.CascadeClassifier.empty(face_cascade)
print(retval)
возвращает False
def video_cap(out_queue):
video_capture = cv2.VideoCapture(0, cv2.CAP_DSHOW)
#video_capture.set(3, 768)
#video_capture.set(4, 1024)
while True:
ret, bgr_image = video_capture.read()
cv2.imshow('frame',bgr_image)
cv2.waitKey(1000)
cv2.destroyAllWindows()
if video_capture.isOpened() == False :
video_capture.open(0)
if(ret):
gray_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2GRAY)
rgb_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2RGB)
faces = detect_faces(face_detection, gray_image)
ret_list = [gray_image, rgb_image, faces]
print("DEBUG: VIDEO_CAPTURE MODULE WORKING")
out_queue.put(ret_list)
return
Функция video_cap является потоковой
def detect_faces(detection_model, gray_image_array):
faces1 = detection_model.detectMultiScale(gray_image_array, scaleFactor= 2, minNeighbors=10,minSize=(64,64))
while(len(faces1)== 0 ):
faces1 = detection_model.detectMultiScale(gray_image_array, scaleFactor=2, minNeighbors=10, minSize=(64, 64))
print(faces1)
if(len(faces1)!=0):
break
return faces1
Я получаю вывод:
()
()
()
() ....
продолжается до тех пор, пока я не закончу.
как мне решить проблему?