这段代码的作用是读取指定文件夹中的图片,对其中的人脸进行检测和识别,并将识别结果存储为训练数据,用于训练分类器。

具体实现过程如下:

  1. 定义函数 ReFileName,用于读取指定路径下的所有图片,对其中的人脸进行检测和识别,并返回所有识别出的人脸。

  2. 在定义函数中,首先对指定路径下的所有文件进行遍历,判断是否是图片文件,如果是,则读取该图片并进行人脸检测和识别。

  3. 人脸检测和识别使用的是 face_detect_demo 函数,该函数接受一张图片作为输入,返回检测到的人脸及其位置信息。

  4. 如果检测到人脸,则将该人脸添加到人脸列表中,并添加相应的标签,即将杨幂的人脸标记为 0,将刘亦菲的人脸标记为 1。

  5. 最后将所有识别出的人脸和标签拼接起来,并打乱顺序,用于训练分类器。

  6. 分类器使用的是 cv2.face.LBPHFaceRecognizer_create() 函数,该函数创建一个基于局部二值模式直方图的人脸识别器,并使用训练数据对其进行训练。

  7. 训练完成后,使用 recognizer.write() 函数将训练数据保存到文件中,以便后续使用。

def ReFileName(dirPath):
    '':
    :param dirPath: 文件夹路径
    :return:
    ''
    # 对目录下的文件进行遍历
    faces=[]
    for file in os.listdir(dirPath):
        # 判断是否是文件
        if os.path.isfile(os.path.join(dirPath, file)) == True:
           c= os.path.basename(file)
           name = dirPath + '\' + c
           img = cv2.imread(name)
           # 检测脸部
           face, rect = face_detect_demo(img)
           # 我们忽略未检测到的脸部
           if face is not None:
               # 将脸添加到脸部列表并添加相应的标签
               faces.append(face)
    cv2.waitKey(1)
    cv2.destroyAllWindows()
    return faces

#杨幂照读取
dirPathyangmi = r'C:\Users\Shineion\Desktop\yangmi'#文件路径
yangmi=ReFileName(dirPathyangmi)#调用函数

labelyangmi=np.array([0 for i in range(len(yangmi))])#标签处理
#刘亦菲照读取
dirPathliuyifei = r'C:\Users\Shineion\Desktop\yangmi'#文件路径
liuyifei=ReFileName(dirPathliuyifei)#调用函数
labelliuyifei=np.array([1 for i in range(len(liuyifei))])#标签处理

#拼接并打乱数据特征和标签
x=np.concatenate((yangmi,liuyifei),axis=0)
y=np.concatenate((labelyangmi,labelliuyifei),axis=0)

index = [i for i in range(len(y))] # test_data为测试数据
np.random.seed(1)
np.random.shuffle(index) # 打乱索引
train_data = x[index]
train_label = y[index]

#分类器
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.train(train_data, train_label)
# 保存训练数据
recognizer.write('train.yml')
人脸识别训练数据生成 - Python 代码示例

原文地址: https://www.cveoy.top/t/topic/nrmG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录