您的位置:首页 > 教育 > 培训 > 成都人才网_广州市建设企业网站哪家好_什么建站程序最利于seo_百度下载并安装到桌面

成都人才网_广州市建设企业网站哪家好_什么建站程序最利于seo_百度下载并安装到桌面

2025/4/3 22:08:08 来源:https://blog.csdn.net/www_pp_/article/details/146922435  浏览:    关键词:成都人才网_广州市建设企业网站哪家好_什么建站程序最利于seo_百度下载并安装到桌面
成都人才网_广州市建设企业网站哪家好_什么建站程序最利于seo_百度下载并安装到桌面

实时人脸识别系统:基于 OpenCV 和 Python 的实现

在当今数字化时代,人脸识别技术已经广泛应用于各种场景,从手机解锁到安防监控,再到智能门禁系统。今天,我将通过一个完整的代码示例,详细讲解如何使用 Python 和 OpenCV 实现一个实时人脸识别系统。这个系统不仅可以检测摄像头中的面部,还能识别出人脸的身份,并在图像上显示中文标签。

一、项目背景

人脸识别技术的核心在于能够快速、准确地识别出人脸,并将其与已知的身份进行匹配。OpenCV 是一个强大的计算机视觉库,它提供了丰富的图像处理和机器学习功能,非常适合用于实现人脸识别系统。在这个项目中,我们将结合 OpenCV 的人脸检测和识别功能,以及 Python 的灵活性,构建一个实时人脸识别系统。

二、技术栈

  • Python:一种广泛使用的高级编程语言,具有丰富的库和框架支持。
  • OpenCV:一个开源的计算机视觉库,提供了大量图像和视频处理功能。
  • Pillow:一个 Python 图像处理库,用于处理图像中的中文文本。

三、代码实现

1. 添加中文文本到图像

OpenCV 默认不支持中文字符,因此我们需要借助 Pillow 库来实现中文文本的绘制。以下是一个自定义函数 cv2AddChineseText,用于在图像上添加中文文本:

import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFontdef 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))  # 实现array到image的转换draw = ImageDraw.Draw(img)  # 在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格式

2. 准备训练数据

为了实现人脸识别,我们需要准备一些人脸图像作为训练数据。这些图像可以是同一人物的多张照片,也可以是不同人物的照片。我们将这些图像加载到一个列表中,并为每张图像分配一个标签:

def image_re(image):a = cv2.imread(image, 0)  # 以灰度模式读取图像a = cv2.resize(a, (120, 180))  # 调整图像大小images.append(a)images = []
image_re('wp1.png')  # 加载人物1的图像1
image_re('wp2.png')  # 加载人物1的图像2
image_re('zjl1.png')  # 加载人物2的图像1
image_re('zjl2.png')  # 加载人物2的图像2labels = [0, 0, 1, 1]  # 为每张图像分配标签,0表示人物1,1表示人物2

3. 训练人脸识别模型

我们将使用 OpenCV 提供的 FisherFace 人脸识别算法来训练模型。FisherFace 是一种经典的人脸识别算法,基于线性判别分析(LDA)来优化特征提取:

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

4. 实时人脸检测与识别

接下来,我们将使用 OpenCV 的 Haar 特征级联分类器来检测摄像头中的面部,并使用训练好的模型进行识别。以下是完整的代码:

# 加载人脸检测器
faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')# 打开摄像头
cap = cv2.VideoCapture(0)while True:ret, frame = cap.read()if not ret:breakgray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)faces = faceCascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))for (x, y, w, h) in faces:face = gray[y:y+h, x:x+w]  # 提取人脸区域face = cv2.resize(face, (120, 180))  # 调整人脸大小以匹配训练数据label, confidence = recognizer.predict(face)  # 使用模型进行识别dic = {0: '我', 1: '周杰伦', -1: '无法识别'}  # 创建字典,将标签映射为人物名称text = dic.get(label, '未知')  # 获取识别结果cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)  # 绘制矩形框frame = cv2AddChineseText(frame, text, (x, y-10), textColor=(255, 0, 0))  # 添加中文标签cv2.imshow('Face Recognition', frame)  # 显示结果if cv2.waitKey(1) & 0xFF == ord('q'):  # 按下 'q' 键退出breakcap.release()  # 释放摄像头资源
cv2.destroyAllWindows()  # 关闭所有窗口

四、运行效果

运行上述代码后,摄像头将打开并实时显示视频流。当检测到人脸时,程序会绘制一个矩形框,并在框上方显示识别结果(如“我”或“周杰伦”)。按下 'q' 键即可退出程序。

五、总结

通过上述代码,我们实现了一个完整的实时人脸识别系统。这个系统不仅能够检测摄像头中的面部,还能识别出人脸的身份,并在图像上显示中文标签。你可以根据自己的需求扩展这个系统,例如增加更多的人脸数据、优化识别算法或改进用户界面。

如果你对这个项目感兴趣,或者有任何问题,欢迎在评论区留言交流!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com