人脸识别-对数据的训练

感谢优秀的你打开了小白的文章

希望在看文章的你今天又进步了一点点,离美好生活更近一步!

灰度转换人脸识别基础-灰度转换与修改图片尺寸_am_student的博客-CSDN博客

矩形圆形的绘制

人脸识别-矩形圆形的绘制_am_student的博客-CSDN博客
Hrr级联人脸识别-Haar级联_am_student的博客-CSDN博客
多张人脸检测

人脸识别-多张人脸检测_am_student的博客-CSDN博客

目录

前言:

代码展示

 相关解释

 得到结果:

前言:

人脸检测是 OpenCV 重要的一个功能,它是人脸识别的基础。人脸识别其实就是一个程序能识别给定图像或视频中的人脸。实现这一目标的方法之一是用一系列分好类的图像来“训练”程序,并基于这些图像来进行识别。 这就是 OpenCV 及其人脸识别模块进行人脸识别的过程。 人脸识别模块的另外一个重要特征是:每个识别都具有转置信(confidence)评分,因此可在实际应用中通过对其设置阈值来进行筛选。

有了数据,需要将这些样本图像加载到人脸识别算法中。所有的人脸识别算法在它们的 train()函数中都有两个参数:图像数组和标签数组。这些标签表示进行识别时候某人人脸的 ID,因此根据 ID 可以知道被识别的人是谁。要做到这一点,将在「trainer/」目录中保存为.yml 文件。

代码展示

import os
import cv2
import sys
from PIL import Image
import numpy as np
def getImageAndLabels(path):
    facesSamples=[]
    ids=[]
    imagePaths=[os.path.join(path,f) for f in os.listdir(path)]
    #检测人脸
    face_detector = cv2.CascadeClassifier(
        'C:/Users/ZXY13/Desktop/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')

    #遍历列表中的图片
    for imagePath in imagePaths:
        #打开图片
        PIL_img=Image.open(imagePath).convert('L')
        #将图像转换为数组
        img_numpy=np.array(PIL_img,'uint8')
        faces = face_detector.detectMultiScale(img_numpy)
        #获取每张图片的id
        id=int(os.path.split(imagePath)[1].split('.')[0])
        for x,y,w,h in faces:
            facesSamples.append(img_numpy[y:y+h,x:x+w])
            ids.append(id)
    return facesSamples,ids

if __name__ == '__main__':
    #图片路径
    path='./data/jm/'
    #获取图像数组和id标签数组
    faces,ids=getImageAndLabels(path)
    #获取训练对象
    recognizer=cv2.face.LBPHFaceRecognizer_create()
    recognizer.train(faces,np.array(ids))
    #保存文件
    recognizer.write('trainer/trainer.yml')

注:data文件可从链接中获取:

https://pan.baidu.com/s/1PSZIooRVKdv9AvB4b-ddFQ 
提取码:6666

 相关解释

os.listdir(path):为了获取该路径的所有文件。

 img_numpy=np.array(PIL_img,'uint8'):将图像转化为数组。

 faces = face_detector.detectMultiScale(img_numpy):获取到人脸的数据。

    recognizer=cv2.face.LBPHFaceRecognizer_create()
    recognizer.train(faces,np.array(ids)):调用train进行训练获取的是图像数组和id标签数组。

 得到结果:

 可以关注公众号获取本项目具体代码,欢迎关注,一起学习!

 

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
本文将介绍如何使用OpenCV进行人脸识别模型的训练。 1. 收集人脸数据 首先需要准备一些标记了人脸的图像,可以通过人工标注或使用自动化工具来收集。要求每个人的数据独立,没有与其他人的数据交叠。对于每个人,建议至少收集15张标记了人脸的图像。 2. 准备数据集 将数据集按照以下格式进行组织: ``` data/ person1/ image1.jpg image2.jpg ... person2/ image1.jpg image2.jpg ... ... ``` 3. 训练模型 使用OpenCV中的 `cv2.face.LBPHFaceRecognizer_create()` 函数进行模型的训练。此函数需要接收两个参数,打开数据集后,第一个是训练图像列表,第二个是标记列表。 一旦模型训练完成,可以将它保存下来以备后续使用。 以下是示例代码: ```python import cv2 import os # 准备数据集 data_dir = "data" labels = [] images = [] for subdir in os.listdir(data_dir): subdir_path = os.path.join(data_dir, subdir) if os.path.isdir(subdir_path): label = int(subdir[1:]) for filename in os.listdir(subdir_path): image_path = os.path.join(subdir_path, filename) image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE) images.append(image) labels.append(label) # 训练模型 face_recognizer = cv2.face.LBPHFaceRecognizer_create() face_recognizer.train(images, labels) # 保存模型 model_file = "face_recognizer.yml" face_recognizer.write(model_file) print("Model Trained") ``` 以上代码将在 `data` 目录中查找子目录 `person1`, `person2` 等人的图像。`cv2.imread()` 函数读取图像并将其添加到图像列表中,同时将标签添加到相应的标签列表中。然后通过 `cv2.face.LBPHFaceRecognizer_create()` 函数来创建一个人脸识别器,并调用 `train()` 函数以训练识别器。最后,使用 `write()` 函数将模型保存到文件中。 4. 使用模型 训练完成后,可以使用以下代码来使用模型: ```python import cv2 # 加载模型 model_file = "face_recognizer.yml" face_recognizer = cv2.face.LBPHFaceRecognizer_create() face_recognizer.read(model_file) # 读取图像并进行人脸识别 image = cv2.imread("test_image.jpg", cv2.IMREAD_GRAYSCALE) label = face_recognizer.predict(image)[0] ``` 使用 `cv2.face.LBPHFaceRecognizer_create()` 函数加载模型,然后再使用 `read()` 函数加载已保存的模型。要对新图像进行预测,读取图像并使用 `predict()` 函数进行预测。该函数将返回一个元组 (label, confidence) ,其中 label 是预测的标签,confidence 是模型的置信度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进步小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值