人脸检测(一)——MTCNN集成包安装使用指南

0. 引言

初衷:  
  当前已经有很多博客对MTCNN的原理分析,不过对于很多从事人脸研究(非人脸检测)的小伙伴而言,人脸检测只是一个前置步骤,并不需要了解太多,更不需要做技术上的创新,只需要效果不错的人脸检测工具箱就好。
  既然只是需要一个工具箱,自然选择尽量省事的方法,也就是不需要我们训练网络的方法。因此,本指南只面向于将人脸检测作为工具箱的小伙伴,若想进一步研究的大佬,请移步github查找MTCNN的代码。
  本文参考:https://github.com/ipazc/mtcnn

1. 安装

  1. 环境
    python >= 3.4
    opencv >= 4.1
    tensorflow >=1.12.0
conda install tensorflow-gpu
pip install opencv-python
  1. 安装
pip install mtcnn

整个安装过程就是这么简单

2. 使用

  1. 检测
    我们用Vggface数据库中的一张图片进行测试
    在这里插入图片描述
from mtcnn.mtcnn import MTCNN
import cv2

img = cv2.imread("/vggface2/test/n000001/0001_01.jpg")
detector = MTCNN()
face = detector.detect_faces(img)
print(face)
  1. 坐标输出
    运行上述指令,会得到以下结果
[{'box': [57, 71, 79, 97],
 'confidence': 0.9995273351669312, 
 'keypoints': {'left_eye': (73, 110), 
 				'right_eye': (106, 104), 
 				'nose': (89, 133), 
 				'mouth_left': (82, 147), 
 				'mouth_right': (114, 141)}}]

上述数值分别表示:
  box:[x, y, width, height],x,y是人脸框左上角坐标的位置,width是框的宽度,height是框的高度。
  cofidence:自信度
  keypoints:左/右眼,左/右嘴角,鼻子,五个关键点的坐标

  1. 可视化
    有了坐标就可以在图中绘制了
    检测的结果是一个被矩阵包围的多层字典,因此需要一层又一层把坐标信息提取出来
face = face[0]
#画框
box = face["box"]

I = cv2.rectangle(img, (box[0],box[1]),(box[0]+box[2], box[1]+box[3]), (255, 0, 0), 2)

#画关键点
left_eye = face["keypoints"]["left_eye"]
right_eye = face["keypoints"]["right_eye"]
nose = face["keypoints"]["nose"]
mouth_left = face["keypoints"]["mouth_left"]
mouth_right = face["keypoints"]["mouth_right"]

points_list = [(left_eye[0], left_eye[1]),
               (right_eye[0], right_eye[1]),
               (nose[0], nose[1]),
               (mouth_left[0], mouth_left[1]),
               (mouth_right[0], mouth_right[1])]
for point in points_list:
	cv2.circle(I, point, 1, (255, 0, 0), 4)
#保存
cv2.imwrite('result.jpg',I,[int(cv2.IMWRITE_JPEG_QUALITY),70])

效果如下:
在这里插入图片描述
当然也可以根据个人需求,不需要画出五个关键点
在这里插入图片描述

  • 7
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值