IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 计算机视觉与图像处理学习笔记之人脸识别的三种方法 -> 正文阅读

[人工智能]计算机视觉与图像处理学习笔记之人脸识别的三种方法

? ? ? ? 人脸检测是指在图像中完成人脸定位的过程,而人脸识别是在人脸检测的基础上进一步判断人的身份,OpenCV提供了三种人脸识别的方法:EigenFaces(特征脸)、FisherFaces(人鱼脸)、Local Binary Patterns Histograms,LBPH(局部二进制编码直方图)。

1、EigenFaces

EigenFaces人脸识别的基本步骤:

(1)调用cv2.face.EigenFaceRecognizer_create()方法创建EigenFaces识别器;

(2)调用识别器的train()方法以便使用已知图像训练模型;

(3)调用识别器的predict()方法以便使用未知图像进行识别,确认其身份。

用到的函数:

recognizer=cv2.face.EigenFaceRecognizer_create([num_components[,threshold]])

参数说明:recognizer为返回的EigenFaces识别器对象

? ? ? ? ? ? ? ? ??num_components为分析时的分量个数,默认为0,表示根据实际输入决定

? ? ? ? ? ? ? ? ? threshold为人脸识别时采用的阈值

recognizer.train(src, labels)

参数说明:src为用于训练的已知图像数组

? ? ? ? ? ? ? ? ? labels为标签数组,与已知图像数组中的人脸一一对应,同一个人的人脸标签应设置为相同值

label, confidence = recognizer.predict(testimg)

参数说明:testimg为未知人脸图像

? ? ? ? ? ? ? ? ? label为返回的标签值

? ? ? ? ? ? ? ? ? confidence为返回的可信度,表示未知人脸和模型中已知人脸之间的距离,0表示完全匹配,低于5000可认为是可靠的匹配结果

代码如下:

import cv2
import numpy as np
img1 = cv2.imread('xxx', 0)
img2 = cv2.imread('xxx', 0)
img3 = cv2.imread('xxx', 0)
img4 = cv2.imread('xxx', 0)
img5 = cv2.imread('xxx', 0)
img1 = cv2.resize(img1, dsize=(200, 200), interpolation=cv2.INTER_NEAREST)
img2 = cv2.resize(img2, dsize=(200, 200), interpolation=cv2.INTER_NEAREST)
img3 = cv2.resize(img3, dsize=(200, 200), interpolation=cv2.INTER_NEAREST)
img4 = cv2.resize(img4, dsize=(200, 200), interpolation=cv2.INTER_NEAREST)
img5 = cv2.resize(img5, dsize=(200, 200), interpolation=cv2.INTER_NEAREST)
# 创建训练图像数组
train_images = [img1, img2, img3, img4, img5]
# 创建标签数组,表示训练图像数组中人脸的身份
labels = np.array([1, 2, 3, 4, 5])
# 创建EigenFaces识别器
recognizer = cv2.face.EigenFaceRecognizer_create()
# 执行训练操作
recognizer.train(train_images, labels)
# 打开测试图像
testimg = cv2.imread('xxx', 0)
testimg = cv2.resize(testimg, dsize=(200, 200), interpolation=cv2.INTER_NEAREST)
# 识别人脸
label, confidence = recognizer.predict(testimg)
# 输出识别结果
print('匹配标签:', label)
print('可信度:', confidence)

?注意:读取图像时必须转换为灰度图;

? ? ? ? ? ? 所有的用于训练的已知人脸图像和用于测试的未知人脸图像的尺寸必须一致(程序中已体现这一点,可以根据自己的实际和需要设置尺寸);

? ? ? ? ? ??recognizer = cv2.face.EigenFaceRecognizer_create()函数中的face来自于OpenCV的贡献库,所以需要安装opencv-contrib-python,并且要与opencv-python的版本一致,否则程序会报错。

下面分别是用与训练图像数组完全一样和完全不一样的图片下的结果:

?2、FisherFaces

FisherFaces人脸识别的基本步骤:

(1)调用cv2.face.FisherFaceRecognizer_create()方法创建FisherFaces识别器;

