人脸识别(opencv--LBPH方法训练)

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

一、准备数据
1.利用人脸检测方法,先将图像的人脸部分截取成图像
2.批量读取图像,制作成图像与标签对应的列表

二、开始训练
3.训练(使用opencv自带的训练方法)
4.调用

HOG人脸检测器

1.利用人脸检测方法,先将图像的人脸部分截取成图像
选用HOG的目的是为了方便而已,你完全可以使用别的方法。
代码文件名:SB1

# 人脸检测:
# 输入 一张图像
# 输出:零至多张人脸图像列表

import cv2
import dlib


def cv_show(neme, img):
    cv2.namedWindow(neme, cv2.WINDOW_NORMAL)
    cv2.imshow(neme, img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()


class d():
    def __init__(self):
        # 构造HOG人脸检测器
        self.hog_face_detetor = dlib.get_frontal_face_detector()

    def d1(self, img):
        # 检测人脸
        # scale 类似haar的scaleFactor
        detections = self.hog_face_detetor(img, 1)

        # 人脸图像列表
        img_list = []

        # 解析矩形结果
        for face in detections:
            # 根据测试 出现了一次 x是负值的情况,所以采用绝对值
            x = abs(face.left())
            y = abs(face.top())
            r = abs(face.right())
            b = abs(face.bottom())

            # 截取人脸
            img_crop = img[y:b, x:r]

            # 缩放解决冲突
            img_crop = cv2.resize(img_crop, (120, 120))

            # 绘制 人脸矩形框
            # cv2.rectangle(img, (x, y), (r, b), (0, 255, 0), 5)
            # 显示 绘制后的图像
            # cv_show('neme', img_crop)

            img_list.append(img_crop)

        return img_list


if __name__ == '__main__':
    # 读取图片
    img = cv2.imread('./images_1/Yamy/Yamy_0.jpg')
    p = d().d1(img)
    for i in p:
        print(i.shape)

批量读取图像

2.批量读取图像,制作成图像与标签对应的列表
这里是我自己手写的,没有考虑 时间复杂度与空间复杂度,你可以用其他现有的库的API,或者自己写个更好的。
文件目录结构:images_1文件夹下,存放n个文件夹,对应着n个类别,

代码文件名:SB2

# 批量读取数据
# 训练人脸识别

import os
import cv2

import SB1


def cv_show(neme, img):
    cv2.namedWindow(neme, cv2.WINDOW_NORMAL)
    cv2.imshow(neme, img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()


def r_path_name(path):
    list_img = os.listdir(path)

    # 人脸检测 创建
    p = SB1.d()

    # 人脸列表
    person = []
    # 标签列表
    lab = []

    # 标签号
    lab_n = 0

    for i in range(len(list_img)):
        list_img_name = os.listdir(path + list_img[i])

        lab_n += 1

        for j in list_img_name:
            path_n = path + list_img[i] + "/" + j

            # 读取图片
            img = cv2.imread(path_n)

            # 灰度化 训练要求使用单通道图像:
            # 转为灰度图
            img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

            # cv_show('neme', img)

            # 人脸检测
            img_ = p.d1(img)

            if len(img_) != 0:
                for img in img_:
                    # 放入人脸列表
                    person.append(img)
                    # 放入标签列表
                    lab.append(lab_n)

    # print(person)
    # print(lab)
    #
    # print(len(lab))
    # print(len(person))

    return person, lab


if __name__ == '__main__':
    path = "./images_1/"
    img, lab = r_path_name(path)
    print(len(img))
    print(len(lab))

训练

读取的图像目录名:images_1
保存模型路径与名称:./weights/LBPH1.yml
代码文件名:SB3

import cv2
import numpy as np

import SB2

# 构造分类器
face_cls = cv2.face.LBPHFaceRecognizer_create()
# cv2.face.EigenFaceRecognizer_create()
# cv2.face.FisherFaceRecognizer_create()

path = "./images_1/"
img_list, label_list = SB2.r_path_name(path)

# 训练 图像列表、标签列表、
face_cls.train(img_list, np.array(label_list))

# 保存模型
face_cls.save('./weights/LBPH1.yml')
调用

读取训练好的模型,进行加载,预测文章来源地址https://www.toymoban.com/news/detail-446647.html

# 进行人脸识别
import cv2

import SB1

img = cv2.imread('./images_1/Angelababy/a1.jpg')
# 转为灰度图
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 调用模型
new_cls = cv2.face.LBPHFaceRecognizer_create()
new_cls.read('./weights/LBPH1.yml')

# 人脸检测
img_list = SB1.d().d1(img)

if len(img_list) != 0:
    for i in img_list:
        # 预测
        predict_id, distance = new_cls.predict(img)
        # 类别
        print(predict_id)
        # 置信度 低于50最优 高于80很差
        print(distance)

# 基于LBPH的人脸识别操作原理
#
# 1、LBPH(Local Binary Pattern Histogram)将检测到的人脸分为小单元,并将其与模型中的对应单元进行比较,对每个区域的匹配值产生一个直方图。
#
# 由于这种方法的灵活性,LBPH 是唯一允许模型样本人脸和检测到的人脸在形状、大小上可以不同的人脸识别算法。
#
# 2、调整后的区域中调用 predict()函数
#
# predict()函数返回两个元素的数组:第一个元素是所识别 个体的标签,第二个是置信度评分。
#
# 3、所有的算法都有一个置信度评分阈值,置信度评分用来衡量所识别人脸与原模型的差距,0 表示完全匹配。可能有时不想保留所有的识别结果,则需要进一步处理,因此可用自己的算法来估算识别的置信度评分。
#
# 4、LBPH一个好的识别参考值要低于 50 ,任何高于 80 的参考值都会被认为是低的置信度评分。

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

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

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

相关文章

  • OpenCV中LBPH人脸识别器识别人脸实战(附Python源码)

    需要源码和图片请点赞关注收藏后评论区留言私信~~~ Local Binary Pattern Histofram简称LBPH,即局部二进制模式直方图,这是一种基于局部二进制模式算法,这种算法善于捕获局部纹理特征 开发者需要通过以下三种方法来完成人脸识别操作 1:通过cv2.face.LBPHFaceRecognizer_create()方法创

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

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

    2024年02月04日
    浏览(41)
  • 【计算机视觉40例】案例29:LBPH人脸识别

    【 导读 】本文是专栏《计算机视觉 40 例简介》的第 29 个案例《 LBPH 人脸识别 》。该专栏简要介绍李立宗主编《计算机视觉 40 例——从入门到深度学习( OpenCV-Python )》一书的 40 个案例。 目前,该书已经在电子工业出版社出版,大家可以在京东、淘宝、当当等平台购买。

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

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

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

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

    2024年04月26日
    浏览(86)
  • 基于OpenCV的人脸识别和模型训练系统(万字详解)

    我们身边的人脸识别有车站检票,监控人脸,无人超市,支付宝人脸支付,上班打卡,人脸解锁手机。  人脸检测是人脸识别系统组成的关键部分之一,其目的是检测出任意给定图片中的包含的一个或多个人脸,是人脸识别、表情识别等下游任务的基础。人脸识别是通过采集

    2024年02月12日
    浏览(33)
  • 使用C++和OpenCV进行人脸识别,包含模型训练与调用过程

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

    2024年02月09日
    浏览(43)
  • OpenCV人脸识别,训练模型为cv2.face.LBPHFaceRecognizer_create()

    OpenCV内部自带有三种人脸检测方式:LBPH人脸识和其他两种方法(Eigen人脸识别,FisherFace人脸识别)本次主要说明第一种方式LBPH检测。 1.创建需要训练的图片的集文件夹,和识别功能测试图片集的文件夹。 图(1)训练图集文件夹   图(1.1)taylorswift照片(尽量选用背景没其

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

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

    2024年02月06日
    浏览(48)
  • 使用OpenCV工具包成功实现人脸检测与人脸识别,包括传统视觉和深度学习方法(附完整代码,模型下载......)

    要实现人脸识别功能,首先要进行人脸检测,判断出图片中人脸的位置,才能进行下一步的操作。 参考链接: 1、OpenCV人脸检测 2、【OpenCV-Python】32.OpenCV的人脸检测和识别——人脸检测 3、【youcans 的图像处理学习课】23. 人脸检测:Haar 级联检测器 4、OpenCV实战5:LBP级联分类器

    2024年02月08日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包