当前位置: 首页 > news >正文

基于OpenCV的人脸识别:FisherFaceRecognizer算法

文章目录

    • 引言
    • 一、概述
    • 二、代码实现
      • 1. 中文文本显示函数
      • 2. 图像预处理
      • 3. 训练数据准备
      • 4. 创建和训练识别器
      • 5. 预测和结果显示
    • 三、系统效果
    • 总结

引言

在计算机视觉领域,人脸识别是一个重要且实用的研究方向。本文将介绍如何使用Python和OpenCV库构建一个简单的人脸识别系统,能够区分不同的人物并显示识别结果。

一、概述

这个系统使用OpenCV的FisherFaceRecognizer算法,通过训练少量样本图片,实现对输入图像的分类识别。系统主要功能包括:

  1. 加载训练图像并预处理
  2. 训练FisherFace识别器
  3. 对测试图像进行预测
  4. 在图像上显示中文识别结果

二、代码实现

1. 中文文本显示函数

def cv2AddChineseText(img, text, position, textColor=(0,255,0), textSize=30):"""向图片中添加中文"""if (isinstance(img, np.ndarray)):   # 判断是否OpenCV图片类型img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))  # 转换到PIL格式draw = ImageDraw.Draw(img) # 创建绘图对象fontStyle = ImageFont.truetype("simsun.ttc", textSize, encoding="utf-8")draw.text(position, text, textColor, font=fontStyle) # 绘制文本return cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR) # 转换回OpenCV格式

这个函数解决了OpenCV原生不支持中文显示的问题,通过将图像转换为PIL格式,使用PIL的文本绘制功能添加中文,再转换回OpenCV格式。

2. 图像预处理

def image_re(image):a = cv2.imread(image, 0)  # 以灰度模式读取图像a = cv2.resize(a, (120, 180))  # 统一尺寸images.append(a)

所有训练图像都会被转换为灰度图并调整到相同尺寸(120×180),这是人脸识别算法的常见预处理步骤。

3. 训练数据准备

images = []
image_re('linyuner 1.jpg')
image_re('linyuner 3.jpg')
image_re('chendulin 1.jpg')
image_re('chendulin 2.jpg')labels = [0, 0, 1, 1]  # 0代表林允儿,1代表陈都灵

这里我们准备了4张训练图片,2张林允儿(标签0),2张陈都灵(标签1)。

4. 创建和训练识别器

recognizer = cv2.face.FisherFaceRecognizer_create(threshold=5000)
recognizer.train(images, np.array(labels))

我们使用FisherFace算法创建识别器,并设置阈值为5000。FisherFace是一种基于线性判别分析(LDA)的人脸识别算法

5. 预测和结果显示

pre_image = cv2.imread('chendulin 3.jpg', 0)
pre_image = cv2.resize(pre_image, (120, 180))label, confidence = recognizer.predict(pre_image)
dic = {0: '林允儿', 1: '陈都灵', -1: '无法识别'}
print("这人是:", dic[label])
print('置信度为:', confidence)# 在图像上显示中文结果
aa = cv2AddChineseText(cv2.imread('chendulin 3.jpg').copy(), dic[label], (10, 30), textColor=(255, 0, 0))
aa = cv2.resize(aa, dsize=None, fy=0.6, fx=0.6)
cv2.imshow('xx', aa)
cv2.waitKey(0)

三、系统效果

运行程序后,系统会:

  1. 读取测试图像并进行预处理
  2. 使用训练好的模型进行预测
  3. 在控制台输出识别结果和置信度
  4. 在原图上显示中文识别结果,并缩小显示

在这里插入图片描述
在这里插入图片描述

总结

这个简单的系统展示了如何使用OpenCV实现基本的人脸识别功能。虽然只使用了少量训练样本,但已经能够完成基本的分类任务。实际应用中,我们可以:

  1. 增加更多训练样本提高准确性
  2. 使用更先进的算法如LBPH或深度学习模型
  3. 添加人脸检测步骤实现全自动识别
  4. 构建更完善的用户界面

完整代码已在上文展示,读者可以根据需要调整参数或扩展功能。希望这篇教程能帮助你入门人脸识别技术!

相关文章:

  • vue2 上传pdf,拖拽盖章,下载图片
  • 项目管理从专家到小白
  • Information Fusion期刊期刊投稿经验分享
  • Docker使用小结
  • vim的配置
  • Qt解决自定义窗口样式不生效问题
  • 【小沐学GIS】基于C++绘制二维瓦片地图2D Map(QT、OpenGL、GIS)
  • Python与YOLO:自动驾驶中的实时物体检测
  • python:ASCII-generator 实用教程
  • MySQL COUNT(*) 查询优化详解!
  • AI文本分类
  • 【Web】LACTF 2025 wp
  • STM32CUBEIDE开发实战:ADC与UART应用
  • 【从零实现JsonRpc框架#3】线程模型与性能优化
  • Python----神经网络(《Deep Residual Learning for Image Recognition》论文和ResNet网络结构)
  • AI 驱动数据库交互技术路线详解:角色、提示词工程与输入输出分析
  • 计网学习笔记———网络
  • 圆角边框 盒子阴影 文字阴影
  • 线程互斥与线程同步
  • golang-ErrGroup用法以及源码解读笔记
  • 伊朗外长称正与美国进行“善意”的会谈
  • 经济日报刊文:品牌经营不能让情怀唱“独角戏”
  • 习近平会见缅甸领导人敏昂莱
  • 47本笔记、2341场讲座,一位普通上海老人的阅读史
  • 讲座预告|全球贸易不确定情况下企业创新生态构建
  • 来论|建设性推进缅北和平进程——中国的智慧与担当