5行Python代码实现一键批量扣图


Posted in Python onJune 29, 2021

今天给大家分享一款Python装逼实用神器。

在日常生活或者工作中,经常会遇到想将某张照片中的人物抠出来,然后拼接到其他图片上去。专业点的人可以使用 PhotoShop 的“魔棒”工具进行抠图,非专业人士则使用各种美图 APP 来实现,但是这两类方式毕竟处理能力有限,一次只能处理一张图片,而且比较复杂的图像可能耗时较久。那今天就来向大家展示第三种扣图方式——用 Python代码来实现 一键批量抠图。

1. 准备工作- 安装paddlepaddle

既然要装逼,准备工作是少不了的。所谓“站在巨人的肩膀上,干起活来事半功倍”,我们这里的“巨人”就是 paddlepaddle 了,中文名称叫“飞桨”,那么这个 paddlepaddle 是什么呢?

它是“源于产业实践的开源深度学习平台,致力于让深度学习技术的创新与应用更简单”,直白点就是我帮你实现了深度学习底层框架,你只要有创意就可以在我平台上运用少量简单代码轻松实现。它的官网是:https://www.paddlepaddle.org.cn/

它的安装比较简单,官网首页就有安装指引,可以通过「安装」菜单,查找到各个系统安装详细及注意事项,如下图所示,我们这里根据官网的安装指引,使用 pip 方式来安装 CPU 版本。

5行Python代码实现一键批量扣图

本文以MacOS系统为例:

我们首先执行以下命令安装(推荐使用百度源)::

python3 -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple

或者:

python3 -m pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple

从安装过程中,可以看到在安装paddlepaddle库时,需要安装如下依赖库:

Installing collected packages: pathlib, click, joblib, regex, tqdm, nltk, gast, rarfile, pyyaml, funcsigs, paddlepaddle
  Running setup.py install for pathlib ... done
  Running setup.py install for regex ... done
  Running setup.py install for nltk ... done
  Running setup.py install for rarfile ... done
  Running setup.py install for pyyaml ... done
Successfully installed click-7.1.2 funcsigs-1.0.2 gast-0.3.3 joblib-0.14.1 nltk-3.5 paddlepaddle-1.8.0 pathlib-1.0.1 pyyaml-5.3.1 rarfile-3.1 regex-2020.5.7 tqdm-4.46.0

安装成功后,我们在 python 环境中测试一下是否安装成功(这个也是按照官网指引来做),我们切换到 python 环境,运行如下代码:

➜  ~ python3
Python 3.7.4 (default, Jul  9 2019, 18:15:00)
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import paddle.fluid
>>> paddle.fluid.install_check.run_check()
Running Verify Fluid Program ...
Your Paddle Fluid works well on SINGLE GPU or CPU.
W0512 17:41:31.037240 2844976000 build_strategy.cc:170] fusion_group is not enabled for Windows/MacOS now, and only effective when running with CUDA GPU.
W0512 17:41:31.043959 2844976000 fuse_all_reduce_op_pass.cc:74] Find all_reduce operators: 2. To make the speed faster, some all_reduce ops are fused during training, after fusion, the number of all_reduce ops is 1.
Your Paddle Fluid works well on MUTIPLE GPU or CPU.
Your Paddle Fluid is installed successfully! Let's start deep Learning with Paddle Fluid now

如果能看到 Your Paddle Fluid is installed successfully 就表示安装成功了。

2. 准备工作- 安装paddlehub

要实现本文的一键批量扣图需求,需要借助PaddleHub人像分割模型来实现。

PaddleHub 是基于 PaddlePaddle 开发的预训练模型管理工具,可以借助预训练模型更便捷地开展迁移学习工作,目前的预训练模型涵盖了图像分类、目标检测、词法分析、语义模型、情感分析、视频分类、图像生成、图像分割、文本审核、关键点检测等主流模型。

PaddleHub官网:https://www.paddlepaddle.org.cn/hub

