人脸识别操作可分为以下步骤,结合了传统方法和深度学习技术:
一、基础准备
- 安装必要库
-
Python基础库:
numpy
、opencv-python
-
深度学习库:
face_recognition
(推荐) -
其他工具:
dlib
(可选)
- 数据收集与预处理
-
收集多场景人脸图像,确保包含不同光照、角度和表情
-
数据清洗:去除噪声、调整图像大小至统一尺寸(如160x160)
-
标注(可选):为训练模型标注人脸关键点
二、人脸检测
- 传统方法(Haar级联)
- 使用OpenCV加载预训练的Haar级联分类器:
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
- 绘制人脸框并显示结果:
- 深度学习方法
-
使用预训练模型(如
dlib
的get_frontal_face_detector
)或自定义模型 -
示例代码:
三、人脸特征提取
- 传统特征
-
使用局部二值模式(LBP)、方向梯度直方图(HOG)等手工特征
-
示例代码(LBP):
- 深度学习特征
-
使用卷积神经网络(如FaceNet、ArcFace)提取128-512维特征向量
-
示例代码(使用
face_recognition
):
face_encodings = face_recognition.face_encodings(image)
```
face_encodings = face_recognition.face_encodings(image)<b class="card40_2411__sup_5321" data-sup="sup">7</b>
import numpy as np<b class="card40_2411__sup_5321" data-sup="sup">7</b>
similarity = np.dot(face_encodings, face_encodings)<b class="card40_2411__sup_5321" data-sup="sup">7</b>
cosine_similarity = 1 - np.cos(np.degrees(np.arccos(similarity)))<b class="card40_2411__sup_5321" data-sup="sup">7</b>
2. **阈值判断**
- 设定相似度阈值(如0.6),判断是否匹配 <b class="card40_2411__sup_5321" data-sup="sup">1</b>
- 示例代码: <b class="card40_2411__sup_5321" data-sup="sup">4</b>
if cosine_similarity > 0.6<b class="card40_2411__sup_5321" data-sup="sup">4</b>:
print("Match found!")<b class="card40_2411__sup_5321" data-sup="sup">6</b>
else<b class="card40_2411__sup_5321" data-sup="sup">3</b>:
print("No match.")<b class="card40_2411__sup_5321" data-sup="sup">6</b>