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

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

HOG人脸检测器

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

# 人脸检测:
# 输入 一张图像
# 输出:零至多张人脸图像列表import cv2
import dlibdef 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的scaleFactordetections = 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_listif __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 cv2import SB1def 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 = 0for i in range(len(list_img)):list_img_name = os.listdir(path + list_img[i])lab_n += 1for 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, labif __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 npimport 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')

调用

读取训练好的模型,进行加载,预测

# 进行人脸识别
import cv2import SB1img = 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方法训练)相关推荐

  1. 树莓派3B+ 人脸识别(OpenCV)

    树莓派3B+ 人脸识别(OpenCV) 相信大家都看了前面的OpenCV安装和人脸检测教程,已经跃跃欲试,想要进行人脸识别了,现在我们正式进入重头戏--人脸识别 的教程. 注意:该教程面向python ...

  2. 美颜sdk中,实现人脸识别的主要方法有哪些?

    美颜sdk的核心技术之一--人脸识别,其发展经过了较长时间,最终产生了一批成型的技术实现方法.接下来,小编就为大家简单介绍下这些方法. 一.Eigen Face(特征脸技术) MIT实验室的特克和潘特 ...

  3. python人脸识别理论_简述几种人脸识别的主要方法

    简述几种人脸识别的主要方法 人脸识别的方法很多,以下介绍一些主要的人脸识别方法. (1)几何特征的人脸识别方法 几何特征可以是眼.鼻.嘴等的形状和它们之间的几何关系(如相互之间的距离).这些算法识别速 ...

  4. python读取视频流做人脸识别_python实现图片,视频人脸识别(opencv版)

    图片人脸识别 import cv2 filepath = "img/xingye-1.png" img = cv2.imread(filepath) # 读取图片 gray = c ...

  5. 中艺人脸识别考勤机使用方法_人脸识别考勤机的使用方法及注意事项 - 全文

    人脸识别考勤机概要 人脸识别考勤机是一种新型的存储类考勤机,事先只需采集员工的面像,并建立档案,当员工上下班站在人脸识别考勤机的识别区域内,考勤机上就会快速的记录考勤状况并保存记录. 人脸识别考勤机是 ...

  6. 中艺人脸识别考勤机使用方法_人脸识别考勤机的使用方法及注意事项

    人脸识别考勤机概要 人脸识别考勤机是一种新型的存储类考勤机,事先只需采集员工的面像,并建立档案,当员工上下班站在人脸识别考勤机的识别区域内,考勤机上就会快速的记录考勤状况并保存记录. 人脸识别考勤机是 ...

  7. 计算机人脸识别游戏,基于人脸识别游戏登录方法、装置与计算机可读存储介质与流程...

    技术特征: 1.一种基于人脸识别游戏登录方法,其特征在于,包括: 获取安装在游戏空间内的摄像头拍摄所述游戏空间的实时图像: 对所述实时图像进行人脸识别,获取位于所述游戏空间内的用户的人脸信息,并根据所 ...

  8. Python-中北大学人工智能OpenCV人脸识别(根据图片训练数据,根据训练好的数据识别人脸)

    文章目录 1. 根据训练照片训练数据模型 2. 根据训练的数据文件,进行人脸识别 1. 根据训练照片训练数据模型 训练流程: 读取文件夹下的所有文件,使用PIL 库中的Image方法打开图片,并将其转 ...

  9. 人脸识别(二)——训练分类器

    上一篇简单整理了下人脸识别的相关基础知识,这一篇将着重介绍利用pencv(2.4.9)已有的模型进行分类器训练. 一.关于ORL人脸数据库 ORL是一个40个人,每人采取10张人脸头像构成的一个人脸数 ...

最新文章

  1. 理解离散傅立叶变换(三.复数)
  2. .NET Core 集成JWT认证
  3. WAI-ARIA对自动完成小部件的支持
  4. 专科学数控还是计算机,盘点适合专科男生学的专业 哪些专业好就业
  5. 信息学奥赛一本通(1208:2的幂次方表示)
  6. 那些用Go实现的分布式事务框架
  7. java ui设计用什么_什么是UI设计?
  8. [游戏服务器]第一章:多人聊天室-服务端
  9. app android切图工具,2018最强手机APP切图规范指南和切片要求
  10. Highlighting高亮插件使用说明
  11. 抖音网红穿的服装品牌,那些爆款女装号都是怎么拍的呢?
  12. 6-vulnhub靶场-LordOfTheRoot_1.0.1靶机内核提权udf提权缓冲区溢出提权
  13. C/C++函数注释格式
  14. 数影周报:小米汽车供应商被罚100万,1688延迟下线“1688买家旺旺”
  15. useCallback包裹函数,但是使用到的外部变量一直是最开始的值
  16. 4.28日机器人队任务
  17. Python对文件的创建和读写操作
  18. 项目管理之项目风险管理
  19. 成都买房指南:外地人看完购房心中有谱
  20. Master横扫围棋界 AI智能风暴来袭

热门文章

  1. python爬取付费音乐包有什么用_用Python制作音乐聚合下载器!付费的好像也能下载哦!...
  2. JAVA加壳保护之JarProtector的使用小记
  3. 微信公众号开发报错 返回码说明
  4. Left_Leaning RedBlack Tree
  5. 华为HYBRID的配置
  6. Netty第一次建立连接实现url鉴权
  7. 国企上班是怎样的感受?
  8. 表单重置后,日期段初始选择时间为1970年
  9. 阿里云如何去查询域名实名认证的方法?
  10. java 调用s3 ip 端口,AWS S3 接口调用