PaddleHub项目地址:https://github.com/PaddlePaddle/PaddleHub

更多PaddleHub预训练模型教程合集课程可见:https://aistudio.baidu.com/aistudio/course/introduce/1070

介绍完了项目,接下来我们开始在线安装 paddlehub :

pip install -i https://mirror.baidu.com/pypi/simple paddlehub

或者按指定版本安装:

pip install paddlehub==1.6.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

安装完成后,我们就可以开始运用了。

3. 一键扣图代码实现

我们的实现步骤很简单:

  • 导入模块
  • 加载模型
  • 获取图片文件
  • 调用模块抠图

其中扣图功能主要采用PaddleHub DeepLabv3+模型deeplabv3p_xception65_humanseg

下面我们看具体扣图代码实现(demo.py):

import os
import paddlehub as hub
 
# 加载模型
humanseg = hub.Module(name='deeplabv3p_xception65_humanseg')  
base_dir = os.path.abspath(os.path.dirname(__file__))
 
# 获取当前文件目录
path = os.path.join(base_dir, 'images/')
# 获取文件列表
files = [path + i for i in os.listdir(path)]  
print(files)
# 抠图
results = humanseg.segmentation(data={'image': files})  
for result in results:
    print(result)

示例中,我将图片放在代码文件夹的同级目录 images文件夹下,运行代码后,输出的抠图图片会自动放在代码同级目录的 humanseg_output 目录下,文件名称跟原图片的名称相同,但是文件格式是 png 。

其中示例 images 目录下放了9张图片,为了兼顾不同读者喜好的口味,示例图片中既包括了帅哥,也有美女哦,并且将他们缩略图放大了,如下:

5行Python代码实现一键批量扣图

运行程序后,上述示例代码运行结果如下所示。

5行Python代码实现一键批量扣图

运行成功后,在 humanseg_output 目录下生成了9张图片,同样的,扣图的结果如下所示:

5行Python代码实现一键批量扣图

我们可以看到程序将每张图片中的人物(可以是一个人,也可以是多个人)识别出来,并且抠出来成图,背景是白色。虽然有些细节处还有些许瑕疵,但是看起来还算不错。

4. 需要注意的坑

在运行示例代码时,如果没有单独安装模型deeplabv3p_xception65_humanseg,默认会自动在执行前进行安装。但安装完成后,执行结果并没有生成扣图结果及humanseg_output目录,输出结果类似如下所示:

5行Python代码实现一键批量扣图

正常情况下,在生成扣图数据,打印results时,应该是类似如下结构才对:

5行Python代码实现一键批量扣图

可以通过单独安装模型并指定安装版本来解决。

hub install deeplabv3p_xception65_humanseg==1.0.0

具体原因没有细究,默认自动安装模型时,版本为1.2.0,猜测由于还是模型版本不兼容问题导致。

5. 总结

本文基于 paddlepaddle 平台,利用PaddleHub DeepLabv3+模型(deeplabv3p_xception65_humanseg),使用简单的五行代码就实现了批量抠图。有些读者可能会想,上述示例中提供的代码行数不止五行代码吧,在上述示例中,真正实现扣图的主代码其实只需要下面五行:

humanseg = hub.Module(name='deeplabv3p_xception65_humanseg')  
base_dir = os.path.abspath(os.path.dirname(__file__))
path = os.path.join(base_dir, 'images/')
files = [path + i for i in os.listdir(path)]  
results = humanseg.segmentation(data={'image': files})  

利用PaddleHub DeepLabv3+模型 不仅可以实现一键扣图,还可以进行图片合成,视频合成等。利用好它不仅解放了人的双手和双眼,而且为某些程序猿/程序媛的装逼工具箱提供了一件宝器。下次如果碰到某个女生或者闺蜜在为抠图发愁,别忘了掏出神器,赢得芳心哦!

paddlepaddle作为一款开源的深度学习平台,本文介绍的扣图训练模型只是其中的冰山一角,实战训练预测模型种类还远远不止,更多的场景结合,读者们可自行挖掘。

