阿里云【趣味视觉AI训练营】笔记2
- 一、笔记说明
- 二、正文
- 2.1 人体分割实验
- 2.2 图像人脸融合实验
- 三、转载说明
一、笔记说明
- 本博客专栏《阿里云【达摩院特别版·趣味视觉AI训练营】》的所有文章均为趣味视觉AI训练营的学习笔记,当前【达摩院特别版·趣味视觉AI训练营】的学习路线内容为:
- 达摩院视觉AI介绍
- 分割抠图功能讲解及演示
- 文字识别项目讲解及使用说明
- 图像识别项目讲解及使用说明
- 实践课:人脸动漫化搭建
二、正文
2.1 人体分割实验
常用的图片格式RGB是3通道,png格式是4通道,相对于3通道多出来的α通道用于表示透明程度。
在3通道图像的基础上,融合对应的α通道图层,就可以得到抠图后的png图片。
平台的分割抠图解决方案主要用于预测α通道图层。
登录视觉智能开放平台,本节将以人体分割作为演示案例:https://vision.aliyun.com/
点击“能力广场”->“分割抠图”->“人体分割”或点击链接进入人体分割产品体验页:https://vision.aliyun.com/experience/detail?spm=a211p3.14020179.J_7524944390.61.66cd35cc2kOzh6&tagName=imageseg&children=SegmentBody
阿里云视觉智能开放平台默认赠送2QPS识别数量,为方便接下来的演示,我们先购买免费API调用额度,点击链接进入:https://common-buy.aliyun.com/?spm=a2c4g.11186623.2.10.1aa86e43xkO1ZJ&commodityCode=viapi_imagesegqps_public_cn
首先需要开通服务:
点击“立即开通”。
点击“进入控制台”。
我们可以在能力列表中看到所有免费额度。
阿里云的分割抠图服务在开通后即可享受对应免费QPS额度,无需购买。
若需购买更高QPS使用,需要调整QPS数量后重新下单。所以我们不需要再回到免费次数购买链接,直接进行体验。
现在整理一下思路:
- 我们有QPS的调用数量,超过就需要付钱。
- API服务器位于上海区,所以我们可以使用OSS服务,也就是我们接下来要创建RAM账户的AccessKey。
- 根据阿里云的体验机制,在平台体验页上传图像后,其会在后台自动转为OSS对象,且在示例代码中自动更改为OSS链接。通过体验调试上传的临时文件有效期为1小时,在24小时后会被系统自动清理删除(API必须在上海区)。
- 可参考本博客专栏上一篇笔记阿里云【达摩院特别版·趣味视觉AI训练营】笔记1,链接地址:https://blog.csdn.net/qq_35772105/article/details/115073695
- 本人技术栈为Python,接下来依然使用pycharm2021.1进行演示,并且接下来我们还需要安装对应API的SDK。
首先,安装分割抠图的SDK,更多视觉智能开放平台
的SDK地址:https://help.aliyun.com/document_detail/145009.htm?spm=a2c4g.11186623.2.6.345971acNnGNQJ#concept-2145228
分割抠图SDK安装命令:
pip install aliyun-python-sdk-imageseg
接下来开通RAM账户的AccessKey。登录视觉智能开放平台控制台,链接https://vision.console.aliyun.com/cn-shanghai/overview?spm=a2c4g.11186623.2.5.22c93aae8aJ6wU,鼠标悬停至右上角的用户头像,单击AccessKey管理,点击“继续使用”,选择创建AccessKey,禁用状态选择“启用”,之后输入邮箱验证码即可创建或启用。AccessKey需要保密,使用后建议删除或禁用。
最后我们利用一下阿里云的体验自动转OSS机制,也就是我们要用本地图片体验一下,这样在pycharm中我们就不需要上传了,直接发送OSS链接给API。测试照片如下:
这张图像的左边缘不明显,我们用它来测试API的分割能力,现在我们上传该图像。
这张结果图有些问题,为了阿里云继续优化程序,我们选择“不满意”作为反馈,当然,这张照片确实太复杂,除了手臂,其他地方的细节都处理得很好。接下来,我们开始代码调用以验证结果。
#!/usr/bin/env python
#coding=utf-8from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkimageseg.request.v20191230.SegmentBodyRequest import SegmentBodyRequestclient = AcsClient('LTAI5tFk8NHjLoxenQXKfrZ9', 'QhrTUcmGfjHUin52GYyRW2wWdiu2qJ', 'cn-shanghai')request = SegmentBodyRequest()
request.set_accept_format('json')request.set_ImageURL("http://explorer-image.oss-cn-shanghai.aliyuncs.com/J_Hj6mxz1MO9r3L44XvOfWSt/%E6%B5%8B%E8%AF%95.jpg?OSSAccessKeyId=LTAI4Fk9FstqSEYnqKJ5Dpeo&Expires=1616481569&Signature=s79cRxmIiJHH5tuad77o3JEPgAs%3D")response = client.do_action_with_exception(request)
# python2: print(response)
print(str(response, encoding='utf-8'))
返回结果是一个图像链接,结果如下:
2.2 图像人脸融合实验
图像人脸融合用于抠图后贴背景图。图像人脸融合功能可以帮助用户在获得授权的前提下,将图像中的指定的某个人脸,融合进另一人的人脸特征。首先进入“图像人脸融合”页面开通服务。链接地址:https://vision.aliyun.com/experience/detail?spm=a211p3.14020179.J_7524944390.14.29c735ccS4uE48&tagName=facebody&children=MergeImageFace
开通服务成功后,点击“进入控制台”,可以看到我们获得了图像人脸融合2QPS的使用量。
安装图像人脸融合SDK。
pip install aliyun-python-sdk-facebody==1.2.18
之后我们需要找2张照片,一张模板照片,一张用户照片,API会将用户图的脸部特征融合进模板照片,最后返回模板照片。为了方便起见,本案例使用上海区OSS链接,大家可以通过“人体分割”的上传自存储OSS机制在人体分割页的示例代码中获得OSS链接。此处我们直接使用人体分割页的实例图片,点击图片刷新后示例代码中也会更新对于图像的OSS链接。
这里,我们将左图作为模板照片,右图作为用户照片。两张照片都是人体分割页面的示例图片,只要官网不更改,就永久可用。
左图上海区OSS链接:http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/imageseg/SegmentBody/SegmentBody9.png
右图上海区OSS链接:http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/imageseg/SegmentBody/SegmentBody4.png
接下来,我们开始代码调用,首先需要获得模板照片,即左图的TemplateId参数。运行以下代码添加人脸图像模板,返回TemplateId参数。
#!/usr/bin/env python
#coding=utf-8from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkfacebody.request.v20191230.AddFaceImageTemplateRequest import AddFaceImageTemplateRequest# AccessKey ID LTAI5t72ALWDBt7Go12QV6EE
# AccessKey Secret 7pQ2Aac5nwxPkNQWvn48nJic0bWwJPaccessKeyId="LTAI5t72ALWDBt7Go12QV6EE"
accessSecret="7pQ2Aac5nwxPkNQWvn48nJic0bWwJP"client = AcsClient(accessKeyId, accessSecret, 'cn-shanghai')request = AddFaceImageTemplateRequest()
request.set_accept_format('json')request.set_UserId("kchacker")
request.set_ImageURL("http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/imageseg/SegmentBody/SegmentBody9.png")response = client.do_action_with_exception(request)
# python2: print(response)
print(str(response, encoding='utf-8'))
返回的TemplateId为517070c7-68fa-4231-a987-06c0eba4444c。
{"RequestId":"40BF3F39-ADED-465D-8DD1-B21EED928478","Data":{"TemplateId":"517070c7-68fa-4231-a987-06c0eba4444c"}}
将获得的TemplateId放入图像人脸融合代码,运行代码。
#!/usr/bin/env python
#coding=utf-8from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkfacebody.request.v20191230.MergeImageFaceRequest import MergeImageFaceRequest# AccessKey ID LTAI5t72ALWDBt7Go12QV6EE
# AccessKey Secret 7pQ2Aac5nwxPkNQWvn48nJic0bWwJPaccessKeyId="LTAI5t72ALWDBt7Go12QV6EE"
accessSecret="7pQ2Aac5nwxPkNQWvn48nJic0bWwJP"client = AcsClient(accessKeyId, accessSecret, 'cn-shanghai')request = MergeImageFaceRequest()
request.set_accept_format('json')# 人脸模板的用户ID,随意命名
request.set_UserId("kchacker")
# 人脸模板的模板ID
request.set_TemplateId("517070c7-68fa-4231-a987-06c0eba4444c")
# 待融合的人脸照片
request.set_ImageURL("http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/imageseg/SegmentBody/SegmentBody4.png")response = client.do_action_with_exception(request)
# python2: print(response)
print(str(response, encoding='utf-8'))
返回图像如下:
最后不要忘记在AccessKey 管理页面注销或禁用AccessKey,链接:https://ram.console.aliyun.com/manage/ak
附:图像融合案例教程核心代码
三、转载说明
- 本文内容完全原创,文章完成时间2021.3.23。
- 若要转载本文,请在转载文章末尾附上本文链接:https://blog.csdn.net/qq_35772105/article/details/115102733
- 本文正文部分全部文本唯一MD5:F3567D62FEE2C5A52FF077ACEE66AFF0。
- 阿里云高校计划,陪伴两千多所高校在校生云上实践、云上成长。在这里你可以领用免费的cpu资源,还可以参加免费训练营,实践提高:https://developer.aliyun.com/adc/student/