OpenCV人脸识别,训练模型为cv2.face.LBPHFaceRecognizer_create()

这篇具有很好参考价值的文章主要介绍了OpenCV人脸识别,训练模型为cv2.face.LBPHFaceRecognizer_create()。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OpenCV内部自带有三种人脸检测方式:LBPH人脸识和其他两种方法(Eigen人脸识别,FisherFace人脸识别)本次主要说明第一种方式LBPH检测。

1.素材创建

1.创建需要训练的图片的集文件夹,和识别功能测试图片集的文件夹。OpenCV人脸识别,训练模型为cv2.face.LBPHFaceRecognizer_create()

图(1)训练图集文件夹 OpenCV人脸识别,训练模型为cv2.face.LBPHFaceRecognizer_create()

 图(1.1)taylorswift照片(尽量选用背景没其他人和尺寸小的照片,不然不好打开,也可以用resize函数进行缩小)

OpenCV人脸识别,训练模型为cv2.face.LBPHFaceRecognizer_create()

 图(2)识别文件夹,一样放入需要识别的照片

2.识别过程

1.使用Haar-cascade进行训练,针对与Haar-cascade的识别原理,大家可以自行Google查询,主要说明如何使用Haar-cascade进行训练。首先创建haar_cascade实例,

haar_cascade = cv2.CascadeClassifier('haar_face.xml')  # .xml文件可从opencv官网下载

2.导入文件内容(目标图片和对应标签)

def create_train():
    # loop every folder
    for person in people:
        path = os.path.join(DIR, person)
        label = people.index(person)
        # loop every image in the folder

        for img in os.listdir(path):
            img_path = os.path.join(path, img)
            # read the image from the path

            img_array = cv2.imread(img_path)
            gary = cv2.cvtColor(img_array, cv2.COLOR_BGR2GRAY)

            faces_rect = haar_cascade.detectMultiScale(gary, scaleFactor=1.1, minNeighbors=7)
            for (x, y, w, h) in faces_rect:
                faces_roi = gary[y:y + h, x:x + w]
                features.append(faces_roi)
                labels.append(label)

文件路径名根据自己创建的文件所在路径更改

3.用函数cv2.face.LBPHFaceRecognizer_ create ( ) 生成LBPH识别器实例模型

首先创建训练实例对象

cv2.face.LBPHFaceRecognizer_ create ( radius,neighbors,grid_ x,grid_ y, threshold)四个参数均可选,通常默认不设置

face_recognizer = cv2.face.LBPHFaceRecognizer_create()

4.训练模型

face_recognizer.train(features,labels)

通常传入两个参数scr和label

scr:训练图像,用来识别的人脸图像

label:人脸图像对于的标签,名字

5.通常需要将训练好的模型进行保存

face_recognizer.save('face_trained.yml')

6.函数face_recognizer.predict( ) 对一个待测人脸图像进行判断,寻找与当前图像距离最近的人脸图像。与哪个人脸图像最近,就将当前待测图像标注为其对应的标签。该函数有两个返回值,label和confidence。

label:返回的识别结果标签。

confidence:置信度,衡量识别结果与原有模型之间的距离。在LBPH识别方式中,0表示完全匹配。通常情况下,认为小于50的值是可以接受的,如果该值大于85则认为差别较大。

以下为代码,分为训练代码和识别代码两个部分

训练代码

# face_train.py
# by liangyu 2020.7.19
# use opencv's built in face recognizer
import os
import cv2
import numpy as np

people = ['Avril Lavigne', 'Chris Martin', 'Emma Watson', 'Taylor Swift']
# p = []
# for i in os.listdir(r'E:\opencv_source'):
#     p.append(i)
# print(p)
DIR = r'E:\opencv_source'

haar_cascade = cv2.CascadeClassifier('haar_face.xml')  # .xml文件可从opencv官网下载

features = []
labels = []


