OpenCV распознавание лиц. Видео не работает, когда лицо не распознано. Как мне сделать непрерывную запись? - PullRequest
0 голосов
/ 09 мая 2018

Использование Opencv для распознавания лиц

Это код, который я использую для распознавания лиц в моей веб-камере, но как только камера не распознает лицо, она прекращает запись, и я хочу, чтобы она была непрерывной.

import cv2
import logging as log
from time import sleep
import datetime as dt
import numpy as np

cascPath = "haarcascade_frontalface_default.xml"
faceCascade = cv2.CascadeClassifier(cascPath)
cam = cv2.VideoCapture(0);
anterior = 0
log.basicConfig(filename='webcam.log',level=log.INFO)


rec = cv2.face.LBPHFaceRecognizer_create();
rec.read('recognizer/trainningData.yml')
id=0

font = cv2.FONT_HERSHEY_SIMPLEX
fontscale = 1
fontcolor = (255,255,255)

while(True):
    if not cam.isOpened():
        print('Unable to load camera.')
        sleep(5)
        pass
    ret, img = cam.read();
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = faceCascade.detectMultiScale(gray, scaleFactor=1.1,minNeighbors=5,minSize=(30, 30))
    for(x, y, w, h) in faces:
        cv2.rectangle(img, (x,y), (x+w, y+h), (0,255,0),2)
        id, conf = rec.predict(gray[y:y+h,x:x+w])
        if(id == 1):
            id = "Nome do usuário detectado";
        cv2.putText(img,str(id),(x,y-10),font,0.55,(0,255,0),1);
        cv2.imshow("Face", img);
        if(conf<=20):
            if(id!=None):
                cv2.putText(img,str(id),(x,y-10),font,0.55,(0,255,0),1);
        else:
            cv2.putText(img,"Unknown",(x,y+h-10),font,0.55, (0,255,0),1);
        if anterior != len(faces):
            anterior = len(faces)
            log.info("ID: " + str(id) + " faces: "+str(len(faces))+" at "+str(dt.datetime.now()))
        if(cv2.waitKey(1)==ord('q')):
            break;
cam.release()
cv2.destroyAllWindows()

1 Ответ

0 голосов
/ 09 мая 2018

Внимательно посмотрите на свой код ... вы вызываете метод imshow(), который отвечает за показ изображения внутри цикла for, который обрабатывает обнаруженные лица.

Это означает, что если лица не обнаружены, то цикл for не выполняется и, следовательно, imshow() не вызывается.

Если вы хотите показать изображение независимо от результата обнаружения, переместите imshow() вызов в while loop

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...