分割抠图功能讲解及演示 | 学习笔记

简介: 快速学习分割抠图功能讲解及演示

开发者学堂课程【达摩院视觉AI课分割抠图功能讲解及演示】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/335/detail/3836


  分割抠图功能讲解及演示


一、相关的基础概念

首先介绍图像相关的基础概念,其次会介绍我们视觉智能开放平台、图像分割接口的使用方法,最后介绍在我们的图像分割结果上进行二次加工的一些例子。

最常用的图像格式都是3通道的 BGR 格式,第一张图可以分为BGR 3个颜色分量。4通道图常见格式为PNG,区别于三通道图,它的背景除了人物以外的背景区域是半透明的状况,图像可视化边界可以支持不规则的一些边缘,三通道只能是矩形。

多出来的第四个通道,阿尔法通道则用来控制对应像素的透明程度,零表示全透,255表示不透。

1.png

如果阿尔法通道为全255,这张图视觉上就和3通道图没有差别。后面统称阿尔法通道为 master 。

在三通道图片的基础上融合对应的 master 图层,就可以得到抠图后的 PNG 图片,那我们平台的能力主要是预测图像主体的master 图层。

 

二、如何使用上述能力

首先进入阿里云官网:https:vision.aliyun.com/ 并登录阿里云账号,在广场分割抠图内幕下找到自己需要的接口,这里以人体分割作为样例。

2.png

点击人体分割进入到试用界面。进入试用界面之后,可以先试用,满意后再开通服务,点击上传图片。

上传成功之后,点击发起调用。

3.png右边是算法结果,对于结果的好坏,强烈建议大家在这里点击反馈,方便后续做进一步的优化。点击代码展示,这里展示的为抠图服务返回的json结果。4.png

Imageurl 表示的就是刚才结果图的图片地址,点击帮助文档,这里有更多服务的详情介绍。

如何开通,点击免费开通,在这里选择需要开通的接口,然后点击立即购买,再点击确认付款,5.png

然后会提示跳转到控制台。在控制台模块可以看到已经开发的能力,那么分割抠图模块相关的信息,我们也是可以看到的。

6.png

目前人体分割、商品分割和通用分割已经进入了商业化流程,如果需

要更高的QBS支持,可以点击这里进行购买。

 

7.png

 

三、开通对应的API 服务

回到上一级界面,这里有示例代码以及开通需要的 SDK  ,这里需要提醒大家,我们仅支持 OSS 图片地址。

所以需要事先开通好 OSS 服务,并创建好相应的AK,具体操作方式可以在该界面进行跳转。点击python对应的SDK界面。

8.png

首先,需要安装阿里云SDK核心库。

pip install aliyun-python-sdk-core

其次,安装对应的分割接口。SDK。

pip install aliyun-python-sdk-imageseg

然后就可以开始写代码了。首先返回上一级目录。

选择 python 事例。代码进行复制,然后粘贴到对应的编辑器中。这里是已经事先编辑好的,需要修改三个部分,一个是 AK 里面的 keyId ,另外一个是 AK 里面 secret ,

client=AcsClient(accessKeyId,accessSecret, 'cn-shanghai')

还有一个是图片的地址。

图片地址演示:

这里需要图片必须存放在上海的oss bucket  里面。先打开一个 bucket ,新建完成并上传了一张图片,9.png

点击详情复制。

10.png

然后粘贴到 url  地址处。点击运行。可以看到服务器返回的结果。基于服务器返回的josn 结果,解析后到的结果,图片url。以及把该 url 对应的图片写到本地的结果。

11.png


四、基于分割结果再加工的示例代码

接下来提供一些基于分割结果再加工的示例代码,我们来看一下示例代码的结构,一个是downloadData.sh 用来下载图片素材,另外一个是python代码用来展示如何进行合图。首先我们运行sh  downloadData.sh 进行下载,图片下载完之后会出现一个date目录,下面有多素材,source.jpg 表示的是原始图片,viapi_mask.png 表示的是通过API平台调用返回的图片,

12.pngbackground.jbg表示要进行融合的背景图片,

13.png

在下载好图片之后,就可以运行脚本进行合图。

运行代码:python backGroundMergeDemo.py pic

Pic 表示的是图片合图,vid 表示的是视频合图。合图效果result.jpg 如下所示:

14.png

 

五、合图代码的基础逻辑

简单介绍一下合图代码的基础逻辑

def picture mergeBG(args):

assert (args.files is not None and len(args.files)>3),"parameters wrong, use -h for details!"

ofr_file=args.files[3]  //存储合图后的文件地址

[sc_image, viari_image, bg_image] = [cv2.imread(img_file, cv2.IMREAD _UNCHANGED)  //第一个原始图片,第二个 viari 返回的 PNG 图片,第三个参数是带融合的背景图片。

for img file in args.files[0:3]]

assert (sc image is not None and viapi image is not None and

bg image is not None), "read image files error!"

h,wc=sc image.shape

