首页 > 社交 > 科普中国

基于OpenCv的人脸识别(Python完整代码)

常驻编辑 科普中国 2022-09-11 代码   灰度   线程   控件   大盘   函数   摄像头   图像   特征   完整   方法   图片

实验环境:python 3.6 + opencv-python 3.4.14.51 建议使用 anaconda配置相同环境nEX拜客生活常识网

背景

人脸识别步骤

nEX拜客生活常识网

图1:人脸识别流程图nEX拜客生活常识网

人脸采集

采集人脸图片的方法多种多样,可以直接从网上下载数据集,可以从视频中提取图片,还可以从摄像头实时的采集图片。nEX拜客生活常识网

人脸检测方法

人脸检测在实际中主要用于人脸识别的预处理,即在图像中准确标定出人脸的位置和大小。人脸图像中包含的模式特征十分丰富,如直方图特征、颜色特征、模板特征、结构特征及Haar特征等。人脸检测就是把这其中有用的信息挑出来,并利用这些特征实现人脸检测。nEX拜客生活常识网

人脸图像预处理

对于人脸的图像预处理是基于人脸检测结果,对图像进行处理并最终服务于特征提取的过程。系统获取的原始图像由于受到各种条件的限制和随机 干扰,往往不能直接使用,必须在图像处理的早期阶段对它进行灰度校正、噪声过滤等图像预处理。对于人脸图像而言,其预处理过程主要包括人脸图像的光线补 偿、灰度变换、直方图均衡化、归一化、几何校正、滤波以及锐化等。nEX拜客生活常识网

人脸特征提取

人脸识别系统可使用的特征通常分为视觉特征、像素统计特征、人脸图像变换系数特征、人脸图像代数 特征等。人脸特征提取就是针对人脸的某些特征进行的。人脸特征提取,也称人脸表征,它是对人脸进行特征建模的过程。人脸特征提取的方法归纳起来分为两大 类:一种是基于知识的表征方法;另外一种是基于代数特征或统计学习的表征方法。nEX拜客生活常识网

匹配与识别

提取的人脸图像的特征数据与数据库中存储的特征模板进行搜索匹配,通过设定一个阈值,当相似度超过这一阈值,则把匹配得到的结果输 出。人脸识别就是将待识别的人脸特征与已得到的人脸特征模板进行比较,根据相似程度对人脸的身份信息进行判断。这一过程又分为两类:一类是确认,是一对一 进行图像比较的过程,另一类是辨认,是一对多进行图像匹配对比的过程。nEX拜客生活常识网

关于OpenCv

Opencv是一个开源的的跨平台计算机视觉库,内部实现了图像处理和计算机视觉方面的很多通用算法,对于python而言,在引用opencv库的时候需要写为import cv2。其中,cv2是opencv的C++命名空间名称,使用它来表示调用的是C++开发的opencv的接口nEX拜客生活常识网

目前人脸识别有很多较为成熟的方法,这里调用OpenCv库,而OpenCV又提供了三种人脸识别方法,分别是LBPH方法、EigenFishfaces方法、Fisherfaces方法。本文采用的是LBPH(Local Binary Patterns Histogram,局部二值模式直方图)方法。在OpenCV中,可以用函数cv2.face.LBPHFaceRecognizer_create()生成LBPH识别器实例模型,然后应用cv2.face_FaceRecognizer.train()函数完成训练,最后用cv2.face_FaceRecognizer.predict()函数完成人脸识别。nEX拜客生活常识网

CascadeClassifier,是Opencv中做人脸检测的时候的一个级联分类器。并且既可以使用Haar,也可以使用LBP特征。其中Haar特征是一种反映图像的灰度变化的,像素分模块求差值的一种特征。它分为三类:边缘特征、线性特征、中心特征和对角线特征。nEX拜客生活常识网

程序设计

人脸识别算法:

nEX拜客生活常识网

图2:人脸识别模块图nEX拜客生活常识网

1.准备工作

nEX拜客生活常识网

图3:准备阶段nEX拜客生活常识网

首先读取config文件,文件中第一行代表当前已经储存的人名个数,接下来每一行是二元组(id,name)即标签和对应的人名 读取结果存到以下两个全局变量中。nEX拜客生活常识网

id_dict = {}  # 字典里存的是id——name键值对
Total_face_num = 999  # 已经被识别有用户名的人脸个数,
复制代码

def init(): # 将config文件内的信息读入到字典中nEX拜客生活常识网

加载人脸检测分类器Haar,并准备好识别方法LBPH方法nEX拜客生活常识网

# 加载OpenCV人脸检测分类器Haar
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
# 准备好识别方法LBPH方法
recognizer = cv2.face.LBPHFaceRecognizer_create()
复制代码    

相关阅读:

  • 炉石卡组代码怎么用(炉石传说代码怎么用不了)
  • 伪代码怎么写(伪代码及其实例讲解)
  • 代码怎么写(自学代码)
  • gta5多少钱(steam免费拿GTA5代码)
  • 黑龙江在哪里(34个省代码)
  • cn是哪个国家(cn代码的含义)
  • 52哪个国家(国家代码52是哪个国家)
  • 如何看代码(代码怎么编写)
  • 如何编辑程序(计算机的代码怎么编写)
  • can什么国家(CAN是哪里的三字代码)
    • 网站地图 |
    • 声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不做权威认证,如若验证其真实性,请咨询相关权威专业人士。