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

2024-03-29 01:22:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前在一个使用OpenCV和python的人脸识别项目中工作。 问题是,人脸识别的准确性不太好,所以我考虑在数据路径中添加更多的图像,使用不同的灯光、背景等来提高识别率。 这里的问题是每当我使用

cv2.imwrite(“数据/用户”“+str(face\u 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()

Tags: andthe数据图像路径infoidimg
1条回答
网友
1楼 · 发布于 2024-03-29 01:22:12

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

用于保存图像。因此,您可以在循环外定义一个目录,并使用.format如下所示以获得更好的概述:

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

相关问题 更多 >