# 人脸识别
# coding=utf-8
import cv2
import numpy
from PIL import Image, ImageDraw, ImageFont
# 语音说话
import pyttsx3
engine = pyttsx3.init()
# 解决cv2.putText绘制中文乱码
def cv2ImgAddText(img2, text, left, top, textColor=(0, 0, 255), textSize=20):
if isinstance(img2, numpy.ndarray): # 判断是否OpenCV图片类型
img2 = Image.fromarray(cv2.cvtColor(img2, cv2.COLOR_BGR2RGB))
# 创建一个可以在给定图像上绘图的对象
draw = ImageDraw.Draw(img2)
# 字体的格式
fontStyle = ImageFont.truetype(r"C:\WINDOWS\FONTS\MSYH.TTC", textSize, encoding="utf-8")
# 绘制文本
draw.text((left, top), text, textColor, font=fontStyle)
# 转换回OpenCV格式
return cv2.cvtColor(numpy.asarray(img2), cv2.COLOR_RGB2BGR)
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read('FaceTrainer/trainer.yml')
cascadePath = "haarcascade_frontalface_default.xml"
faceCascade = cv2.CascadeClassifier(cascadePath)
font = cv2.FONT_HERSHEY_SIMPLEX
num = 0
names = ['用户一', '用户二', '用户三']
cam = cv2.VideoCapture(0)
minW = 0.1 * cam.get(3)
minH = 0.1 * cam.get(4)
while True:
ret, img = cam.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(
gray,
scaleFactor=1.2,
minNeighbors=5,
minSize=(int(minW), int(minH))
)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
num, confidence = recognizer.predict(gray[y:y + h, x:x + w])
if confidence < 100:
name = names[num]
# confidence = "{0}%".format(round(100 - confidence))
# confidence = format(round(100 - confidence))
else:
name = "unknown"
# confidence = "{0}%".format(round(100 - confidence))
# confidence = format(round(100 - confidence))
# 解决cv2.putText绘制中文乱码
img = cv2ImgAddText(img, name, x + 5, y - 30)
# cv2.putText(img, name, (x + 5, y - 5), font, 1, (0, 0, 255), 1) 无法显示中文
# cv2.putText(img, str(confidence.encode('utf-8')), (x+5, y+h-5), font, 1, (0, 0, 0), 1)
if name == "unknown":
engine.say('识别失败')
engine.runAndWait()
else:
engine.say(name + '用户,识别成功')
engine.runAndWait()
cv2.imshow('camera', img)
k = cv2.waitKey(5)
if k == 27:
break
cam.release()
cv2.destroyAllWindows()
《Python人脸识别实现指南》源码
需积分: 0 21 浏览量
更新于2023-10-28
收藏 129KB RAR 举报
在本资源中,我们主要探讨的是使用Python进行人脸识别的相关技术。人脸识别是一种计算机视觉技术,它允许系统通过分析和比较人脸图像来识别或验证个人身份。这项技术广泛应用于安全监控、社交媒体、移动设备解锁等多个领域。
Python是实现人脸识别的理想选择,因为有许多强大的库支持这一功能,如OpenCV、dlib和face_recognition等。以下将详细讲解这些库及其应用。
OpenCV(Open Source Computer Vision Library)是一个跨平台的计算机视觉库,提供了大量用于处理图像和视频的函数。在人脸识别方面,OpenCV内置了EigenFace、FisherFace和LBPH(Local Binary Patterns Histograms)三种算法。这些算法可以用于人脸检测和识别,首先通过Haar级联分类器检测人脸,然后提取特征并构建识别模型。
接着,dlib库由Daniel Kirkdorfer开发,它提供了一种高效的人脸关键点检测方法,即HOG(Histogram of Oriented Gradients)特征和DNN(Deep Neural Network)。这个方法能够准确地定位出人脸上的68个关键点,这对于后续的面部特征提取和识别至关重要。
face_recognition库是基于dlib的Python封装,它简化了人脸识别的过程。它不仅包含了dlib的面部检测功能,还提供了与OpenCV类似的识别算法,如基于卷积神经网络(CNN)的面部嵌入方法。用户可以轻松地通过该库加载人脸图像,检测人脸,提取特征,并进行相似性匹配。
在实际应用中,我们通常会遵循以下步骤:
1. **人脸检测**:使用OpenCV的Haar级联分类器或者dlib的HOG+DNN方法检测图像中的人脸。
2. **特征提取**:使用特定算法(如EigenFace、FisherFace、LBPH或CNN面部嵌入)从检测到的人脸区域提取特征。
3. **构建/加载模型**:根据所选算法训练识别模型,或者直接加载预训练模型。
4. **人脸匹配**:计算新图像的人脸特征向量,并与模型中的模板进行比较,以确定身份。
在压缩包"face"中,可能包含的文件有源代码、示例图像、预训练模型等,这些都是实现上述步骤的必要组成部分。通过研究这些代码,你可以深入了解如何使用Python和相关库进行人脸识别,并且可以自己动手实践,以提升在这个领域的技能。
Python人脸识别实现指南的源码为我们提供了一个学习和实践人脸识别技术的平台。通过深入理解和运用这些代码,你不仅可以掌握基础的人脸检测和识别技术,还能了解如何利用现有的开源工具解决实际问题,为你的IT事业添加一个有价值的技术栈。

先锋Coder
- 粉丝: 2214
最新资源
- 大数据时代下财务共享服务中心研究(1).docx
- 计算机网络拓扑结构获奖教案(1).doc
- 《单片机原理与应用》课程实验教学改革研究(1).docx
- HiteVision交互式电子白板培训手册(1).doc
- 浅谈“深度学习”的有效策略(1).doc
- 2014年9月份考试Java程序设计第二次作业(1).doc
- 2022年计算机兴趣小组活动总结(1).docx
- 国家开放大学电大《Windows网络操作系统管理》机考5套标准试题及答案-1(1).docx
- 项目管理知识体系暨软件项目管理探讨(1).ppt
- 2015年北京航空航天大学计算机应用技术考博参考书(1).doc
- 国家开放大学电大《电子商务概论》形考任务4试题及答案(1).docx
- 软件工程毕业设计-基于jsp的网上投稿系统设计与实现(专家审稿)(1).doc
- 《软件工程》作业及答案(1).docx
- 上海中小企业信息化需求与市场分析(1).pptx
- 河北省中小企业会计信息化实施策略研究的论文-会计研究论文(1).docx
- 如何构建网络环境下的计算机信息安全体系.(1).doc