opencv人脸识别 (二):人脸识别 (基于 LBPH)
AI技术应用于图像识别,如人脸识别 #生活知识# #科技生活# #人工智能应用#
人脸检测是 OpenCV 的一个很不错的功能, 它是人脸识别的基础。 什么是人脸识别呢?
其实就是一个程序能识别给定图像或视频中的人脸。 实现这一目标的方法之一是用一系列分好类的图像来“训练” 程序, 并基于这些图像来进行识别。这就是 OpenCV 及其人脸识别模块进行人脸识别的过程。
人脸识别模块的另外一个重要特征是: 每个识别都具有转置信(confidence) 评分, 因此可在实际应用中通过对其设置阈值来进行筛选。
人脸识别所需要的人脸可以通过两种方式来得到: 自己获得图像或从人脸数据库免费获得可用的人脸图像
训练数据
pycharm可以打开.cpm图像
import os
import cv2
import numpy as np
import sys
from PIL import Image
detector = cv2.CascadeClassifier("D:\\Anaconda3\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalface_default.xml")
def getImagesAndLabels(path):
imagePaths = [os.path.join(path,f) for f in os.listdir(path)]
faceSamples=[]
ids = []
for imagePath in imagePaths:
PIL_img = Image.open(imagePath).convert('L')
img_numpy = np.array(PIL_img,'uint8')
id = int(os.path.split(imagePath)[-1].split(".")[0])
faces = detector.detectMultiScale(img_numpy)
for x,y,w,h in faces:
faceSamples.append(img_numpy[y:y+h,x:x+w])
ids.append(id)
return faceSamples,ids
if __name__ == '__main__':
path='data/jm/'
faces, ids = getImagesAndLabels(path)
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.train(faces, np.array(ids))
recognizer.write('trainer/trainer.yml')
基于 LBPH 的人脸识别
LBPH(Local Binary Pattern Histogram) 将检测到的人脸分为小单元, 并将其与模型中的对应单元进行比较, 对每个区域的匹配值产生一个直方图。 由于这种方法的灵活性, LBPH是唯一允许模型样本人脸和检测到的人脸在形状、 大小上可以不同的人脸识别算法。
调整后的区域中调用 predict()函数, 该函数返回两个元素的数组: 第一个元素是所识别个体的标签, 第二个是置信度评分。 所有的算法都有一个置信度评分阈值, 置信度评分用来衡量所识别人脸与原模型的差距, 0 表示完全匹配。 可能有时不想保留所有的识别结果, 则需要进一步处理, 因此可用自己的算法来估算识别的置信度评分。
LBPH 一个好的识别参考值要低于 50 , 任何高于 80 的参考值都会被认为是低的置信度评分。
之前训练的数据都在trainer.yml里,
这次读取一个图片,程序会输入和训练数据的哪个最像,然后置信度评分是多少
import cv2
import numpy as np
import os
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read('trainer/trainer.yml')
faceCascade = cv2.CascadeClassifier("D:\\Anaconda3\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalface_default.xml")
font = cv2.FONT_HERSHEY_SIMPLEX
id = 0
img=cv2.imread('1.pgm')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(gray)
for(x,y,w,h) in faces:
cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)
id, confidence = recognizer.predict(gray[y:y+h,x:x+w])
print('标签id:',id,'置信评分:',confidence)
cv2.imshow('camera',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
6.pgm
这是训练用的数据集data/jm里的2.pgm,可见被识别的6.pgm和2.pgm还是属于同一个人的,只不过置信评分有些高了
1.gpm
data/jm里面就有这张照片,所以识别出来一摸一样,置信0.0
网址:opencv人脸识别 (二):人脸识别 (基于 LBPH) https://www.yuejiaxmz.com/news/view/628264
相关内容
基于人脸识别的智能服饰搭配小程序基于树莓派opencv—Python的人脸面部特征框选(眼睛和微笑)
智慧生活服务平台“FaceHM脸家”上线人脸识别
【计算机视觉】基于Python—OpenCV的手势识别详解(一)
凹凸科技(O2Micro)人脸识别软件试用
中国人脸识别第一案的警示意义
可人脸识别的电动卷帘门——快速卷帘门
人脸识别性能测试部分代码
人脸识别手机扫码速通门让你秒进写字楼
互联网与人脸识别技术生活安全的新保障 .pdf