查看原文
其他

新冠疫情下,毕业照怎么拍?10行Python代码搞定

不脱发的程序猿 美男子玩编程 2022-09-10

点击上方蓝色字体,关注我们



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 Imageimport 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')
运行程序,毕业照设计效果如下所示:


往期推荐


点击阅读原文,更精彩~

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存