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

2023-11-17

人脸检测通常是人脸识别等复杂任务的第一步操作,目前主流的人脸检测算法: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.csdn.net/qq_34464926/article/details/81185241

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习之人脸检测实践-现有框架实现 opencv Face++ 的相关文章

随机推荐

  • el-table多选框点击表格选中和取消

    div div
  • 在 Python 中使用 OpenAI 的新 Whisper API 进行语音转文本

    您是否厌倦了手动转录数小时的录音 您想节省时间并提高工作效率吗 然后 您会很高兴听到 OpenAI 用于语音到文本转换的新 Whisper API 借助这项尖端的 AI 技术 您现在可以在 Python 程序中轻松地将音频文件转换为文本 让
  • 【Transformer】Self-Attention with Relative Position Representations及实现pytorch代码

    在Transformer中加入可训练的embedding编码 使得output representation可以表征inputs的时序 位置信息 这些embedding vectors在计算输入序列中的任意两个单词i j之间的key和val
  • 深入浅出主流的几款小程序跨端框架原理

    目前 小程序在用户规模及商业化方面都取得了极大的成功 微信 支付宝 百度 字节跳动等平台的小程序日活都超过了3亿 我们在开发小程序时仍然存在诸多痛点 小程序孱弱简陋的原生开发体验 注定会出现小程序增强型框架 来提升开发者开发体验 各家厂商小
  • 全链路Python环境迁移

    全链路Python环境迁移 在当前的Python环境中 安装一些库以后 如果换了一套Python环境 难道再来一次不停的pip install 当然不是 第一步 使用pip freeze 冻结 备份当前Python库的环境 pip free
  • linux环境配置以后生效,Linux中修改环境变量及生效方法

    Linux中修改环境变量及生效方法 在 etc profile文件中添加变量 对所有用户生效 永久的 用VI在文件 etc profile文件中增加变量 该变量将会对Linux下所有用户有效 并且是 永久的 要让刚才的修改马上生效 需要执行
  • 专门为码农朋友量身打造的笔记软件-Boostnote

    感谢参考原文 http bjbsair com 2020 04 01 tech info 18432 html 前言 很多人好奇程序猿是如何记笔记的 如果有了解过可能会知道 Markdown 都知道Markdown 是一个轻量级的标记语言
  • Unity插件DlibFaceLandmarkDetector的使用心得

    Unity小白日记 1 DlibFaceLandmarkDetector Unity官方插件 在插件商店里即可找到 但是对于我这种只是用来试用一下效果的小白来说还是有点小贵 更别说还是美刀 如果如果有感兴趣的童鞋可以在CSDN查找下载 学习
  • Python:variable in function(argument、function) name should be lowercase 处理方式

    用pyCharm时 常会出现警告信息 function name should be lowercase 函数名应该是小写 字母 argument name should be lowercase 参数名应该是小写字母 variable i
  • 检查电脑显卡配置是否支持CUDA

    计算机 管理 系统工具 设备管理器 显示适配器 https developer nvidia com cuda gpus
  • SpringMVC:从入门到精通,7篇系列篇带你全面掌握--五.JSR303和拦截器

    Welcome Huihui s Code World 接下来看看由辉辉所写的关于SpringMVC的相关操作吧 目录 Welcome Huihui s Code World 一 JSR303是什么 二 使用JSR303的优势 三 使用JS
  • 台式计算机 无线接收,台式电脑无线接收器插上连不上网怎么处理

    大家好 我是时间财富网智能客服时间君 上述问题将由我为大家进行解答 台式电脑无线接收器插上连不上网的处理方方法 1 首先 您将您的无线网接收器插入到您的台式机中 2 接下来 您看看有没有反应 是否可以接收到wifi 如果没有找到 那么它需要
  • jsp 生成静态页面

    file name 文件名及文件之后的参数 最好为a jsf fileId aaaa path 文件所在的路径 相对于根目录而言的 realName文件要保存的名字 realPath文件要保存的真实路径 默认与文件所在的目录相同 publi
  • 学生正版Altium Designer许可证到期怎么再申请

    学生如何使用正版Altium Designer软件 适用于老师 学生 校友等等 目录 一 前情提要 二 许可证延期步骤 2 1 重要前提 2 2 许可证申请 2 3 申请完成 一 前情提要 如果不知道怎么安装学生版AD 可点击以下链接学生如
  • Azure简单使用教程

    这段时间在做调研 我们小组负责了解微软的Azure的情况 按照官网教程 我搭建了一遍官网示例 汽车价格预测 过程如下 一 创建模型 1 获取数据 若要进行机器学习 首先需获取数据 可以使用机器学习工作室随附的多个示例数据集 也可以从多种源导
  • 什么是稀疏数组?

    文章目录 稀疏数组 一 定义 二 代码实现 1 二维数组转稀疏数组 2 稀疏数组转二维数组 3 完整代码 总结 稀疏数组 稀疏数组一般使用在一个二维数组存储着大量无效数据的场景中 举个例子 一个二维数组存储了100个数据 有效数据只有2个
  • 【Qt】Qt中的拖放操作实现——拖放文件以及自定义拖放操作

    文章目录 Qt的拖放操作 使用拖放打开文件 自定义拖放操作 文章参考 Qt Creator快速入门 第三版 Qt的拖放操作 拖放操作分为拖动Drag和放下Drop Qt提供了强大的拖放机制 可在帮助文档中通过Drag and Drop关键字
  • IAR Embedded Workbench安装

    1 开发环境安装包 链接 https pan baidu com s 1Eatz6vyuniWRcAHd OMWcA 2 安装步骤
  • JS做图片滑动

    在界面中做一个关于图片左右滑动的效果 循环切换 可从最后一张右滑到第一张 从第一张左滑到最后一张 设置两个按钮 a href lt a a href gt a 图片 img js代码 获取id 把图片放入一个数组 设定初始函数 图片显示为数
  • 深度学习之人脸检测实践-现有框架实现 opencv Face++

    人脸检测通常是人脸识别等复杂任务的第一步操作 目前主流的人脸检测算法 https zhuanlan zhihu com p 24816781 这里主要记录一些常用的算法实践 目前只有OpenCV提供的Haar级联检测和调用Face 的人脸检