python 实现显著性检测_【人脸】人脸检测与对齐python实现

v2-3880b569d2d018772a0d873113e587f1_1440w.jpg?source=172ae18b

最近在实现Pairwise Relational Networks for Face Recognition论文,预处理人脸时发现资料没那么好找,现整理成jupyter文档方便回顾。预处理的总体流程:

  • 人脸关键点检测
  • 根据眼部关键点旋转图片做人脸对齐
  • 旋转人脸关键点,使其与对齐后的图片匹配
  • 根据关键点裁剪人脸到固定尺寸(此步骤和PRN论文略有不同)
  • 变换人脸关键点,使其与裁剪后的图片匹配

1 Imports

import 

2 导入图片

img_name 

v2-6f140517d67f696d8f670ce6b519cf3b_b.jpg

3 人脸检测

使用face_recognition api检测人脸的关键点, model=”large”时返回68个关键点, model=”small”时返回5个关键点。

face_landmarks_list 

定义人脸关键点可视化函数

def 

可视化人脸关键点

visualize_landmark

v2-128f05f0be8bed3ade70327f497ae0f4_b.jpg

4 人脸对齐

4.1 人脸旋转对齐

人脸对齐思路:

  • 分别计算左、右眼中心坐标
  • 计算左右眼中心坐标连线与水平方向的夹角θ
  • 计算左右两眼整体中心坐标
  • 以左右两眼整体中心坐标为基点,将图片array逆时针旋转θ

以下定义了人脸对齐函数

def 

根据眼睛位置旋转整个图片,达到人脸对齐的目的。下图可以看出,旋转后图片(右图)中的人脸一对齐,双眼在水平方向上。align_face函数输出的eye_center, angle会在章节4.2张使用到。

aligned_face

v2-85d91dc3182e03bd92256b00cc7765b4_b.jpg

4.2 人脸关键点旋转

图片旋转后,图中的landmark坐标也要相应旋转,这样landmark才能匹配旋转后的图片。landmark旋转前的效果如下:

visualize_landmark

v2-8abc9dcc4ca4d27a2e20c03285ee9ce0_b.jpg

定义旋转图片中坐标的函数,具体公式推导见平面内直角坐标系中坐标旋转变换公式 - Eric_Wangyz的博客 - CSDN博客。另,由于图片和普通坐标系的原点不同,两者坐标点的旋转方式略有出入,图片坐标旋转涉及y坐标在图片坐标系和普通坐标系之间的变换,

def 

定义旋转图片中landmark的函数,以人脸双眼中心为基点,将每个人脸关键点逆时针旋转θ,该θ角度是人脸对齐的旋转角度。

def 

以下旋转所有人脸关键点,并可视化。

rotated_landmarks 

v2-fb502bf744fc7fd999171a064f62d52f_b.jpg

5 人脸裁剪

通常,人脸对齐后会根据landmark裁剪人脸到固定尺寸,再feed近卷积网络。此处裁剪的思路为:

  • 水平方向以最靠左和最靠右的landmark的中点为裁剪后图片的中心点
  • 垂直方向上分为三部分
    • 中部:两眼landmark中心到嘴巴landmark中心的像素距离
    • 底部和顶部:(size-两眼landmark中心到嘴巴landmark中心的距离)/2,size为输入高度

定义裁剪函数

def 

人脸裁剪后,大小变成了140 * 140。

cropped_face

v2-ed3dde296666f585756e80700c7a0466_b.png

定义landmark变换函数,由于图片裁剪,landmark坐标需要再次变换。

def 

landmark坐标变换后完美fit裁剪后的人脸。

transferred_landmarks 

v2-bb29f014718bad8c98d8ffc60bb3b3ac_b.jpg

======================= 更 新 =======================

6 人脸裁剪逻辑修改

应知友需求,修改人脸裁剪逻辑以适应不同尺寸的输入图片,调整后的人脸裁剪逻辑和PRN论文一致:

  • 垂直方向上分为三部分
    • 中部:两眼landmark中心到嘴巴landmark中心的像素距离,占垂直方向的35%
    • 底部:占垂直方向的35%
    • 顶部:占垂直方向的30%
  • 水平方向以最靠左和最靠右的landmark的中点为裁剪后图片的中心点,crop区域w=h
def 

裁剪后图片长宽相等,feed进网络前可按需resize。

v2-806ce303414e03d3002b6d835d843646_b.png

======================= 资 源 =======================

最新jupyter文件地址:

DANNALI35/zhihu_article​github.com
v2-31fbc6e39e28cdcf83f9601f9b975553_ipico.jpg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值