新冠疫情下,毕业照怎么拍?10行Python代码搞定
点击上方蓝色字体,关注我们
1
项目背景
最近,不少大学生在网上哀嚎,原因是学校要他们上交照片,以便制作毕业照。
按说毕业照是需要的呀,有什么可抱怨呢?看过照片之后我就懂了。。。
虽然很搞笑,但又觉得笑声中夹杂着淡淡的忧伤.....
作为一个技术人,如何制作这样的毕业照呢?Python走起~
2
环境搭建
第1步:安装paddlepaddle。飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,集深度学习核心框架、基础模型库、端到端开发套件、工具组件和服务平台于一体,2016 年正式开源,是全面开源开放、技术领先、功能完备的产业级深度学习平台。飞桨源于产业实践,始终致力于与产业深入融合。目前飞桨已广泛应用于工业、农业、服务业等,服务 150 多万开发者,与合作伙伴一起帮助越来越多的行业完成 AI 赋能。
本项目依托于PaddlePaddle深度学习底层框架实现对照片的快速P图,这里我安装的市Window系统下Python3 CPU版本。
复制安装命令,在电脑控制台输入即可,效果如下所示:
第2步:安装deeplabv3p_xception65_humanseg模型,毕业照设计的实质是扣图,该功能主要采用PaddleHub DeepLabv3+模型(deeplabv3p_xception65_humanseg)实现,在控制台输入指令如下所示:
第3步:安装paddlehub模块。使用pip安装指令即可安装,如下所示:
pip install paddlehub
3
毕业照设计
第1步:导入PIL和paddlehub模块,PIL模块实现图像的导入、加载和保存,paddlehub模块实现图像的处理,代码如下所示:
from PIL import Image
import paddlehub as hub
第2步:加载模型明确抠图对象,这里我将文件名为:“im1.jpg”图像作为抠图对象(杰伦和昆嫂)。
代码如下所示:
# 加载模型
humanseg = hub.Module(name='deeplabv3p_xception65_humanseg')
# 抠图
results = humanseg.segmentation(data={'image':['im1.jpg']})
第3步:导入图像,开始毕业照设计,其中文件名“im2.jpg”为背景图像(清华大学校园风景),如下所示:
最后将设计的毕业照片板寸为“im3.jpg”文件,代码如下所示:
# 读取背景图片
bg = Image.open('im2.jpg')
# 读取无背景图像
im = Image.open('humanseg_output/im1.jpg').convert('RGBA')
im.thumbnail((bg.size[1], bg.size[1]))
# 分离通道
r, g, b, a = im.split()
# 将抠好的图片粘贴到背景上
bg.paste(im, (bg.size[0]-bg.size[1], 0), mask=a)
bg.save('im3.jpg')
运行程序,毕业照设计效果如下所示: