跳到主要内容

🚀 人脸识别:从入门到实战

欢迎来到计算机视觉的世界!OpenCV 是目前最流行的视觉库,让我们一起用 Python 赋予电脑“眼睛”吧!


🛠️ 第一步:环境搭建

在开始魔法之前,我们需要准备好法杖(Python)和咒语书(OpenCV)。

1. 安装 OpenCV

打开你的终端(Terminal/PowerShell),运行以下命令:

# 核心版:基础功能
pip install opencv-python

# 增强版:包含更多黑科技算法(如 LBPH、SIFT 等)
pip install opencv-contrib-python

2. 验证是否成功

import cv2
print(f"✅ OpenCV 版本已就绪: {cv2.__version__}")

🎨 第二步:图像处理

1. 图像“三板斧”:读、显、存

import cv2 as cv

img = cv.imread('face.jpg') # 读取图片
cv.imshow('Window', img) # 显示图片
cv.imwrite('save.png', img) # 保存图片
cv.waitKey(0) # 等待按键退出

2. 读取图片

💻 Python 代码实现

imread
imshow

📸 运行结果

读取图片效果

3. 灰度图片+保存图片

💻 Python 代码实现

cvtColor
imwrite

📸 运行结果

读取图片效果

4. 修改尺寸+2种退出

💻 Python 代码实现

resize

📸 运行结果

读取图片效果

5. 图片上添加文字水印

💻 Python 代码实现

putText(图片,水印内容,位置坐标,字体,字的大小,颜色,字的粗细)

📸 运行结果

读取图片效果

6. 图片上面画矩形和圆

💻 Python 代码实现

📸 运行结果

读取图片效果

🧠 第三步:核心算法科普

1. Haar 级联分类器 模型

(Haar Cascade) 模型 这是由 Viola-Jones 提出的经典算法。它像是一个“过滤器”,通过计算图像中不同区域的灰度差来寻找人脸特征。

  • 边缘特征:检测眼睛(比周围深)和鼻梁(比周围浅)。
  • 常用模型对比
特征库文件设计目标检测速度适用场景
haarcascade_frontalface_default.xml基础模型,通用性强较慢(级联层多)简单场景,光照均匀
haarcascade_frontalface_alt2.xml优化模型,精度平衡较快(结构优化)复杂场景,有遮挡或侧脸

2. LBPH 算法

(局部二值模式直方图)

如果说 Haar 是在找“轮廓”,LBPH 就是在找“纹理”。它将图像像素转为二进制编码,非常擅长应对光照变化。

  • 优点:简单易懂、抗光照干扰、对部分遮挡有容忍度。
  • 识别原理:通过 recognizer.predict() 返回 confidence(置信度)。
    • 注意:在 OpenCV 的 LBPH 中,数值越小代表匹配度越高
    • 通常 conf < 50 认为识别成功;conf > 80 则可能是陌生人。

3. opencv 机器视觉库

https://opencv.org/ OPENCV OPENCV OPENCV

🎬 第四步:人脸检测

1. 静态照片人脸检测

# 1. 加载分类器
face_cascade = cv.CascadeClassifier("haarcascade_frontalface_default.xml")

# 2. 识别人脸坐标
# scaleFactor: 每次图像缩小的比例
# minNeighbors: 匹配多少次才认为是真实人脸
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(35,35))

for (x, y, w, h) in faces:
cv.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)

2. 人脸检测1+函数

💻 Python 代码实现

# 照片等比例缩放 
resize(img,None,fx=0.3,fy=0.3)
# 1加载人脸特征库
face_cascade = cv.CascadeClassifier("haarcascade_frontalface_default.xml")
# 2 识别人脸坐标
faces = face_cascade.detectMultiScale(gray)

📸 运行结果

读取图片效果

3. 人脸检测2多人

💻 Python 代码实现

# 照片等比例缩放 
resize(img,None,fx=0.3,fy=0.3)
# 1加载人脸特征库
face_cascade = cv.CascadeClassifier("haarcascade_frontalface_default.xml")
# 2 识别人脸坐标
faces = face_cascade.detectMultiScale(gray)

📸 运行结果

读取图片效果

4. 视频流实时监测

视频是由一帧帧图片组成的,帧数(FPS)决定了视频的流畅度:

  • 15 FPS:老旧监控既视感。
  • 30 FPS:标准视频流。
  • 60 FPS:极度顺滑。
cap = cv.VideoCapture(0) # 打开摄像头

while cap.isOpened():
ret, frame = cap.read()
if not ret: break

# [此处可插入人脸检测代码实现实时标记]

cv.imshow('Real-time Face Detection', frame)
if cv.waitKey(1) & 0xFF == ord('q'): # 按 'q' 键退出
break

cap.release()
cv.destroyAllWindows()

💻 Python 代码实现

cv.videoCapture

📸 运行结果

读取图片效果

5. 人脸检测3视频

💻 Python 代码实现

cv.videoCapture

📸 运行结果

读取图片效果

6. 打开视频标记人脸

💻 Python 代码实现

cv.videoCapture

📸 运行结果

读取图片效果

人脸检测

🎓 第五步:人脸识别

人脸识别过程

人脸检测 想要让电脑“认识”你,需要完成以下闭环:

  1. 数据收集:准备一组图片,建立 ID(整数)与 图片数据(数组)的对应关系。
  2. 模型训练
    recognizer = cv.face.LBPHFaceRecognizer_create()
    recognizer.train(faces_array, ids_array)
    recognizer.save('trainer.yml') # 保存训练好的模型
  3. 预测识别:加载模型并使用 predict() 函数进行比对。
1 收集数据 array 只有 数字  id = int src = matlike 图片 
2 通过LBPH算法=》训练模型
3 人脸识别
https://www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html
https://docs.opencv.org/3.4/da/d60/tutorial_face_main.html
https://docs.opencv.org/4.10.0/df/d25/classcv_1_1face_1_1LBPHFaceRecognizer.html

opencv的置信度

使用场景​:
OpenCV 的 LBPHRecognizer、EigenFaceRecognizer 等传统人脸识别算法。
置信度含义​:
表示 匹配距离​(差异程度),数值越小表示匹配度越高。
例如:recognizer.predict() 返回的 conf 值。
阈值建议​:
conf < 50:通常认为匹配成功(越小越好)。
conf > 80:可能匹配失败(陌生人或低质量图像)。

📚 扩展学习

💡 调优小贴士:如果检测不到人脸,尝试调小 scaleFactor(如 1.05);如果误报太多,尝试调大 minNeighbors

📲 扫码联系
微信二维码微信咨询
关注公众号关注公众号