Opencv学习02--人脸识别技术实战:5种常用方法详解与代码实现
创作时间:
作者:
@小白创作中心
Opencv学习02--人脸识别技术实战:5种常用方法详解与代码实现
引用
CSDN
1.
https://blog.csdn.net/2401_83372039/article/details/146637519
人脸识别是计算机视觉领域的核心技术之一,广泛应用于安防、支付、社交等领域。本文将介绍五种常用的人脸检测方法,并提供基于Python和OpenCV的代码实现,帮助读者快速上手实践。
一、Haar Cascade(哈尔级联检测器)
原理简介
Haar Cascade基于Haar-like特征和Adaboost分类器,通过级联结构快速筛选出人脸区域。优点是速度快,适合实时检测。
import cv2
import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('TkAgg')
plt.rcParams['figure.dpi']=200
# 读取图片
img = cv2.imread('path_to_your_image.jpg')
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.show(block=True)
构建haar检测器以后:
# 构建haar检测器
face_detector = cv2.CascadeClassifier('path_to_haarcascade_frontalface_default.xml')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
detection = face_detector.detectMultiScale(gray, scaleFactor=1.5, minNeighbors=6, minSize=(30, 30), maxSize=(200, 200))
for (x, y, w, h) in detection:
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.show()
二、HOG(方向梯度直方图)
原理简介
HOG通过计算图像的局部梯度方向直方图来描述特征,结合线性分类器实现检测。dlib库提供了高效的HOG人脸检测器。
img = cv2.imread('path_to_your_image.jpg')
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
import dlib
hog_face_detector = dlib.get_frontal_face_detector()
detection = hog_face_detector(img, 1)
for i in detection:
start_point = (i.left(), i.top())
end_point = (i.right(), i.bottom())
cv2.rectangle(img, start_point, end_point, (255, 0, 0), 2)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.show(block=True)
三、CNN(卷积神经网络)
原理简介
基于深度学习的CNN模型(如dlib的MMOD)通过卷积层提取高级特征,检测精度更高,但计算资源消耗较大。
import dlib
cnn_face_detector = dlib.cnn_face_detection_model_v1('path_to_mmod_human_face_detector.dat')
detection = cnn_face_detector(img, 1)
for i in detection:
start_point = (i.rect.left(), i.rect.top())
end_point = (i.rect.right(), i.rect.bottom())
conf = i.confidence
print(conf)
cv2.rectangle(img, start_point, end_point, (255, 0, 0), 5)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
四、SSD(单阶段检测器)
原理简介
SSD(Single Shot MultiBox Detector)基于深度学习的端到端检测框架,兼顾速度与精度。OpenCV的DNN模块支持预训练模型。
detector = cv2.dnn.readNetFromCaffe('path_to_deploy.prototxt', 'path_to_res10_300x300_ssd_iter_140000.caffemodel')
img_height = img.shape[0]
img_width = img.shape[1]
img_resize = cv2.resize(img, (300, 300))
img_blob = cv2.dnn.blobFromImage(img_resize, 1.0, (300, 300), (104.0, 177.0, 123.0))
detector.setInput(img_blob)
detection = detector.forward()
for i in range(detection.shape[2]):
confidence = detection[0, 0, i, 2]
if confidence > 0.2:
x1 = int(detection[0, 0, i, 3] * img_width)
y1 = int(detection[0, 0, i, 4] * img_height)
x2 = int(detection[0, 0, i, 5] * img_width)
y2 = int(detection[0, 0, i, 6] * img_height)
cv2.rectangle(img, (x1, y1), (x2, y2), (255, 0, 0), 2)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.show(block=True)
五、MTCNN(多任务级联网络)
原理简介
MTCNN通过三个级联网络(P-Net、R-Net、O-Net)同时检测人脸和关键点,精度高但速度较慢。
from mtcnn.mtcnn import MTCNN
detector = MTCNN()
detection = detector.detect_faces(img)
for i in detection:
start_point = (i['box'][0], i['box'][1])
end_point = (i['box'][0]+i['box'][2], i['box'][1]+i['box'][3])
cv2.rectangle(img, start_point, end_point, (255, 0, 0), 2)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.show(block=True)
六、实时摄像头检测示例(Haar)
import cv2
cap = cv2.VideoCapture(0)
haar_face_detector = cv2.CascadeClassifier('path_to_haarcascade_frontalface_default.xml')
while True:
ret, frame = cap.read()
frame = cv2.flip(frame, 1)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = haar_face_detector.detectMultiScale(gray, 1.2, 6)
for x, y, w, h in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 3)
cv2.imshow('window', frame)
if cv2.waitKey(10) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
方法对比与选型建议
方法 | 速度 | 精度 | 适用场景 |
---|---|---|---|
Haar | ★★★★ | ★★ | 实时检测、嵌入式设备 |
HOG | ★★★ | ★★★ | 中等精度需求场景 |
CNN | ★★ | ★★★★ | 高精度静态图像检测 |
SSD | ★★★ | ★★★★ | 平衡速度与精度的场景 |
MTCNN | ★ | ★★★★★ | 需要关键点的复杂场景 |
环境配置注意事项
安装依赖库:
pip install opencv-python dlib mtcnn matplotlib tensorflow
模型文件需从官方渠道下载并正确配置路径。
实时检测需确保摄像头权限开启。
热门推荐
患有腰椎间盘突出症应如何正确坐姿
脊柱疾患科普辟谣2: 腰背痛治疗,躺着就能好?
如何在合法渠道购买商品和服务?这些购买方式有哪些法律规定?
呕吐物里有暗红色血块
梨和冰糖一起煮水有什么功效
花椒化学成分及其药理作用分析
揭秘新浪微博的技术架构:网站和手机应用使用的编程语言
使用 RAPIDS 的 Parquet 字符串数据的编码和压缩指南
白色的车牌是什么车牌?
中国研究登顶刊:经常轻断食,要小心发量!解读来了→
2025四川科技馆游玩攻略:时间、地点、交通全解析
纺织品色样确认及其常见问题解决方法
燃气热水器打不起火来怎么回事?快速排查与解决指南
海尔热水器显示F5故障码意味着什么?
果蔬怎样洗才正确?这些正确清洗方法速来get
“网络综合布线:打造高效通信基础的关键步骤”
聊聊:证券、基金账户体系和运作
痛风发病是什么原因
开个螺蛳粉店利润大吗?柳州螺蛳粉的盈利模式分析
上海大学率先试点"五学期制"改革,2025年秋季全面实施
神农架:华中屋脊上地质变迁的博物馆和物种基因库
《刺客信条:影》因破坏神社设定引发争议,育碧紧急调整游戏内容
解锁 AI 在投资领域的应用密码
命宫化忌入交友宫:影响配偶关系及改善之道
电动车回归铅酸电池:政策、安全与创新的共同推动?
不只是感冒!鼻病毒来袭,怎么办?
舌下筋脉紫黑色是血瘀吗?医生这样解释
药液密度计
汽车AC开关冬天要开吗?车主:终于知道,油耗高的原因了……
冬天开暖风到底要不要开A/C键?会不会增加油耗?