Как сохранить фотографии с каждого нового лица и назначить им уникальные идентификаторы? - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь создать приложение для распознавания лиц и распознавания лиц, выполнив следующие действия:

  1. Делайте снимки из видео и сохраняйте их с уникальными идентификаторами
  2. . Обучите приложение распознавать люди на этих фотографиях.
  3. Используйте видео / веб-камеру и поля отображения и правильный идентификатор, когда лица, уже находящиеся в наборе данных, будут распознаны. Если приложение обнаруживает неизвестное лицо, оно сохраняется и обучается.

Мой код отображает идентификаторы лиц, но я борюсь с несколькими вещами. Во-первых, мой код должен делать моментальный снимок каждый раз, когда он распознает лицо, но это занимает только 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.

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