HMS Core图像分割服务教你如何在复杂背景里精细抠图

2023-11-02 17:20

本文主要是介绍HMS Core图像分割服务教你如何在复杂背景里精细抠图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2021年以来,自动驾驶赛道进入爆发期,该行业成为大厂以及初创企业的必争之地。其中众多公司都采用了计算机视觉作为自动驾驶的技术底座,通过图像分割技术,汽车才能够有效理解道路场景,分清楚哪里是路,哪里是人。除了自动驾驶领域,图像分割技术也常出现在其他重要的场景中,比如:

  • 医疗图像分割:帮助医生进行诊断测试

  • 卫星图像分析:适合深入研究大量图像数据

  • 影像娱乐类App:人像抠图、避免视频弹幕遮住人脸

因此,图像分割技术的应用十分重要且广泛。HMS Core机器学习服务图像分割服务采用了具有创新意义的语义分割框架。这种框架将图像中的每个像素点都标签化,即使是发丝细节都可以清晰完整的保留。另外,图像分割服务还提升了对于不同画质、不同尺寸图片的处理能力,针对分割算法常常出现的白边,采用更加结构化学习的训练方式,使边缘更加自然。

那么如此稳定、精细化的分割能力,到底如何实现?

开发实战

一、开发准备

Maven仓和SDK的配置步骤可以参考开发者网站中的应用开发介绍: https://developer.huawei.com/consumer/cn/doc/development/hiai-Guides/image-segmentation-0000001050040109#section1658976113112?ha_source=hms1

1 配置华为Maven仓地址。

buildscript {
repositories {
google()
jcenter()
maven {url 'https://developer.huawei.com/repo/'}
}
dependencies {
...
classpath 'com.huawei.agconnect:agcp:1.4.1.300'
}
}allprojects {
repositories {
google()
jcenter()
maven {url 'https://developer.huawei.com/repo/'}
}
}

2 添加编译SDK依赖

dependencies {// 引入基础SDK
implementation 'com.huawei.hms:ml-computer-vision-segmentation:2.1.0.301'// 引入人像分割模型包
implementation 'com.huawei.hms:ml-computer-vision-image-segmentation-body-model:2.1.0.303'
}

3 在AndroidManifest.xml中添加权限

// 使用存储权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

二、开发步骤

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);if (!allPermissionsGranted()) {getRuntimePermissions();}
}
private boolean allPermissionsGranted() {for (String permission : getRequiredPermissions()) {if (!isPermissionGranted(this, permission)) {return false;}}return true;
}
private void getRuntimePermissions() {List<String> allNeededPermissions = new ArrayList<>();for (String permission : getRequiredPermissions()) {if (!isPermissionGranted(this, permission)) {allNeededPermissions.add(permission);}}if (!allNeededPermissions.isEmpty()) {ActivityCompat.requestPermissions(this, allNeededPermissions.toArray(new String[0]), PERMISSION_REQUESTS);}
}
private static boolean isPermissionGranted(Context context, String permission) {if (ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED) {return true; }return false; 
}
private String[] getRequiredPermissions() { try {PackageInfo info =this.getPackageManager().getPackageInfo(this.getPackageName(), PackageManager.GET_PERMISSIONS); String[] ps = info.requestedPermissions;if (ps != null && ps.length > 0) { return ps;} else { return new String[0];} } catch (RuntimeException e) {throw e; } catch (Exception e) { return new String[0];}
}

2 创建图片分割检测器

MLImageSegmentationSetting setting = new MLImageSegmentationSetting.Factory()
// 设置为人像分割.setAnalyzerType(MLImageSegmentationSetting.BODY_SEG).create();
this.analyzer = MLAnalyzerFactory.getInstance().getImageSegmentationAnalyzer(setting);

3 通过android.graphics.Bitmap创建“MLFrame”对象用于分析器检测图片

MLFrame mlFrame = new MLFrame.Creator().setBitmap(this.originBitmap).create();

