深度学习之人脸检测实践-现有框架实现 opencv Face++

人脸检测通常是人脸识别等复杂任务的第一步操作,目前主流的人脸检测算法:https://zhuanlan.zhihu.com/p/24816781。这里主要记录一些常用的算法实践,目前只有OpenCV提供的Haar级联检测和调用Face++的人脸检测接口,后续实践后会补充,相当于做个小小的积累。

1. OpenCV的Haar级联检测:
     安装OpenCV;
     下载人脸检测模型:
              我们将使用 OpenCV 中的 Haar feature-based cascade classifiers 来检测图像中的人脸。OpenCV 提供了很多预训练的人 脸检测模型,它们以XML文件保存在 github。我们已经下载了其中一个检测模型,并且把它存储在 haarcascades 的目录中。

        检测示例:

import cv2                
import matplotlib.pyplot as plt                        
%matplotlib inline                               
 
# 提取预训练的人脸检测模型
face_cascade = cv2.CascadeClassifier('haarcascades/haarcascade_frontalface_alt.xml')
 
# 加载彩色(通道顺序为BGR)图像
img = cv2.imread('images/9f510fb30f2442a70a9add3dd143ad4bd0130295.jpg')
 
# 将BGR图像进行灰度处理
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
 
# 在图像中找出脸
faces = face_cascade.detectMultiScale(gray)
 
# 打印图像中检测到的脸的个数
print('Number of faces detected:', len(faces))
 
print(type(faces))
 
# 获取每一个所检测到的脸的识别框
for (x,y,w,h) in faces:
    # 在人脸图像中绘制出识别框
    cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    
# 将BGR图像转变为RGB图像以打印
cv_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
 
# 展示含有识别框的图像
plt.imshow(cv_rgb)
plt.show()


    输出:
     

     解释:

在使用任何一个检测模型之前,将图像转换为灰度图是常用过程。detectMultiScale 函数使用储存在 face_cascade 中的的数据,对输入的灰度图像进行分类。

在上方的代码中,faces 以 numpy 数组的形式,保存了识别到的面部信息。它其中每一行表示一个被检测到的脸,该数据包括如下四个信息:前两个元素 x、y 代表识别框左上角的 x 和 y 坐标(参照上图,注意 y 坐标的方向和我们默认的方向不同);后两个元素代表识别框在 x 和 y 轴两个方向延伸的长度 w 和 d。

Haar 级联检测是一种合适的人脸检测技术,但是通过上面例子可以看出,它的准确率不够高,我们可以使用其他算法来提高检测的准确率,可以尝试HOG(Histograms of Oriented Gradients)或一些基于深度学习的算法,如YOLO(Real-Time Object Detection algorithm)、FaceNet、MTCNN等。此外,你可以使用[imgaug]来对训练集进行增强、扩充,以增加训练集中的多样性。

二、调用Face++的人脸检测API:
  一、申请API AK:
    地址:https://www.faceplusplus.com.cn/,注册账号之后,在应用管理处添加API KEY:

调用代码:


import requests
from json import JSONDecoder
 
http_url = "https://api-cn.faceplusplus.com/facepp/v3/detect"
key = "vsrZW9RPfVDo0L9n2uXUH718YBvIJcT-"
secret = "gHiWjCD9yh0XQjI7r2SEcdY8JBn14y9v"
filepath = "images/9f510fb30f2442a70a9add3dd143ad4bd0130295.jpg"
 
data = {"api_key": key, "api_secret": secret, "return_landmark": "1"}
files = {"image_file": open(filepath, "rb")}
response = requests.post(http_url, data=data, files=files)
 
req_con = response.content.decode('utf-8')
req_dict = JSONDecoder().decode(req_con)
 
faces = req_dict['faces']
print('Number of faces detected:', len(faces))
 
faceNum = len(faces)
print("识别到了%d个人脸"%(faceNum))
 
for i in range(faceNum):
    face_rectangle = faces[i]['face_rectangle']
    width =  face_rectangle['width']
    top =  face_rectangle['top']
    left =  face_rectangle['left']
    height =  face_rectangle['height']
    start = (left, top)
    end = (left+width, top+height)
    color = (55,255,155)
    thickness = 3
    cv2.rectangle(img, start, end, color, thickness)
# 将BGR图像转变为RGB图像以打印
cv_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
 
# 展示含有识别框的图像
plt.imshow(cv_rgb)
plt.show()

输出:

转:https://blog.youkuaiyun.com/qq_34464926/article/details/81185241

### 关于OpenCV Face库 #### 安装方法 为了使用OpenCV中的`face`模块,通常需要额外安装该模块。可以通过以下方式完成: 对于基于Python环境下的安装,推荐通过pip工具获取预编译版本的contrib包,这其中包括了`cv2.face`子模块。 ```bash pip install opencv-contrib-python ``` 上述命令会自动下载并配置好所需的依赖项以及`face`模块[^1]。 #### 使用教程 在成功引入必要的软件组件之后,下面给出一段简单的例子展示如何加载一张图片并对其中的人脸执行特征点检测操作: ```python import cv2 from matplotlib import pyplot as plt # 加载灰度图象 img = cv2.imread('path_to_image', 0) # 创建EigenFace识别器对象 eigen_face_recognizer = cv2.face.EigenFaceRecognizer_create() # 假设已有训练数据... # eigen_face_recognizer.train(training_faces, labels) # 对新图像进行预测 label, confidence = eigen_face_recognizer.predict(img) print(f'Predicted Label: {label}, Confidence Score: {confidence}') plt.imshow(img, cmap='gray') plt.title('Detected Face'), plt.xticks([]), plt.yticks([]) plt.show() ``` 这段代码片段展示了基本的工作流程——创建人脸识别模型实例、训练(这里省略具体过程)、最后是对未知样本做出分类决策[^3]。 #### API文档 官方提供的API手册覆盖了几乎所有公开的方法定义及其参数说明。特别是针对`face`模块而言,开发者能够找到如下几个核心类别的描述: - `BasicFaceRecognizer`: 提供基础的脸部识别能力。 - `EigenFaceRecognizer`: 实现了经典的PCA算法来进行面部表征学习。 - `FisherFaceRecognizer`: 利用了LDA技术进一步提升区分不同个体的能力。 - `LBPHFaceRecognizer`: 局部二值模式直方图法,适合处理光照变化较大的场景。 更多细节可查阅对应版本的具体文档页面获得最权威的信息来源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值