人脸识别篇---人脸对齐

安装环境

dlib

windows10安装dlib
在anaconda3下激活相应的环境

conda install -c conda-forge dlib

参考

脚本实现

from imutils.face_utils import FaceAligner
from imutils.face_utils import rect_to_bb
import argparse
import imutils
import dlib
import cv2


ap = argparse.ArgumentParser()
ap.add_argument('-p','--shape-predictor',required=True,
	help='path to the landmark predictor')
ap.add_argument('-i','--image',required=True,
	help='path to the input image')
args = vars(ap.parse_args())

detector = dlib.get_frontal_face_detector()
print(type(detector))
print(detector)
predictor = dlib.shape_predictor(args['shape_predictor'])
fa = FaceAligner(predictor, desiredFaceWidth=256)

image = cv2.imread(args['image'])
image = imutils.resize(image, width=800)
print(type(image))
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

cv2.imshow('Input', image)
# cv2.waitKey(30)
rects = detector(gray, 2)

for rect in rects:

	(x, y, w, h) = rect_to_bb(rect)
	faceOrig = imutils.resize(image[y:y+h, x:x+w], width=256)
	faceAligned = fa.align(image, gray, rect)

	cv2.imshow('Original',faceOrig)
	cv2.imshow('Aligned',faceAligned)
	cv2.waitKey(0)

运行代码

python align_faces.py -p shape_predictor_68_face_landmarks.dat -i images/1.jpg

检测器(shape_predictor_68_face_landmarks.dat)下载链接:
链接:https://pan.baidu.com/s/11Z9GTaNeTb-HbF6RPu0g4A
提取码:98rz

实现效果

在这里插入图片描述

运行问题

在这里插入图片描述
debug

Traceback (most recent call last):
  File "D:/BaiduNetdiskDownload/阶段6-人工智能项目实战/08_人脸识别项目/code/Day03/face-alignment/align_faces.py", line 35, in <module>
    faceAligned = fa.align(image, gray, rect)
  File "E:\anaconda3\envs\face\lib\site-packages\imutils\face_utils\facealigner.py", line 68, in align
    M = cv2.getRotationMatrix2D(eyesCenter, angle, scale)
TypeError: Can't parse 'center'. Sequence item with index 0 has a wrong type

考虑先实现cv2.getRotationMatrix2D(eyesCenter, angle, scale)

# -- coding: utf-8 --
import cv2
import numpy as np

img = cv2.imread('images/1.jpg')  # 读入图像,(H, W, C)
rows, cols = img.shape[:2]  # 取前两个值(H,W)
print(rows, cols)

# 第一个参数旋转中心,第二个参数旋转角度,第三个参数:缩放比例, 生成一2*3的矩阵

center = (cols / 2, rows / 2)  # 以图像中心为旋转中心
angle = 90  # 顺时针旋转90°
scale = 1  # 等比例旋转,即旋转后尺度不变

M = cv2.getRotationMatrix2D(center, angle, scale)

print(M)

'''
[[ 6.123234e-17  1.000000e+00  2.135000e+02]
 [-1.000000e+00  6.123234e-17  1.066500e+03]]
'''

以上代码能成功地运行,debug发现center需要的数据类型是float,而人脸对齐的代码报错是’center’类别的错误,于是就有个大胆的想法,将源码中涉及计算center的部分修改,将2修改成2.0
如图说示:
在这里插入图片描述
在这里插入图片描述
即可成功运行代码,就是上面实现效果的图!!!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心惠天意

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值