添加到人脸识别数据路径的新图像,而不是覆盖它们

时间:2018-06-06 08:55:59

标签: python opencv face-recognition

我目前正在使用OpenCV和python进行面部识别项目。 事实上,人脸识别的准确性并不是那么好,所以我正在考虑在数据路径中添加更多图像,使用不同的光照,背景等来改善它。 这里的问题是每当我使用

cv2.imwrite(“data / User。”+ str(face_ID)+“。”+ str(count)+“。jpg”,grey [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 :(得分:2)

我认为问题是你的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])