【手摸手学ModelArts】一键抠图,轻松上手!

举报
胡琦 发表于 2021/04/02 18:32:51 2021/04/02
【摘要】 Copy攻城狮手把手教学,从此抠图不求人!

大家好,我是Copy攻城狮!最近很多小伙伴都叫我胡琦老师了,源于上周末有幸去到广东省机电学院进行分享交流,不过我内心还是挺惭愧的,没有核心竞争力只会复制粘贴,真心怕带偏在座的诸位!今天想和大家分享基于ModelArts如何快速跑通一键抠图模型。

目的

  • 掌握ModelArts脚本分享

  • 基于ModelArts跑通PaddleHub

  • 熟悉常用的指令


点我一键跑通一键抠图

脚本分享



1617345720171-image.png


以我在机电学院“普惠AI,拥抱未来”华为AI技术讲座中分享的案例为例:

- https://console.huaweicloud.com/modelarts/?region=cn-north-4#/notebook/loading?share-url-b64=

+ aHR0cHM6Ly9tbC1ub3RlYm9vay5vYnMuY24tbm9ydGgtNC5teWh1YXdlaWNsb3VkLmNvbTo0NDMvaW1hZ2VfdG9fdmlkZW8uaXB5bmI=

+ https://ml-notebook.obs.cn-north-4.myhuaweicloud.com:443/image_to_video.ipynb

我们看到的白色部分(上面链接 + 的部分)是一个固定的地址,您可以理解为华为云专为ModelArts提供的一个API,region参数是实例所在区域如cn-north-4#/notebook/loading就是北京四的notebook加载服务share-url-b64参数跟的是 Base64 编码之后的链接,我们可以通过Base64 解码就能获取到真实的URL地址。

import base64
test_str = 'aHR0cHM6Ly9tbC1ub3RlYm9vay5vYnMuY24tbm9ydGgtNC5teWh1YXdlaWNsb3VkLmNvbTo0NDMvaW1hZ2VfdG9fdmlkZW8uaXB5bmI='

# 解码
decode_str = base64.decodebytes(test_str.encode('utf8'))  
print(decode_str.decode())  # 默认以utf8解码,结果是可访问的 .ipynb 文件
print('\n')

url_str = 'https://ml-notebook.obs.cn-north-4.myhuaweicloud.com:443/image_to_video.ipynb'

# 编码
encode_str = base64.encodebytes(test_str.encode('utf8'))  
print(encode_str.decode())  # 默认以utf8编码
print('\n')
print('https://console.huaweicloud.com/modelarts/?region=cn-north-4#/notebook/loading?share-url-b64='+ encode_str.decode())

image.png


因此,本次实践的一键跑通链接为:

点我一键跑通一键抠图

跑通PaddleHub

PaddleHub 此处就不多作介绍,您百度“深度学习”出来的就是它,什么原因大家懂的都懂。一般来说,封装得越完整,使用的时候就有特别多的坑,因为您可能没法再自定义;好在 PaddleHub 在封装额时候也考虑到了从本地加载模型。如果直接调用hub.load会把文件下载到home/user下,而在 Jupyter Notebook 中,我们不一定有写入权限。

我们使用是GPU 环境下的 Pytorch1.0.0。因此在跑脚本前需要先「切换到GPU环境」

  • 安装依赖

# !pip install --upgrade pip
!pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
!pip install paddlehub -i https://mirror.baidu.com/pypi/simple 
  • 下载模型

!wget https://bj.bcebos.com/paddlehub/paddlehub_dev/deeplabv3p_xception65_humanseg.tar.gz
!tar zvxf deeplabv3p_xception65_humanseg.tar.gz


image.png


  • 下载示例图片

!mkdir inputs
!wget -c https://user-gold-cdn.xitu.io/2020/2/18/170542edf2b3ec95?imageView2/0/w/1280/h/960/format/webp/ignore-error/1 -O inputs/1.jpg
!wget -c https://user-gold-cdn.xitu.io/2020/2/18/170542edf3428052?imageView2/0/w/1280/h/960/format/webp/ignore-error/1 -O inputs/2.jpg
!wget -c https://user-gold-cdn.xitu.io/2020/2/18/170542eea1782693?imageView2/0/w/1280/h/960/format/webp/ignore-error/1 -O inputs/3.jpg
!wget -c https://img-blog.csdnimg.cn/20200310211256715.jpg -O inputs/4.jpg



image.png



  • 一键抠图

# 1、导入模块
import os
import paddlehub as hub

# 2、加载模型
humanseg = hub.Module(directory='deeplabv3p_xception65_humanseg')

# 3、获取文件列表
# 图片文件的目录
path = 'inputs/'
# 获取目录下的文件
files = os.listdir(path)
# 用来装图片的
imgs = []
shows = []
# 拼接图片路径
for i in files:
    print(i)
    if i.lower().endswith(('jpg','png','jpeg','bmp')):
        imgs.append(path + i)
#抠图
results = humanseg.segmentation(data={'image':imgs},visualization=True, output_dir='outputs')


image.png

一顿操作之后,我们发现图片的背景已经被扣掉了,是不是很简单?

实操脚本分享

目前ModelArts Jupyter中暂时还没有一键分享的按钮,当然我计划很久了,Copy 的汉化插件虽然上线了,但一键分享的功能还没有实现。思路很简单:用户输入.ipynb文件路径--> Base64 编码-->拼接前缀-->生成链接和二维码。

暂时只能手工生成喽!

首先,我将编辑好的.ipynb文件上传到OBS,这里可以使用 Moxing

import moxing as mox

mox.file.copy('humanseg.ipynb', 'obs://huqi88/humanseg.ipynb')

如果还想生成二维码的话,需要安装qrcode

!pip install qrcode

接着就是实现代码,默认OBS桶在北京四且公开可读。

from PIL import Image
import base64
import qrcode

url_str = 'https://huqi88.obs.cn-north-4.myhuaweicloud.com:443/humanseg.ipynb'

# 编码
encode_str = base64.urlsafe_b64encode(url_str.encode('utf8'))  
print(encode_str.decode())  # 默认以utf8编码
data = 'https://console.huaweicloud.com/modelarts/?region=cn-north-4#/notebook/loading?share-url-b64='+ encode_str.decode()
print(data)

img = qrcode.make(data)
with open('qrcode.png', 'wb') as f:
    img.save(f)
display(Image.open('qrcode.png'))



image.png


总结

通过此次实现,掌握了在ModelArts中使用PaddlePaddle 内置模型的技巧,似乎打开了新世界的大门。此外,彻底掌握了基于ModelArts分享.ipynb脚本的“奥秘”! 当然,ModelArts 将上线工程分享的功能,让我们尽情期待吧!

如果您想了解更多关于 ModelArts, 欢迎关注公众号: 「ModelArts开发者社区」

如果您想了解更多关于 AI 开发,欢迎访问 huaweicloud.ai!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200