到此这篇关于5行Python代码实现一键批量扣图的文章就介绍到这了,更多相关Python 批量扣图内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python中查找excel某一列的重复数据 剔除之后打印
Feb 10 Python
简单介绍利用TK在Python下进行GUI编程的教程
Apr 13 Python
Python制作爬虫抓取美女图
Jan 20 Python
使用python调用zxing库生成二维码图片详解
Jan 10 Python
Python基于opencv调用摄像头获取个人图片的实现方法
Feb 21 Python
python3+selenium自动化测试框架详解
Mar 17 Python
Python3.5面向对象编程图文与实例详解
Apr 24 Python
用Python识别人脸,人种等各种信息
Jul 15 Python
python数据化运营的重要意义
Nov 25 Python
python实现从ftp服务器下载文件
Mar 03 Python
Ubuntu20下的Django安装的方法步骤
Jan 24 Python
Python机器学习工具scikit-learn的使用笔记
Jan 28 Python
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
python geopandas读取、创建shapefile文件的方法
总结Pyinstaller打包的高级用法
Pandas数据类型之category的用法
Jun 28 #Python
Python爬虫框架之Scrapy中Spider的用法
Jun 28 #Python
简单谈谈Python面向对象的相关知识
Jun 28 #Python
Python利用机器学习算法实现垃圾邮件的识别
You might like
PHP数组相关函数汇总
2015/03/24 PHP
jqeury-easyui-layout问题解决方法
2014/03/24 Javascript
基于jquery实现的图片在各种分辨率下未知的容器内上下左右居中
2014/05/11 Javascript
php+ajax+jquery实现点击加载更多内容
2015/05/03 Javascript
Javascript技术难点之apply,call与this之间的衔接
2015/12/04 Javascript
一波JavaScript日期判断脚本分享
2016/03/06 Javascript
深入理解jquery中的事件与动画
2016/05/24 Javascript
JS遍历对象属性的方法示例
2017/01/10 Javascript
el表达式 写入bootstrap表格数据页面的实例代码
2017/01/11 Javascript
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
2017/08/04 Javascript
基于Vue的SPA动态修改页面title的方法(推荐)
2018/01/02 Javascript
webpack@v4升级踩坑(小结)
2018/10/08 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
2019/03/14 Javascript
vue+springboot+element+vue-resource实现文件上传教程
2020/10/21 Javascript
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
[01:04:20]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.29
2020/12/02 DOTA
获取Django项目的全部url方法详解
2017/10/26 Python
Pandas之drop_duplicates:去除重复项方法
2018/04/18 Python
Django中数据库的数据关系:一对一,一对多,多对多
2018/10/21 Python
Python实现查找最小的k个数示例【两种解法】
2019/01/08 Python
Python学习笔记之文件的读写操作实例分析
2019/08/07 Python
pytorch 自定义数据集加载方法
2019/08/18 Python
Pytorch加载部分预训练模型的参数实例
2019/08/18 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
2020/09/03 Python
scrapy在python爬虫中搭建出错的解决方法
2020/11/22 Python
美国畅销的跑步机品牌:ProForm
2017/02/06 全球购物
瑞士图书网站:Weltbild.ch
2019/09/17 全球购物
金融专业大学生职业生涯规划范文
2014/01/16 职场文书
全国优秀教师事迹材料
2014/08/26 职场文书
2014年大学生党员评议表自我评价
2014/09/20 职场文书
毕业生就业推荐表导师评语
2014/12/31 职场文书
离职证明格式样本
2015/06/12 职场文书
2016年教师师德师风心得体会
2016/01/12 职场文书
小米11和iphone12哪个值得买?小米11对比iphone12评测
2021/04/21 数码科技
CSS3实现的侧滑菜单
2021/04/27 HTML / CSS
Mysql调整优化之四种分区方式以及组合分区
2022/04/13 MySQL