viapi image = cv2.resize(viapi image, (w, h)) bg image=cv2.resize(bg image, (w, h))  //将PNG 图片和背景图片进行resize,保证和source 图片一致。

if len(viapi image.shape)==2:

mask=viapi image[: : np.newaxis]

if viapi image.shape[2] == 4:

mask = viapi image[: : 3:4]

elif viapi image.shape[2] == 3:

mask =viapi image[: : 0:1]

else:

raise Exception("invalid image mask!")

//提取 mask 通道。对于四通道图,直接把阿尔法通道提取出来,对于有些可能是把阿尔法通道转换成了一个灰度图,那我们这块儿也做了一个转换,然后对图像再进行一个规划,到零到一。然后再按照我们之前提到的前景成阿尔法加背景乘一减阿尔法的公式进行计算。

mask=mask/255.0

sc image=sc image.astype(np.float) bg image =bg image.astype(np.float)

of image = (sc image-bg image)*mask + image

of image = np.clip(of image 0 255) cv2.imwrite(of file, of image)

//此处为核心代码,他是上一个公司的一个变种,可以减少一次float计算。然后把图片写回到输出文件地址,本次视频教程到此结束。

相关文章
|
关系型数据库 分布式数据库 数据库
PolarDB PostgreSQL版:Oracle兼容的高性能数据库
PolarDB PostgreSQL版是一款高性能的数据库,具有与Oracle兼容的特性。它采用了分布式架构,可以轻松处理大量的数据,同时还支持多种数据类型和函数,具有高可用性和可扩展性。它还提供了丰富的管理工具和性能优化功能,为企业提供了可靠的数据存储和处理解决方案。PolarDB PostgreSQL版在数据库领域具有很高的竞争力,可以满足各种企业的需求。
|
9月前
|
监控 安全 程序员
总被程序员坑?你需要了解API接口
本文从API接口的角度出发,帮助产品经理理解技术基础,避免因技术盲区被程序员“坑”。通过解析API概念、为何需了解API文档、其在项目开发中的作用及实际案例,说明掌握API知识有助于明确需求、评估工作量、识别风险,并提升团队协作效率。同时强调,产品经理不必畏惧技术,理解程序员工作逻辑,才能更好地推动项目进展。
|
机器学习/深度学习 人工智能 自然语言处理
当前AI大模型在软件开发中的创新应用与挑战
2024年,AI大模型在软件开发领域的应用正重塑传统流程,从自动化编码、智能协作到代码审查和测试,显著提升了开发效率和代码质量。然而,技术挑战、伦理安全及模型可解释性等问题仍需解决。未来,AI将继续推动软件开发向更高效、智能化方向发展。
|
SQL 存储 NoSQL
SQL、NoSQL还是NewSQL
【7月更文挑战第5天】SQL、NoSQL还是NewSQL
557 1
|
存储 传感器 索引
ov2640子设备视频操作详细分析
ov2640子设备视频操作详细分析
796 0
ov2640子设备视频操作详细分析
|
数据采集 人工智能 自然语言处理
Qwen模型角色扮演最佳实践
角色扮演大模型通过模拟特定角色的行为、语言风格和情感表达,实现高度拟人化和定制化的互动体验。与传统通用模型相比,角色扮演模型在语言风格、性格特征和情绪反应上更加细腻,提供更真实的交互体验。本文介绍了如何通过system prompt、few-shot学习和微调等技术实现大模型的拟人化,包括使用阿里云百炼平台进行角色扮演测试,以及如何通过合成数据和Lora微调提高模型的表演效果。最终,展示了如何通过优化数据质量和训练策略,显著提升角色扮演模型的表现。
|
JSON 前端开发 Java
SpringBootWeb案例-1(一)
SpringBootWeb案例-1(一)
289 0
|
SQL 自然语言处理 Oracle
史上最详细的JDBC入门教程(初学者必看)
JDBC(Java DataBase Connectivity)是Java和数据库之间的一个桥梁,是一个规范而不是一个实现,能够执行SQL语句。它由一组用Java语言编写的类和接口组成。各种不同类型的数据库都有相应的实现,本文中的代码都是针对MySQL数据库实现的。
2147 0
史上最详细的JDBC入门教程(初学者必看)
|
JSON Java 网络架构
RPC与REST对比指南
【5月更文挑战第19天】使用RPC可以得到很轻的载荷、传输较轻、速度快、协议层少、转换快,但是会产生依赖性,做不到平台无关性,在安全性上较差。使用REST风格,则具备平台无关性、高安全性和独立性。
|
机器学习/深度学习 Java C#
C# 编程语言简介
C# 是一种通用的、静态类型的编程语言,由 Microsoft 开发。它是为了构建 .NET 应用程序而设计的,同时也可以用于开发跨平台应用、游戏和桌面应用。C# 具有简洁、现代化的语法以及强大的面向对象编程特性,使得开发者能够快速高效地构建各种类型的应用。
499 0

热门文章

最新文章