百度AIStudio之PaddleHub创意赛:你的名字,你的Face
使用《你的名字》动漫中的图片拼出你的人脸。本项目为 PaddleHub:人脸检测主题创意赛。实现自动检测人脸,然后实现人脸拼接。
本次主要使用 PaddleHub 开源的人脸关键点检测模型 face_landmark_localization进行人体关键点识别。
关键点识别参考案例:PaddleHub实战——人像美颜。
之后再以 RGB 颜色均值为标准进行人脸拼图。
NOTE: 本项目在百度AIStudio实现,如果需要在本地运行该项目示例,首先要安装PaddleHub。
其中 face_landmark_localization 使用1.0.2版。
paddlepaddle 环境为1.6.2。
paddlehub 版本为1.6.1。
本项目github链接:luoshutu/YourNameYourFace
百度AIStudio链接:你的名字,你的face
2020-4-28更新 :基于 @意疏 的意见,添加了一些关键性注释,和参数的优化。
其中最大改动为删除了 single_image_area参数以及相关代码。
注:博客和GitHub中的代码在环境配置正确的情况下,只需添加自己的图片链接,就可以在本地直接运行成功。
一、加载图片,检测关键点
使用PaddleHub 开源的人脸关键点检测模型 face_landmark_localization ,检测人脸关键点,并将关键点以红色点状的方式画在原图上,保存并显示。
import cv2
import paddlehub as hub
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
import math
src_img = cv2.imread('single_face.jpg')
module = hub.Module(name="face_landmark_localization")
detection_result = module.keypoint_detection(images=[src_img])
tmp_img = src_img.copy()
for index, point in enumerate(detection_result[0]['data'][0]):
# cv2.putText(img, str(index), (int(point[0]), int(point[1])), cv2.FONT_HERSHEY_COMPLEX, 3, (0,0,255), -1)
cv2.circle(tmp_img, (int(point[0]), int(point[1])), 2, (0, 0, 255), -1)
res_img_path = 'face_landmark.jpg'
cv2.imwrite(res_img_path, tmp_img)
img = mpimg.imread(res_img_path)
# 展示预测68个关键点结果
plt.figure(figsize