def create_train():
    # loop every folder
    for person in people:
        path = os.path.join(DIR, person)
        label = people.index(person)
        # loop every image in the folder

        for img in os.listdir(path):
            img_path = os.path.join(path, img)
            # read the image from the path

            img_array = cv2.imread(img_path)
            gary = cv2.cvtColor(img_array, cv2.COLOR_BGR2GRAY)

            faces_rect = haar_cascade.detectMultiScale(gary, scaleFactor=1.1, minNeighbors=7)
            for (x, y, w, h) in faces_rect:
                faces_roi = gary[y:y + h, x:x + w]
                features.append(faces_roi)
                labels.append(label)


create_train()
# print(f'Length of the features = {len(features)}')
# print(f'Length of the features = {len(labels)}')
print('Training Done ------------------')

features = np.array(features,dtype='object')
labels = np.array(labels)

face_recognizer = cv2.face.LBPHFaceRecognizer_create()

# Train the Recognizer on the features list and the labels list
face_recognizer.train(features,labels)
# Pass two parameters: 1.scr--->the target image 2.label---->the corresponding label of the image
face_recognizer.save('face_trained.yml')
np.save('features.npy',features)
np.save('labels.npy',labels)

识别代码

# faces_recognition.py
import numpy as np
import cv2

haar_cascade = cv2.CascadeClassifier('haar_face.xml')

people = ['Avril Lavigne', 'Chris Martin', 'Emma Watson', 'Taylor Swift']
features = np.load('features.npy', allow_pickle=True)
labels = np.load('labels.npy', allow_pickle=True)

face_recognizer = cv2.face.LBPHFaceRecognizer_create()
face_recognizer.read('face_trained.yml')
img = cv2.imread(r'E:\image\verify\Chris Martin\cm3.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('Person', gray)

# Detect the face in the image
face_rect = haar_cascade.detectMultiScale(gray, 1.1, 4)
for (x, y, w, h) in face_rect:
    face_roi = gray[y:y + h, x:x + w]

    label, confidence = face_recognizer.predict(face_roi)
    # Return two values: label and confidence
    print(f'label = {people[label]} with a confidence of {confidence}')
    # confidence :'0' indicates an exact match,value less than 50 is considered acceptable
    # value greater than 85 means the difference is huge
    cv2.putText(img, str(people[label]), (10, 30), cv2.FONT_HERSHEY_COMPLEX, 0.8, (0, 255, 0), thickness=1)
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), thickness=2)
cv2.imshow('Detected Face', img)
cv2.waitKey(0)

3.识别结果展示

OpenCV人脸识别,训练模型为cv2.face.LBPHFaceRecognizer_create()

 对Coldplay主唱 Chris Martin进行识别可以看到与其相匹配且置信度为0表示完全匹配。

OpenCV人脸识别,训练模型为cv2.face.LBPHFaceRecognizer_create()

对霉霉进行识别,结果识别出来为艾玛沃特森!!置信度72表示和实际有较大的误差

4.结束语:

对于opencv内部自带的人脸检测(LBPH人脸识别)和其他两种方法(Eigen人脸识别,FisherFace人脸识别)方法大致相同,通常情况下这三种方法识别精度较低,且对噪声较为敏感,识别效果并不是十分精准,和预期还是有一定出入的。其他两种识别方法可参考这篇文章https://blog.csdn.net/weixin_43810267/article/details/106650055

Haar特征分类器介绍可以参考 (55条消息) opencv人脸检测--detectMultiScale函数_walker lee的博客-CSDN博客_detectmultiscale文章来源地址https://www.toymoban.com/news/detail-470824.html