(2)调用识别器的train()方法以便使用已知图像训练模型;

(3)调用识别器的predict()方法以便使用未知图像进行识别,确认其身份。

?代码与EigenFaces类似,只要将创建识别器

?recognizer=cv2.face.EigenFaceRecognizer_create()改为recognizer=cv2.face.FisherFaceRecognizer_create()即可。

3、LBPH

LBPH算法处理图像的基本原理:

? ? ? ? 取像素x周围(邻域)的8个像素与其比较,像素值比像素x大的取0,否则取1。将8个像素对应的0、1连接得到一个8为二进制数,将其转换为十进制数,作为像素x的LBP值;

? ? ? ? 对图像的所有像素按相同的方法进行处理,得到整个图像的LBP图像,该图像的直方图就是图像的LBPH。

LBPH人脸识别的基本步骤:

(1)调用cv2.face.LBPHFaceRecognizer_create()方法创建LBPH识别器;

(2)调用识别器的train()方法以便使用已知图像训练模型;

(3)调用识别器的predict()方法以便使用未知图像进行识别,确认其身份。

用到的函数:

recognizer=cv2.face.LBPHFaceRecognizer_create([,radius[,neighbors[,grid_x[,grid_y[,threshold]]]]])

参数说明:recognizer为返回的LBPH识别器对象

? ? ? ? ? ? ? ? ??radius为邻域的半径大小

? ? ? ? ? ? ? ? ? neighbors为邻域内像素点的数量,默认为8

? ? ? ? ? ? ? ? ? grid_x为将LBP图像划分为多个单元格时,水平方向上的单元格数量,默认为8

? ? ? ? ? ? ? ? ??grid_x为将LBP图像划分为多个单元格时,垂直方向上的单元格数量,默认为8

? ? ? ? ? ? ? ? ? threshold为人脸识别时采用的阈值

recognizer.train(src, labels)

参数说明:src为用于训练的已知图像数组

? ? ? ? ? ? ? ? ? labels为标签数组,与已知图像数组中的人脸一一对应,同一个人的人脸标签应设置为相同值

label, confidence = recognizer.predict(testimg)

参数说明:testimg为未知人脸图像

? ? ? ? ? ? ? ? ? label为返回的标签值

? ? ? ? ? ? ? ? ? confidence为返回的可信度,表示未知人脸和模型中已知人脸之间的距离,0表示完全匹配,低于50可认为是可靠的匹配结果

代码实现:

import cv2
import numpy as np
img1 = cv2.imread('xxx', 0)
img2 = cv2.imread('xxx', 0)
img3 = cv2.imread('xxx', 0)
img4 = cv2.imread('xxx', 0)
img5 = cv2.imread('xxx', 0)
#
img1 = cv2.resize(img1, dsize=(200, 200), interpolation=cv2.INTER_NEAREST)
img2 = cv2.resize(img2, dsize=(200, 200), interpolation=cv2.INTER_NEAREST)
img3 = cv2.resize(img3, dsize=(200, 200), interpolation=cv2.INTER_NEAREST)
img4 = cv2.resize(img4, dsize=(200, 200), interpolation=cv2.INTER_NEAREST)
img5 = cv2.resize(img5, dsize=(200, 200), interpolation=cv2.INTER_NEAREST)
# 创建训练图像数组
train_images = [img1, img2, img3, img4, img5]
# 创建标签数组,表示训练图像数组中人脸的身份
labels = np.array([1, 2, 3, 4, 5])
# 创建EigenFaces识别器
recognizer = cv2.face.LBPHFaceRecognizer_create()
# 执行训练操作
recognizer.train(train_images, labels)
# 打开测试图像
testimg = cv2.imread('xxx', 0)
testimg = cv2.resize(testimg, dsize=(200, 200), interpolation=cv2.INTER_NEAREST)
# 识别人脸
label, confidence = recognizer.predict(testimg)
# 输出识别结果
print('匹配标签:', label)
print('可信度:', confidence)

?

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-11-24 07:56:48  更:2021-11-24 07:57:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 4:21:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码