你是否曾经想将某张照片中的人物抠出来,然后拼接到其他图片上去,从而可以即使你在天涯海角,我也可以到此一游?

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:1097524789

专业点的人使用 PhotoShop 的“魔棒”工具可以抠图,非专业人士可以使用各种美图 APP 来实现,但是他们毕竟处理能力有限,一次只能处理一张图片,而且比较复杂的图像可能耗时较久。

今天我来向大家展示第三种途径——用 Python 一键批量抠图。

准备工作

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

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

它的官网是 https://www.paddlepaddle.org.cn/ 。

它的安装也比较简单,官网首页就有安装指引,我们这里根据官网的安装指引,使用 pip 方式来安装 CPU 版本。

我们首先执行语句:

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

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

Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 26 2018, 23:26:24)[Clang 6.0 (clang-600.0.57)] on darwinType "help", "copyright", "credits" or "license" for more information.>>> import paddle.fluid>>> paddle.fluid.install_check.run_check()Running Verify Paddle Program ...Your Paddle works well on SINGLE GPU or CPU.I0506 21:47:48.657404 2923565952 parallel_executor.cc:440] The Program will be executed on CPU using ParallelExecutor, 2 cards are used, so 2 programs are executed in parallel.W0506 21:47:48.658407 2923565952 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.I0506 21:47:48.658516 2923565952 build_strategy.cc:365] SeqOnlyAllReduceOps:0, num_trainers:1I0506 21:47:48.659137 2923565952 parallel_executor.cc:307] Inplace strategy is enabled, when build_strategy.enable_inplace = TrueI0506 21:47:48.659595 2923565952 parallel_executor.cc:375] Garbage collection strategy is enabled, when FLAGS_eager_delete_tensor_gb = 0Your Paddle works well on MUTIPLE GPU or CPU.Your Paddle is installed successfully! Let's start deep Learning with Paddle now>>>

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

我们接下来需要使用的是这个平台的 paddlehub 工具,所以我们还需要安装 paddlehub :

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

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

代码实现

我们的实现步骤很简单:导入模块 -> 加载模型 -> 获取图片文件 -> 调用模块抠图。

下面我们看代码实现:

import os, paddlehub as hubhuseg = hub.Module(name='deeplabv3p_xception65_humanseg') # 加载模型path = './imgs/' # 文件目录files = [path + i for i in os.listdir(path)] # 获取文件列表results = huseg.segmentation(data={'image': files}) # 抠图

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

我在 imgs 目录下放了5张图片,为了便于展示,我将他们放在一起截图:

运行程序后,在 humanseg_output 目录下生成了5张图片,同样的,我将他们放在一起截图:

我们可以看到程序将每张图片中的人物(可以是一个,也可以是多个)识别出来,并且抠出来成图,背景是白色。

虽然有些细节处还有些许瑕疵,但是看起来还算不错。

本文基于 paddlepaddle 平台,使用简单的五行代码实现了批量抠图,不仅解放了好多人的双手和双眼,而且为某些程序猿/程序媛的装逼工具箱提供了一件宝器。

下次如果碰到某个女生或者闺蜜在为抠图发愁,别忘了掏出神器,赢得芳心哦!

------------------- End -------------------

