AI换发型

生活中看到别人的漂亮发型总有一点想尝试的冲动,但却没有一个值得信赖的Tony老师,今天我们使用PaddleHub进行AI换发型。

import cv2
import paddlehub as hub
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
import math
from matplotlib.path import Path

1.首先得有一张照片(以下照片均来自网络,侵删,仅供学习使用),假如这是你,首先通过PaddleHub改变获取你的脸部关键点。

src_img = cv2.imread('./fce3ef51303eb0eac3a9eb6e76e96d74.jpeg')module = hub.Module(name="face_landmark_localization")
result = module.keypoint_detection(images=[src_img])tmp_img = src_img.copy()
for index, point in enumerate(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)img0 = mpimg.imread(res_img_path)
# 展示预测68个关键点结果
plt.figure(figsize=(5,5))
plt.imshow(img0)
#plt.axis('off')
plt.show()


2.这时候你需要把脸给提取出来,这时采用判断像素点是否在0到28个关键点内的方式进行提取

def get_face(img):face_landmark= module.keypoint_detection(images=[img])[0]['data'][0]face_landmark=np.array(face_landmark[0:28])facepoint=[]img_row=img.shape[0]img_column=img.shape[1]point=np.array([[i,j] for i in range(img_row) for j in range(img_column)])pth=Path(face_landmark,closed=False)mask=pth.contains_points(point)newimage=np.zeros((img_row,img_column,3))for k in range(3):for i,j in zip(point[mask,:][:,1],point[mask,:][:,0]):newimage[i,j,k]=img[i,j,k]newimage,pos=change_size(newimage)return newimage,pos

3.同时,我们还需要把不需要的黑边给剪裁

def change_size(img):image=img[:,:,0]x=image.shape[0]y=image.shape[1]edges_x=[]edges_y=[]for i in range(x):for j in range(y):if image[i][j]!=0:edges_x.append(i)edges_y.append(j)left=min(edges_x)               #左边界right=max(edges_x)              #右边界width=right-left                #宽度bottom=min(edges_y)             #底部top=max(edges_y)                #顶部height=top-bottom               #高度pre1_picture=img[left:left+width,bottom:bottom+height]        #图片截取return pre1_picture,(left,bottom,width,height)

结果如下图所示

img1,pos1=get_face(src_img)
plt.figure(figsize=(5,5))
plt.imshow(img1)
plt.axis('off')
plt.show()


4.哎,这时候你发现了一个小姐姐有一头漂亮的发型,你想试试适不适合你

