5行Python代码实现一键批量扣图
5行Python代码实现一键批量扣图,恰卡网带你了解更多相关信息。
今天给大家分享一款Python装逼实用神器。
在日常生活或者工作中,经常会遇到想将某张照片中的人物抠出来,然后拼接到其他图片上去。专业点的人可以使用 PhotoShop 的“魔棒”工具进行抠图,非专业人士则使用各种美图 APP 来实现,但是这两类方式毕竟处理能力有限,一次只能处理一张图片,而且比较复杂的图像可能耗时较久。那今天就来向大家展示第三种扣图方式——用 Python代码来实现 一键批量抠图。
1. 准备工作- 安装paddlepaddle
既然要装逼,准备工作是少不了的。所谓“站在巨人的肩膀上,干起活来事半功倍”,我们这里的“巨人”就是 paddlepaddle 了,中文名称叫“飞桨”,那么这个 paddlepaddle 是什么呢?
它是“源于产业实践的开源深度学习平台,致力于让深度学习技术的创新与应用更简单”,直白点就是我帮你实现了深度学习底层框架,你只要有创意就可以在我平台上运用少量简单代码轻松实现。它的官网是:https://www.paddlepaddle.org.cn/。
它的安装比较简单,官网首页就有安装指引,可以通过「安装」菜单,查找到各个系统安装详细及注意事项,如下图所示,我们这里根据官网的安装指引,使用 pip 方式来安装 CPU 版本。
本文以MacOS系统为例:
我们首先执行以下命令安装(推荐使用百度源)::
python3-mpipinstallpaddlepaddle-ihttps://mirror.baidu.com/pypi/simple
或者:
python3-mpipinstallpaddlepaddle-ihttps://pypi.tuna.tsinghua.edu.cn/simple
从安装过程中,可以看到在安装paddlepaddle库时,需要安装如下依赖库:
Installingcollectedpackages:pathlib,click,joblib,regex,tqdm,nltk,gast,rarfile,pyyaml,funcsigs,paddlepaddle Runningsetup.pyinstallforpathlib...done Runningsetup.pyinstallforregex...done Runningsetup.pyinstallfornltk...done Runningsetup.pyinstallforrarfile...done Runningsetup.pyinstallforpyyaml...done Successfullyinstalledclick-7.1.2funcsigs-1.0.2gast-0.3.3joblib-0.14.1nltk-3.5paddlepaddle-1.8.0pathlib-1.0.1pyyaml-5.3.1rarfile-3.1regex-2020.5.7tqdm-4.46.0
安装成功后,我们在 python 环境中测试一下是否安装成功(这个也是按照官网指引来做),我们切换到 python 环境,运行如下代码:
➜~python3 Python3.7.4(default,Jul92019,18:15:00) [Clang10.0.0(clang-1000.11.45.5)]ondarwin Type"help","copyright","credits"or"license"formoreinformation. >>>importpaddle.fluid >>>paddle.fluid.install_check.run_check() RunningVerifyFluidProgram... YourPaddleFluidworkswellonSINGLEGPUorCPU. W051217:41:31.0372402844976000build_strategy.cc:170]fusion_groupisnotenabledforWindows/MacOSnow,andonlyeffectivewhenrunningwithCUDAGPU. W051217:41:31.0439592844976000fuse_all_reduce_op_pass.cc:74]Findall_reduceoperators:2.Tomakethespeedfaster,someall_reduceopsarefusedduringtraining,afterfusion,thenumberofall_reduceopsis1. YourPaddleFluidworkswellonMUTIPLEGPUorCPU. YourPaddleFluidisinstalledsuccessfully!Let'sstartdeepLearningwithPaddleFluidnow
如果能看到 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):
importos importpaddlehubashub #加载模型 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+iforiinos.listdir(path)] print(files) #抠图 results=humanseg.segmentation(data={'image':files}) forresultinresults: print(result)
示例中,我将图片放在代码文件夹的同级目录 images文件夹下,运行代码后,输出的抠图图片会自动放在代码同级目录的 humanseg_output 目录下,文件名称跟原图片的名称相同,但是文件格式是 png 。
其中示例 images 目录下放了9张图片,为了兼顾不同读者喜好的口味,示例图片中既包括了帅哥,也有美女哦,并且将他们缩略图放大了,如下:
运行程序后,上述示例代码运行结果如下所示。
运行成功后,在 humanseg_output 目录下生成了9张图片,同样的,扣图的结果如下所示:
我们可以看到程序将每张图片中的人物(可以是一个人,也可以是多个人)识别出来,并且抠出来成图,背景是白色。虽然有些细节处还有些许瑕疵,但是看起来还算不错。
4. 需要注意的坑
在运行示例代码时,如果没有单独安装模型deeplabv3p_xception65_humanseg
,默认会自动在执行前进行安装。但安装完成后,执行结果并没有生成扣图结果及humanseg_output目录,输出结果类似如下所示:
正常情况下,在生成扣图数据,打印results时,应该是类似如下结构才对:
可以通过单独安装模型并指定安装版本来解决。
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+iforiinos.listdir(path)] results=humanseg.segmentation(data={'image':files})
利用PaddleHub DeepLabv3+
模型 不仅可以实现一键扣图,还可以进行图片合成,视频合成等。利用好它不仅解放了人的双手和双眼,而且为某些程序猿/程序媛的装逼工具箱提供了一件宝器。下次如果碰到某个女生或者闺蜜在为抠图发愁,别忘了掏出神器,赢得芳心哦!
paddlepaddle作为一款开源的深度学习平台,本文介绍的扣图训练模型只是其中的冰山一角,实战训练预测模型种类还远远不止,更多的场景结合,读者们可自行挖掘。
到此这篇关于5行Python代码实现一键批量扣图的文章就介绍到这了,更多相关Python 批量扣图内容请搜索趣讯吧以前的文章或继续浏览下面的相关文章希望大家以后多多支持趣讯吧!
推荐阅读
-
Python中怎么动态声明变量赋值
这篇文章将为大家详细讲解有关Python中怎么动态声明变量赋值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文...
-
python中变量的存储原理是什么
-
Python中怎么引用传递变量赋值
这篇文章将为大家详细讲解有关Python中怎么引用传递变量赋值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文...
-
python中怎么获取程序执行文件路径
python中怎么获取程序执行文件路径,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的...
-
Python中如何获取文件系统的使用率
Python中如何获取文件系统的使用率,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴...
-
Python中怎么获取文件的创建和修改时间
这篇文章将为大家详细讲解有关Python中怎么获取文件的创建和修改时间,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读...
-
python中怎么获取依赖包
今天就跟大家聊聊有关python中怎么获取依赖包,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据...
-
python怎么实现批量文件加密功能
-
python中怎么实现threading线程同步
小编给大家分享一下python中怎么实现threading线程同步,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!...
-
python下thread模块创建线程的方法
本篇内容介绍了“python下thread模块创建线程的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来...