比PS还好用!Python 20行代码批量抠图的更多相关文章

  1. 利用Python几行代码批量生成验证码

    几行代码批量生成authCode 整体步骤: 1.创建图片 2.创建画笔 3.在图片上生成点 4.在图片上画线 5.在图片在画圆 6.在图片在写文本 7.在图片在生成指定字体的文本 代码奉上 #!/u ...

  2. Python第一行代码

    Python版本:Python 3.6.1 0x01 命令行交互 在交互式环境的提示符>>>下,直接输入代码,按回车,就可以立刻得到代码执行结果.现在,试试输入100+200,看看计 ...

  3. Python 5 行代码的神奇操作

    Python 语言实现功能直接了当,简明扼要,今天咱们就来一起看看 Python 5 行代码的神奇操作! 1.古典兔子问题 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语 ...

  4. HTML5游戏实战(4): 20行代码实现FlappyBird

    这个系列很久没有更新了.几个月前有位读者调侃说,能不能一行代码做一个游戏呢.呵呵,接下来一段时间,我天天都在想这个问题,怎么能让GameBuilder+CanTK进一步简化游戏的开发呢.经过几个月的努 ...

  5. Python 1行代码实现文本分类(实战笔记),含代码详细说明及运行结果

    Python 1行代码实现文本分类(实战笔记),含代码详细说明及运行结果 一.详细说明及代码 tc.py =============================================== ...

  6. 20 行代码极速为 App 加上聊天功能

    现在很多 App 都需要集成 IM 功能,今天就为大家分享一下集成 IM 基本功能的步骤.本文内容以 JMessage 为例.极光 IM ( JMessage ) = 极光推送 ( JPush ) + ...

  7. Blazor组件自做九: 用20行代码实现文件上传,浏览目录功能 (3)

    接上篇 Blazor组件自做九: 用20行代码实现文件上传,浏览目录功能 (2) 7. 使用配置文件指定监听地址 打开 appsettings.json 文件,加入一行 "UseUrls&q ...

  8. Python 3 行代码 5 秒抠图的 AI 神器,根本无需 PS

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 苏克1900 PS:如有需要Python学习资料的小伙伴可以加点击下 ...

  9. 20 行代码:Serverless 架构下用 Python 轻松搞定图像分类和预测

    作者 | 江昱 前言 图像分类是人工智能领域的一个热门话题.通俗解释就是,根据各自在图像信息中所反映的不同特征,把不同类别的目标区分开来的图像处理方法. 它利用计算机对图像进行定量分析,把图像或图像中 ...

随机推荐

  1. Tomcat双击startup.bat闪退的原因及解决方式

    很久不碰Tomcat了,最近因为种种原因需要重新投入到Java Web的怀抱,所以又重新接触了Tomcat 我下载了tomcat的压缩包将其解压缩到某个位置,我这里是D盘下的tomcat文件夹中,但是 ...

  2. 老司机带你玩转面试(3):Redis 高可用之主从模式

    前文回顾 建议前面文章没看过的同学先看下前面的文章: 「老司机带你玩转面试(1):缓存中间件 Redis 基础知识以及数据持久化」 「老司机带你玩转面试(2):Redis 过期策略以及缓存雪崩.击穿. ...

  3. socket采用epoll编程demo

    epoll工作流程 首先,需要调用epoll_create创建epoll: 此后我们就可以进行socket/bind/listen: 然后调用epoll_ctl进行注册: 接下来,就可以通过一个whi ...

  4. day6 python while,for 循环控制

    1.1双向循环控制流程 i = 0 while i > 10: #外层循环 j = 10 while j < 0: #内层循环 j -= 1 i += 1 1.1.1 双向循环练习---- ...

  5. 并发编程AQS--------ReentrantLock

    同步框架AbstractQueuedSynchronizer Java并发编程核心在于java.concurrent.util包 而juc当中的大多数同步器实现都是围绕着共同的基础行为,比如等待队列. ...

  6. [jvm] -- 监控和调优常用命令工具篇

    jps:java版本的ps,查看进程的信息 jps -l 输出jar包路径,类全名 jps -m 输出main参数 jps -v 输出JVM参数 jinfo:是用来查看JVM参数和动态修改部分JVM参 ...

  7. 一起学Blazor WebAssembly 开发(2)

    上篇文章讲了Blazor的两种模式的区别及各自的使用场景,本篇就开始学习WebAssembly模式,本篇主要学习的是创建项目及认识项目结构: 创建项目 选择Blazor应用 选择WebAssembly ...

  8. expect使用技巧

    1) 获取命令行参数,例如通过./abc.exp a1 a2执行expect脚本 set 变量名1 [lindex $argv 0] 获取第1个参数a1 set 变量名2 [lindex $argv ...

  9. table标签用法

    <table>标签 HTML中表格由 <table> 标签来定义. 每个表格均有若干行(由 <tr> 标签定义),每行被分割为若干单元格(由 <td> ...

  10. Oracle数据库出现[23000][2291] ORA-02291: integrity constraint (SIMTH.SYS_C005306) violated异常

    参考链接 这个异常发生在往中间表中插入数据时,这时出现异常是因为关联的某个表没有插入数据,所以给没有插入数据的关联表插入数据,再给中间表插入数据此时异常就会解决.