首页 > 解决方案 > 将新图像添加到人脸识别数据路径,而不是覆盖它们

问题描述

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

cv2.imwrite("数据/用户"+str(face_ID)+"."+str(count)+".jpg", gray[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()

标签: pythonopencvface-recognition

解决方案


我认为问题是你有你的循环cv2.imwrite("data/User."+str(face_ID)+"."+str(count)+".jpg", gray[y:y+h, x:x+w])之外。while True:

我也使用os.path.joinand.format来保存图像。因此,您可以在循环之外定义一个目录并.format像这样使用以获得更好的 IMO 概览:

cv2.imwrite(os.path.join(directory, 'User.{}.{}.jpg'.format(face_ID, count)), gray[y:y+h, x:x+w]) 

推荐阅读