教你如何利用Python实现人脸识别技术,让你秒变技术大佬
人脸识别技术现在已经成为了热门话题,其应用场景也非常广泛。例如在人脸解锁、人脸支付、监控系统等领域都有非常广泛的应用。利用Python可以很容易地实现人脸识别技术,本文将介绍如何使用Python实现人脸识别系统。
一、 准备工作
在开始之前,我们需要先安装OpenCV库。OpenCV是一款计算机视觉库,它提供了许多图像处理和计算机视觉相关的函数。安装OpenCV可以通过pip命令安装:
```
pip install opencv-python
```
二、采集训练数据
首先需要采集一些人脸图片用于训练模型。通过OpenCV,可以很容易地采集人脸图像。以下是代码示例:
```python
import cv2
# 创建一个视频捕捉对象
cap = cv2.VideoCapture(0)
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
count = 0
while True:
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 检测人脸
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
# 绘制人脸矩形
cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)
# 保存人脸图片
cv2.imwrite("dataset/user." + str(count) + ".jpg", gray[y:y+h,x:x+w])
count += 1
cv2.imshow('frame', frame)
# 按下'q'键退出
if cv2.waitKey(100) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
```
该代码打开电脑自带的摄像头,并检测摄像头捕获到的人脸矩形,并且将人脸保存在本地。
三、训练模型
在采集完数据后,需要使用已有的图片训练出一个人脸识别模型。以下是代码示例:
```python
import cv2
import os
import numpy as np
# 读取训练数据
def read_images(path):
images = []
labels = []
filenames = os.listdir(path)
for filename in filenames:
if filename.startswith('.'):
continue
img_path = os.path.join(path, filename)
img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)
images.append(np.asarray(img, dtype=np.uint8))
label = int(filename.split('.')[0].replace("user", ""))
labels.append(label)
return images, labels
# 训练模型
def train():
recognizer = cv2.face.LBPHFaceRecognizer_create()
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# 读取训练数据
images, labels = read_images('dataset')
# 训练
recognizer.train(images, np.array(labels))
# 保存模型
recognizer.save('model.yml')
train()
```
该代码读取采集到的数据,使用OpenCV的LBPH人脸识别算法训练数据。最后将训练好的模型保存在本地。
四、人脸识别
在模型训练完毕后,我们可以使用OpenCV检测人脸并将其进行识别。以下是代码示例:
```python
import cv2
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read("model.yml")
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
font = cv2.FONT_HERSHEY_SIMPLEX
while True:
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 检测人脸
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
# 绘制人脸矩形
cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)
# 识别人脸
id_, confidence = recognizer.predict(gray[y:y+h,x:x+w])
if confidence > 100:
# 不匹配的人脸
id_ = "unknown"
else:
# 匹配的人脸
id_ = "user %s" % id_
cv2.putText(frame, str(id_), (x+5,y-5), font, 1, (255,255,255), 2)
cv2.imshow('frame', frame)
# 按下'q'键退出
if cv2.waitKey(100) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
```
该代码打开摄像头,并且不断检测摄像头捕获到的人脸。如果检测到人脸,则使用模型识别人脸,并在图像上显示出识别出的人脸信息。
总之,Python实现人脸识别技术非常简单易学,通过本文的介绍相信您已经掌握了基本的实现技巧,赶快将其应用于您的项目中吧!