【深度学习】OpenCV 人脸识别实战:LBPH 算法实现简单人脸识别 文章目录完整代码一览导入库与安装说明准备训练数据图像和标签创建 LBPH 识别器训练模型预测识别新图像输出结果完整代码一览import cv2 import numpy as np # 提前训练的人脸照片灰度图 images[]images.append(cv2.imread(pyy1.png,cv2.IMREAD_GRAYSCALE))images.append(cv2.imread(pyy2.png,cv2.IMREAD_GRAYSCALE))images.append(cv2.imread(qzl1.png,cv2.IMREAD_GRAYSCALE))images.append(cv2.imread(qzl2.png,cv2.IMREAD_GRAYSCALE))labels[0,0,1,1]dic{0:pyy,1:qzl,-1:无法识别}predict_imagecv2.imread(pyy.png,cv2.IMREAD_GRAYSCALE)# 待识别人脸 # 创建 LBPH 识别器设置阈值 recognizercv2.face.LBPHFaceRecognizer_create(threshold80)# 训练模型 recognizer.train(images,np.array(labels))# 预测 label,confidencerecognizer.predict(predict_image)print(这人是,dic[label])print(置信度,confidence)导入库与安装说明import cv2 import numpy as npcv2.face.LBPHFaceRecognizer_create 属于 OpenCV 的 contrib 扩展模块。如果你安装的是标准版 opencv-python会报错 module ‘cv2’ has no attribute ‘face’。请使用以下命令安装bashpip install opencv-contrib-python如果已经安装了标准版需要先卸载再安装 contrib 版。准备训练数据图像和标签python images[]images.append(cv2.imread(pyy1.png,cv2.IMREAD_GRAYSCALE))images.append(cv2.imread(pyy2.png,cv2.IMREAD_GRAYSCALE))images.append(cv2.imread(qzl1.png,cv2.IMREAD_GRAYSCALE))images.append(cv2.imread(qzl2.png,cv2.IMREAD_GRAYSCALE))labels[0,0,1,1]dic{0:pyy,1:qzl,-1:无法识别}我们准备了 4 张人脸图像分别是 pyy1.png、pyy2.pngqzl1.png、qzl2.png。labels 是对应的数字标签0 代表 pyy1 代表 qzl。dic 是一个字典用于将数字标签映射回人名方便打印。-1 是识别器返回的“无法识别”标签。注意这些图片应该是已经裁剪好的人脸图像只含脸部区域尺寸可以不一致LBPH 会内部处理。实际项目中你需要先用人脸检测器裁剪出人脸。创建 LBPH 识别器recognizercv2.face.LBPHFaceRecognizer_create(threshold80)cv2.face.LBPHFaceRecognizer_create() 创建一个 LBPH 识别器对象。threshold80这是识别阈值。当识别器预测时如果计算出的置信度距离大于这个值则认为“不认识”返回标签 -1。阈值越小识别越严格但容易误拒阈值越大容忍度越高但可能把陌生人认成熟人。80 是常用值你可以根据实际情况调整。训练模型recognizer.train(images,np.array(labels))train() 方法接受两个参数images训练图像列表灰度图。labels对应的标签数组NumPy 格式。训练过程会计算每张图像的 LBPH 特征直方图并存储起来供后续识别时比对。预测识别新图像predict_imagecv2.imread(pyy.png,cv2.IMREAD_GRAYSCALE)label,confidencerecognizer.predict(predict_image)predict() 接受一张待识别的灰度图像返回两个值label识别出的标签如果置信度超过阈值则返回 -1。confidence置信度评分数值越小表示匹配度越高距离越近。一般小于 50 表示比较可信50~80 可能勉强超过阈值则视为不认识。输出结果print(这人是,dic[label])print(置信度,confidence)通过字典映射标签到人名如果标签是 -1则显示“无法识别”。运行结果这人是 qzl 置信度77.59353695603815