Добавление в путь к данным распознавания лиц новых изображений, а не их перезапись - PullRequest
0 голосов
/ 06 июня 2018

В настоящее время я работаю в проекте по распознаванию лиц с использованием OpenCV и python.Дело в том, что точность распознавания лиц не так хороша, поэтому я думаю о добавлении большего количества изображений в путь данных с различным освещением, фоном и т. Д., Чтобы улучшить его.Проблема здесь в том, что всякий раз, когда я использую

cv2.imwrite ("data / User." + Str (face_ID) + "." + Str (count) + ". Jpg", серый [y: y +]h, x: x + w])

перезаписывает предыдущие сохраненные изображения в пути.

Я отлично работаю, но я просто хочу сделать что-то вроде добавления новых изображений в путь, каждый раз, когда я запускаю функцию.

Вот раздел генератора данных.

def data_generator():

    count = 0

    # asking user for data input

    face_ID = input("[INFO] Please enter user ID and press <return> ")

    print("[INFO] Thank you\n Now please look at the camera and wait.")
  # start the video capture

    cap = cv2.VideoCapture(0)
    try:

        while True:

            # Here we detect the face

            ret, img = cap.read()
            gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

            # Detecting faces

            faces = detector.detectMultiScale(gray,
                scaleFactor = 1.3,
                minNeighbors = 5,
                minSize= (20, 20)
                )

            for (x, y, w, h) in faces:

                cv2.rectangle(img, (x,y), (x+w, y+h), (0,255,0), 2)

                roi_gray = gray[y:y+h, x:x+w]
                roi_img = img[y:y+h, x:x+w] 


                count += 1

            cv2.imwrite("data/User."+str(face_ID)+"."+str(count)+".jpg", gray[y:y+h, x:x+w])

            cv2.imshow('img', img)

            k = cv2.waitKey(10) & 0xff

            if k == 27:
                break

            elif count >= 30:
                break
    except KeyboardInterrupt:
        pass

    print("[INFO] Data gathered.")

    print("[INFO] Saving Data.")
    print("[INFO] Exiting program and cleanup stuff")

    cap.release()
    cv2.destroyAllWindows()

1 Ответ

0 голосов
/ 06 июня 2018

Я думаю, проблема в том, что у вас есть cv2.imwrite("data/User."+str(face_ID)+"."+str(count)+".jpg", gray[y:y+h, x:x+w]) за пределами вашего while True: цикла.

Я также использую os.path.join и .format для сохранения изображений.Таким образом, вы можете определить каталог вне цикла и использовать .format как этот для лучшего обзора IMO:

cv2.imwrite(os.path.join(directory, 'User.{}.{}.jpg'.format(face_ID, count)), gray[y:y+h, x:x+w]) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...