4 调用“asyncAnalyseFrame ”方法进行图像分割

// 创建一个task,处理图像分割检测器返回的结果。
Task<MLImageSegmentation> task = this.analyzer.asyncAnalyseFrame(mlFrame);
// 异步处理图像分割检测器返回的结果。
task.addOnSuccessListener(new OnSuccessListener<MLImageSegmentation>() {@Overridepublic void onSuccess(MLImageSegmentation mlImageSegmentationResults) {.if (mlImageSegmentationResults != null) {
//获得从图片中分割出的人像前景图foreground = mlImageSegmentationResults.getForeground();preview.setImageBitmap(MainActivity.this.foreground);}}
}).addOnFailureListener(new OnFailureListener() {@Overridepublic void onFailure(Exception e) {return;}
});

5 更换图片背景

// 从相册中获取图片
backgroundBitmap = Utils.loadFromPath(this, id, targetedSize.first, targetedSize.second);
BitmapDrawable drawable = new BitmapDrawable(backgroundBitmap);
preview.setBackground(drawable);
preview.setImageBitmap(this.foreground);

6 更换图片背景

MLFrame mlFrame = new MLFrame.Creator().setBitmap(this.originBitmap).create();

(demo演示视频如下)

了解更多详情>>

访问华为开发者联盟官网
获取开发指导文档
华为移动服务开源仓库地址:GitHub、Gitee

关注我们,第一时间了解 HMS Core 最新技术资讯~

这篇关于HMS Core图像分割服务教你如何在复杂背景里精细抠图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/332111

相关文章

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

基于SpringBoot的宠物服务系统+uniapp小程序+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统+原生微信小程序+LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统+LW参考示例 3.基于SpringBoot+Vue的企业人事管理系统+LW参考示例 4.基于SSM的高校实验室管理系统+LW参考示例 5.基于SpringBoot的二手数码回收系统+原生微信小程序+LW参考示例 6.基于SSM的民宿预订管理系统+LW参考示例 7.基于

SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

摘要 我们介绍 SAM2POINT,这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频,并利用 SAM 2 进行 3D 空间分割,无需进一步训练或 2D-3D 投影。 我们的框架支持各种提示类型,包括 3D 点、框和掩模,并且可以泛化到不同的场景,例如 3D 对象、室

Verybot之OpenCV应用一:安装与图像采集测试

在Verybot上安装OpenCV是很简单的,只需要执行:         sudo apt-get update         sudo apt-get install libopencv-dev         sudo apt-get install python-opencv         下面就对安装好的OpenCV进行一下测试,编写一个通过USB摄像头采

Golang支持平滑升级的HTTP服务

前段时间用Golang在做一个HTTP的接口,因编译型语言的特性,修改了代码需要重新编译可执行文件,关闭正在运行的老程序,并启动新程序。对于访问量较大的面向用户的产品,关闭、重启的过程中势必会出现无法访问的情况,从而影响用户体验。 使用Golang的系统包开发HTTP服务,是无法支持平滑升级(优雅重启)的,本文将探讨如何解决该问题。 一、平滑升级(优雅重启)的一般思路 一般情况下,要实现平滑

Golang服务平滑重启

与重载配置相同的是我们也需要通过信号来通知server重启,但关键在于平滑重启,如果只是简单的重启,只需要kill掉,然后再拉起即可。平滑重启意味着server升级的时候可以不用停止业务。 我们先来看下Github上有没有相应的库解决这个问题,然后找到了如下三个库: facebookgo/grace - Graceful restart & zero downtime deploy for G

第49课 Scratch入门篇:骇客任务背景特效

骇客任务背景特效 故事背景:   骇客帝国特色背景在黑色中慢慢滚动着! 程序原理:  1 、 角色的设计技巧  2 、克隆体的应用及特效的使用 开始编程   1、使用 黑色的背景: ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7d74c872f06b4d9fbc88aecee634b074.png#pic_center)   2