【ShuQiHere】求求你了,来学吧:小白也能懂的人脸识别教程

【ShuQiHere】

1. 人脸识别到底有多简单?

人脸识别听起来可能很复杂,但其实并不难。今天我们会带你一步步用Python和OpenCV实现一个基础的2D人脸识别程序。只要按照步骤操作,你很快就能搞定。当然,如果你对更高级的技术感兴趣,我们还可以探索3D、4D人脸识别,甚至使用深度学习模型处理动态识别。不过,打好基础最重要,从这里开始,你就已经踏出了迈向AI世界的重要一步。

2. 必备工具:准备上阵

在开始之前,我们需要准备好一些工具:

  • Python:推荐使用Python 3.x版本。
  • OpenCV:强大的图像处理工具。
  • dlib:用于人脸检测和特征点识别的库。
  • 测试图片:几张包含人脸的照片。

安装指南:在终端运行以下命令,安装所需库:

pip install opencv-python
pip install dlib

3. 注册已知人脸:教程序认人

在正式进行识别之前,我们需要先注册一些已知的人脸信息。这样,当程序遇到这些脸时,就能准确识别出来。

3.1 导入必要的库

首先,导入OpenCV、dlib和NumPy库:

import cv2  # 导入OpenCV库
import dlib  # 导入dlib库
import numpy as np  # 导入NumPy,用于数值计算

3.2 加载人脸检测器和模型

接下来,加载dlib的各类模型,包括人脸检测器、特征点检测器和识别模型。

# 加载dlib的人脸检测器
detector = dlib.get_frontal_face_detector()

# 加载dlib的人脸特征点检测器
predictor = dlib.shape_predictor('../Model/shape_predictor_68_face_landmarks.dat')

# 加载dlib的人脸识别模型
face_rec_model = dlib.face_recognition_model_v1('../Model/dlib_face_recognition_resnet_model_v1.dat')

3.3 注册已知人脸

定义一个函数来注册已知的人脸。这个函数会读取图片、检测人脸、提取特征点,并计算出128维的特征向量。

# 初始化已知人脸的特征向量和名字列表
known_face_encodings = []
known_face_names = []

# 定义一个注册人脸的函数
def register_face(image_path, name):
    image = cv2.imread(image_path)  # 读取图片
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  # 将图片转为灰度图
    faces = detector(gray)  # 检测人脸
    
    for face in faces:
        shape = predictor(gray, face)  # 提取人脸特征点
        face_encoding = np.array(face_rec_model.compute_face_descriptor(image, shape))  # 计算128D人脸特征向量
        known_face_encodings.append(face_encoding)  # 保存特征向量
        known_face_names.append(name)  # 保存名字

3.4 调用注册函数

接下来,调用这个函数来注册一些已知人脸。

# 注册已知人脸
register_face('../Images/known_face_1.jpg', 'Person 1')
register_face('../Images/known_face_2.jpg', 'Person 2')

4. 实时人脸识别:看看是谁来了

有了已知人脸信息后,我们可以用摄像头进行实时人脸识别。这个过程将实时检测并识别图像中的人脸。

4.1 打开摄像头

首先,打开摄像头捕捉视频流:

# 打开摄像头
cap = cv2.VideoCapture(0)

if not cap.isOpened():
    print("无法打开摄像头")
    exit()

4.2 实时检测与识别

进入实时检测模式,对每一帧视频进行人脸检测和识别。

while True:
    # 读取摄像头的每一帧
    ret, frame = cap.read()
    
    if not ret:
        print("无法读取帧")
        break
    
    # 将图像转换为灰度
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
    # 检测人脸
    faces = detector(gray)
    
    for face in faces:
        shape = predictor(gray, face)  # 提取人脸特征点
        face_encoding = np.array(face_rec_model.compute_face_descriptor(frame, shape))  # 计算人脸特征向量
        
        # 进行人脸匹配:看看是谁来了
        matches = [np.linalg.norm(face_encoding - known_face) for known_face in known_face_encodings]
        name = "Unknown"
        if min(matches) < 0.6:  # 如果匹配度小于0.6,则识别为已知人脸
            index = np.argmin(matches)
            name = known_face_names[index]
        
        # 获取人脸位置
        x, y, w, h = face.left(), face.top(), face.width(), face.height()
        
        # 绘制矩形框和名字
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
        cv2.putText(frame, name, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
    
    # 显示帧
    cv2.imshow('Camera', frame)
    
    # 按下 'q' 键退出循环
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

4.3 释放资源

完成识别任务后,释放摄像头资源并关闭所有窗口。

# 释放摄像头并关闭所有窗口
cap.release()
cv2.destroyAllWindows()

5. 小结:恭喜你,AI达人!

通过这次教程,你已经掌握了如何使用OpenCV和dlib进行基础的人脸识别。你现在可以注册已知人脸、加载图片、检测人脸、提取特征点,并通过摄像头实时识别人脸。接下来,试着把这些技能应用到更复杂的项目中,比如自动化门禁系统或人脸表情识别。继续学习,你会发现AI的世界比你想象中更有趣也更接近你。

你可能感兴趣的:(机器学习,人工智能,opencv)