src_img2 = cv2.imread('./47089df3fbe255f3206081ed16c86567.jpeg')module = hub.Module(name="face_landmark_localization")
result = module.keypoint_detection(images=[src_img2])tmp_img = src_img2.copy()
for index, point in enumerate(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_landmark2.jpg'
cv2.imwrite(res_img_path, tmp_img)img0 = mpimg.imread(res_img_path)
# 展示预测68个关键点结果
plt.figure(figsize=(5,5))
plt.imshow(img0)
#plt.axis('off')
plt.show()

![Alt](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdmF0YXIuY3Nkbi5uZXQvNy83L0IvMV9yYWxm5.进行同样的提取操作,主要目的是获得脸型大小及位置

img2,pos2=get_face(src_img2)
plt.figure(figsize=(5,5))
plt.imshow(img2)
plt.axis('off')
plt.show()


6.对你的脸型大小进行变形

img1=cv2.resize(img1,(img2.shape[1],img2.shape[0]))
plt.figure(figsize=(5,5))
plt.imshow(img1)
plt.axis('off')
plt.show()


7.进行换脸操作

def tranplant(img1,img2,pos):img2_copy=img2.copy()margin=[]for i1,i2 in enumerate(range(pos[0],pos[0]+pos[2])):for j1,j2 in enumerate(range(pos[1],pos[1]+pos[3])):if img1[i1,j1,0]==0:passelse:img2_copy[i2,j2]=img1[i1,j1]return img2_copy,np.array(margin)

结果如下,虽然还是有很多瑕疵,但大概还是可以看出该发型是否适合你

img3,margin=tranplant(img1,src_img2,pos2)
res_img_path = 'tran.jpg'
cv2.imwrite(res_img_path,img3)
img4 = mpimg.imread(res_img_path)
# 展示预测68个关键点结果
plt.figure(figsize=(5,5))
plt.imshow(img4)
#plt.axis('off')
plt.show()


感谢百度飞桨提供的学习平台以及优质的教学课程,为初学小白提供了深度学习的入门与学习方法,该项目还有很大的优化空间。

PaddleHub创意项目-AI换发型相关推荐

  1. PaddleHub创意项目-制作证件照(抠图换底美颜)

    PaddleHub创意项目-制作证件照(抠图换底美颜) 经过三个星期的百度架构师手把手带你零基础实践深度学习,对paddle有了一定了解,现在利用PaddleHub实践一个对图像进行抠图换底加美颜的小 ...

  2. AI让照片换发型,Barbershop开源项目安装使用 | 机器学习

    目录 前言 环境部署 1.导入environment/environment.yaml环境 2.安装pytorch 3.依赖库安装 4. cl.exe环境变量配置 5.模型下载 6.发型数据下载 7. ...

  3. (记录)PaddleHub创意赛:AI人像抠图及图像合成

    文章目录 PaddleHub创意赛:AI人像抠图及图像合成 一.安装环境(这里面有几个坑) 二.接下来就``开始P图 1. 引入包 2. 加载预训练模型(挺厉害的不得不说) 3. 图像合成 Paddl ...

  4. 好玩的AI创意项目大放送,快来pick你心中的第一吧!

    点击左上方蓝字关注我们 谁说程序员的世界只有黑白的代码,下面就带大家领略一下开发者们使用飞桨PaddlePaddle构建的有趣创意项目!喜欢不只停留在口头赞美与内心崇拜,请用你的star和fork支持 ...

  5. 【2022 CCF BDCI 文心大模型创意项目】AI一键搞定全套写文稿

    ★★★ 本文源自AI Studio社区精品项目,[点击此处]查看更多精品内容 >>> [2022 CCF BDCI 文心大模型创意项目]AI一键搞定全套写文稿加配图(文心大模型图文创 ...

  6. 换发型算法_AI拍照换发型软件下载-AI拍照换发型下载V999.999-西西软件下载

    AI拍照换发型是一款非常有意思的手机换发型应用.AI拍照换发型app可以利用AI人工智能算法通过测试您的脸蛋来给您匹配不同发型.AI拍照换发型app,网罗全球超流行热门发型,用户能够随时尝试各种各样的 ...

  7. 一键换发型软件有哪些?用AI一键换发型试想新造型吧

    想试试不同的发型,但又担心剪错或染错吗?不用担心,现在有一些应用程序可以帮助你一键换发型,让你轻松尝试不同的造型!本文将为你介绍一键换发型软件有哪些,这些软件提供了丰富多彩的发型选项和试戴功能,让你可 ...

  8. 《你最美》换发型应用项目源码

    偶然一天看到公司同事在用一款换发型的app,当时看了下,自己也在心里构思了一下,觉得实现起来没什么难度,所以就在空闲时间模仿实现这样一款应用,至于应用名字,我就不说了,避免打广告的嫌疑,这个是我自己随 ...

  9. 《你最美》换发型应用项目源代码

    偶然一天看到公司同事在用一款换发型的app,当时看了下,自己也在心里构思了一下.认为实现起来没什么难度,所以就在空暇时间模仿实现这样一款应用,至于应用名字,我就不说了,避免打广告的嫌疑.这个是我自己随 ...

最新文章

  1. 程序员眼中的电脑和空调 | 每日趣闻
  2. weibo4j中的 jar解释
  3. ST表 (模板) 洛谷3865
  4. 将一个文件夹的文件复制到另一个文件夹
  5. 笔记:企业内部因素评价
  6. SVN工作笔记001---svn删除已经上传的文件
  7. 【图像融合】简单认识图像融合
  8. 渗透小助手——几个密码收集工具
  9. 玲珑学院 1138 - 震惊,99%+的中国人都会算错的问题
  10. 明翰英语教学系列之雅思听力篇V0.2(持续更新)
  11. cors js解决js跨域问题
  12. 大数据之HBase 实战微博系统 完整使用 (第六章)
  13. 编写单片机中断程序的注意事项 成都电气开发
  14. VC++两万字总结Windows系统中的Layered分层窗口技术(附源码)
  15. Tableau实现世界GDP排名动态图
  16. InteractiveGovernor调频策略
  17. 配置FPM(FastCGI 进程管理器)
  18. iOS企业证书申请教程
  19. 考研app哪个好 考研人复习知识都在用的便签app
  20. 劈尖干涉matlab,基于Matlab的劈尖干涉仿真

热门文章

  1. docker编程:学习 docker 官方文档哪里下? -YDOOK
  2. 侧边导航html案例
  3. [转] 如何快速通过研究生学位论文的查重问题(留着,马上就能用到了)
  4. Megacli 定位磁盘
  5. 【选课脚本】用Python网页爬虫来进行选(qiang)课 (更新至v1.0.8)
  6. Bing必应地图中国API - 在地图上画圆
  7. 剑指 Offer 46. 把数字翻译成字符串(动态规划)(和青蛙跳台阶相似)
  8. 易学智能GPU服务器租用—教程指南
  9. dubbo和zookeeper的实现原理
  10. 线性插值改变图像尺寸_数码图像插值算法