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

基于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. 构建更完善的用户界面

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

http://www.xdnf.cn/news/5222.html

相关文章:

  • SolidWork-2023 鼠標工程
  • Java集合
  • Qt中的RCC
  • 如何避免在CMD中分段发送问题导致大模型多段回复的问题?
  • Day115 | 灵神 | 二叉树 | 二叉搜索树中的众数
  • Redis 哨兵
  • DIP依赖倒置原则
  • 第十课认识约数
  • 蓝牙身份证阅读器使用Uniapp调用二次开发demo
  • 逆向学习笔记(代码)
  • Linux `uptime` 指令详解与系统监控指南
  • 计算机体系结构一些笔记
  • C++中的继承与多态
  • 【Redis进阶】持久化
  • SpringMVC面试内容
  • 【无标题】I/O复用(epoll)三者区别▲
  • JS DOM操作与事件处理从入门到实践
  • 无线网络设备中AP和AC是什么?有什么区别?
  • 从零开始实现YOLOv8示例
  • 线性表-顺序表(Sequential List)
  • 【vue】vuex实现组件间数据共享 vuex模块化编码 网络请求
  • GRU网络详解
  • 解决使用宝塔Linux部署前后端分离项目遇到的问题
  • 第三章 Freertos智能小车遥控控制
  • 【Web】LACTF 2025 wp
  • 虚拟机风格
  • OpenLayers根据任意数量控制点绘制贝塞尔曲线
  • 关于甲骨文(oracle cloud)丢失MFA的解决方案
  • vim的配置
  • C++(6):逻辑运算符