到了这里,关于OpenCV人脸识别,训练模型为cv2.face.LBPHFaceRecognizer_create()的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用C++和OpenCV进行人脸识别,包含模型训练与调用过程

    人脸识别是计算机视觉领域的一个重要应用,可以用于安全系统、人脸解锁和人脸表情分析等方面。本教程将向您展示如何使用C++和OpenCV库实现基本的人脸识别功能。我们将分为两部分,首先是模型训练过程,然后是调用过程。 安装OpenCV和C++开发环境: 在开始之前,请确保

    2024年02月09日
    浏览(32)
  • opencv基础57-模板匹配cv2.matchTemplate()->(目标检测、图像识别、特征提取)

    OpenCV 提供了模板匹配(Template Matching)的功能,它允许你在图像中寻找特定模板(小图像)在目标图像中的匹配位置。模板匹配在计算机视觉中用于目标检测、图像识别、特征提取等领域。 以下是 OpenCV 中使用模板匹配的基本步骤: 加载图像 : 首先,加载目标图像和要匹配

    2024年02月13日
    浏览(32)
  • OpenCV人脸识别项目(训练+测试)

    图片来自网上,如果侵权,告知则删除 批量修改文件名(常见文件操作,可以学习一下) 进入正题  (一)读取图片 (二)灰度转换 (三)修改尺寸 (四)绘制矩形 (五)人脸检测 (六)检测多个人脸 (七)视频检测  (八)拍照保存 准备数据集 训练集train  注意:第

    2024年02月04日
    浏览(33)
  • 人脸识别(opencv--LBPH方法训练)

    一、准备数据 1.利用人脸检测方法,先将图像的人脸部分截取成图像 2.批量读取图像,制作成图像与标签对应的列表 二、开始训练 3.训练(使用opencv自带的训练方法) 4.调用 HOG人脸检测器 1.利用人脸检测方法,先将图像的人脸部分截取成图像 选用HOG的目的是为了方便而已,你完全

    2024年02月05日
    浏览(74)
  • opencv基础49-图像轮廓02-矩特征cv2.moments()->(形状分析、物体检测、图像识别、匹配)

    矩特征(Moments Features)是用于图像分析和模式识别的一种特征表示方法,用来描述图像的形状、几何特征和统计信息。矩特征可以用于识别图像中的对象、检测形状以及进行图像分类等任务。 矩特征通过计算图像像素的高阶矩来提取特征。这些矩可以表示图像的中心、尺度

    2024年02月13日
    浏览(30)
  • 【opencv】python实现人脸检测和识别训练

    OpenCV 中的人脸识别通常基于哈尔特征分类器(Haar Cascade Classifier)进行。以下是 OpenCV 人脸识别的基本原理: Haar Cascade Classifier : 特征分类器 :Haar 特征是一种基于矩形区域的特征,可以用于图像中的对象检测。这些特征可以表示边缘、线和区域的变化等。 级联分类器 :

    2024年01月17日
    浏览(38)
  • Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之六 简单进行人脸训练与识别

    目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之六 简单进行人脸训练与识别 一、简单介绍 二、简单进行人脸训练与识别 1、LBPH(Local Binary Patterns Histograms)算法进行人脸训练和识别 2、实现步骤: 3、判断是谁的人脸: 案例中涉及的关键函数说

    2024年04月26日
    浏览(63)
  • 报错信息:AttributeError: module ‘cv2‘ has no attribute ‘face‘

    在使用pycharm做人脸识别项目时,调用OpenCV库,也就是cv2库中的face模块时,程序报错,信息如下 face模块实际上并不是opencv库的一部分。更确切地说,face是部分的的opencv-contrib库。所以,需要安装opencv-contrib库。 方法一:可以使用cmd进行安装 方法二:如果使用的是pycharm ,也可

    2024年02月16日
    浏览(26)
  • 人脸识别 - 使用FaceNet或ArcFace在LFW数据集上训练一个人脸识别模型

    目录 介绍 LFW数据集 FaceNet模型 ArcFace模型 实现 加载数据集

    2024年02月06日
    浏览(42)
  • face_recognition人脸识别与人脸检测

    1、安装face_recognition库 face_recognition库的人脸识别是基于业内领先的C++开源库dlib中的深度学习模型,安装face_recognition库的同时会一并安装dlib深度学习框架。 2、face_recognition库的使用 1)load_image_file加载要识别的人脸图像 这个方法主要是用于加载要识别的人脸图像,返回的数据

    2024年02月13日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包