Я пытаюсь создать приложение для распознавания лиц и распознавания лиц, выполнив следующие действия:
- Делайте снимки из видео и сохраняйте их с уникальными идентификаторами
- . Обучите приложение распознавать люди на этих фотографиях.
- Используйте видео / веб-камеру и поля отображения и правильный идентификатор, когда лица, уже находящиеся в наборе данных, будут распознаны. Если приложение обнаруживает неизвестное лицо, оно сохраняется и обучается.
Мой код отображает идентификаторы лиц, но я борюсь с несколькими вещами. Во-первых, мой код должен делать моментальный снимок каждый раз, когда он распознает лицо, но это занимает только pi c после того, как я прекращаю поток. До этого он показывает постоянно обновляемую картинку.
Во-вторых, я хотел бы узнать, как обучить систему с помощью снятых фотографий и использовать результаты для отображения / назначения правильных идентификаторов для лиц в режиме реального времени.
Вот мой код:
import cv2
import create_face_dataset
cascPath = './cascades/haarcascade_frontalface_default.xml'
face_cascade = cv2.CascadeClassifier(cascPath)
# recognizer = cv2.createLBPHFaceRecognizer()
cap = cv2.VideoCapture(0)
last_count = 0
people_count = 0
while True:
ret, frame = cap.read()
input_img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
detections = face_cascade.detectMultiScale(
input_img,
scaleFactor=1.1,
minNeighbors=5,
minSize=(30, 30),
flags=cv2.CASCADE_SCALE_IMAGE
)
create_face_dataset.make_sure_path_exists('images')
count = 0
for face_no, (x, y, w, h) in enumerate(detections):
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
faceID = face_no
currentFace = detections[face_no]
cv2.putText(frame, str(faceID), (x, y - 30), cv2.FONT_HERSHEY_TRIPLEX,
.7, (0, 0, 0), 1, cv2.LINE_AA)
cv2.imwrite("images/" + str(faceID) + "{0}.jpg".format(count), input_img[y:y+h,x:x+w])
count += 1
if len(detections) > last_count:
people_count += len(detections - last_count)
last_count = len(detections)
cv2.putText(frame, str(people_count), (50, 50), cv2.FONT_HERSHEY_TRIPLEX,
.7, (0, 0, 0), 1, cv2.LINE_AA)
cv2.imshow("result", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Импорт create_face_dataset
предназначен только для проверки функции, существует ли указанная папка c.