Python 将新人脸登记到人脸识别数据集中(opencv,人脸识别)

Python 将新人脸登记到人脸识别数据集中(opencv,人脸识别),python,Python,我有一个人脸识别代码(最后给出了完整的代码),可以很好地处理现有的数据集 但我希望它在请求用户输入帧中新人物的姓名后,也能在数据集中添加新面孔(注册)[如:new\u name=print(这是谁?]。这样,我就可以根据输入的名称创建一个新文件夹,并将面存储在框架内。这就是我所做的: new_name = input("Who is this?") path_2 = os.path.join('Images',new_name) os.mkdir(pa

我有一个人脸识别代码(最后给出了完整的代码),可以很好地处理现有的数据集

但我希望它在请求用户输入帧中新人物的姓名后,也能在数据集中添加新面孔(注册)[如:
new\u name=print(这是谁?
]。这样,我就可以根据输入的名称创建一个新文件夹,并将面存储在框架内。这就是我所做的:

    new_name = input("Who is this?")
    path_2 = os.path.join('Images',new_name)
    os.mkdir(path_2)
    print("Directory '% s' created" % new_name)
    for (x, y, w, h) in faces:
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0,0,255),
        thickness = 2)
        cv2.putText(frame, new_name, (x, y), cv2.FONT_HERSHEY_SIMPLEX,
        0.75, (0, 255, 0), 2)
        sub_face = frame[y:y+h, x:x+w]
        FaceFileName = new_name + str(y+x) + ".jpg"
        cv2.imwrite(os.path.join(path_2,FaceFileName),sub_face)
    cv2.imshow("Frame",frame)
    #if cv2.waitKey(1) & 0xFF == ord('q'):
    #    break
这对新人很管用。但是现在我不得不为那些不认识的人做点什么。 在这种情况下,我们已经有了一个输入名称的文件夹。我们必须按输入的名称将图像附加到现有文件夹中。 为此,我尝试了以下代码:(不起作用)

我得到一个错误:

Who is this?Vishwesh
Traceback (most recent call last):
  File "C:\Users\Vishw\databs.py", line 117, in <module>
    os.mkdir(path_2)
FileExistsError: [WinError 183] Cannot create a file when that file already exists: 'Images\\Vishwesh'
[ WARN:0] global C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-sgoydvi3\opencv\modules\videoio\src\cap_msmf.cpp (438) `anonymous-namespace'::SourceReaderCB::~SourceReaderCB terminating async callback

因此,您的问题与文件操作有关,而与人脸识别有关。。。 在尝试创建文件夹alreday之前,请尝试检查该文件夹是否存在:

path_2 = os.path.join('Images',new_name)
if not os.path.exists(path_2):
    os.mkdir(path_2)

因此,您的问题与文件操作有关,而与人脸识别有关。。。 在尝试创建文件夹alreday之前,请尝试检查该文件夹是否存在:

path_2 = os.path.join('Images',new_name)
if not os.path.exists(path_2):
    os.mkdir(path_2)

使用@Bohdan给出的想法:

else: # To store the unknown new face with name
            new_name = input("Who is this?")
            path_2 = os.path.join('Images',new_name)
            for (x, y, w, h) in faces:
                    cv2.rectangle(frame, (x, y), (x + w, y + h), (0,0,255),
                    thickness = 2)
                    cv2.putText(frame, new_name, (x, y), cv2.FONT_HERSHEY_SIMPLEX,
                    0.75, (0, 255, 0), 2)
                    sub_face = frame[y:y+h, x:x+w]
                    FaceFileName = new_name + str(y+x) + ".jpg"
            if not os.path.exists(path_2):
                os.mkdir(path_2)
                print("Directory '% s' created" % new_name)
                cv2.imwrite(os.path.join(path_2,FaceFileName),sub_face)
            # To store unrecognised faces of known people
            else:
                cv2.imwrite(os.path.join(path_2,FaceFileName),sub_face)


代码工作得非常好

使用@Bohdan给出的想法:

else: # To store the unknown new face with name
            new_name = input("Who is this?")
            path_2 = os.path.join('Images',new_name)
            for (x, y, w, h) in faces:
                    cv2.rectangle(frame, (x, y), (x + w, y + h), (0,0,255),
                    thickness = 2)
                    cv2.putText(frame, new_name, (x, y), cv2.FONT_HERSHEY_SIMPLEX,
                    0.75, (0, 255, 0), 2)
                    sub_face = frame[y:y+h, x:x+w]
                    FaceFileName = new_name + str(y+x) + ".jpg"
            if not os.path.exists(path_2):
                os.mkdir(path_2)
                print("Directory '% s' created" % new_name)
                cv2.imwrite(os.path.join(path_2,FaceFileName),sub_face)
            # To store unrecognised faces of known people
            else:
                cv2.imwrite(os.path.join(path_2,FaceFileName),sub_face)


代码工作得非常好

非常感谢@Bohdan!我的代码现在满足了期望!非常感谢@Bohdan!我的代码现在满足了期望!