2021年以来,主动驾驶赛道进入暴发期,该行业成为大厂以及初创企业的必争之地。其中泛滥公司都采纳了计算机视觉作为主动驾驶的技术底座,通过图像宰割技术,汽车才可能无效了解路线场景,分分明哪里是路,哪里是人。除了主动驾驶畛域,图像宰割技术也常呈现在其余重要的场景中,比方:
- 医疗图像宰割:帮忙医生进行诊断测试
- 卫星图像剖析:适宜深入研究大量图像数据
- 影像娱乐类App:人像抠图、防止视频弹幕遮住人脸
因而,图像宰割技术的利用非常重要且宽泛。HMS Core机器学习服务图像宰割服务采纳了具备翻新意义的语义宰割框架。这种框架将图像中的每个像素点都标签化,即便是发丝细节都能够清晰残缺的保留。另外,图像宰割服务还晋升了对于不同画质、不同尺寸图片的解决能力,针对宰割算法经常呈现的白边,采纳更加结构化学习的训练形式,使边缘更加天然。
那么如此稳固、精细化的宰割能力,到底如何实现?
开发实战
一、开发筹备
Maven仓和SDK的配置步骤能够参考开发者网站中的利用开发介绍:
https://developer.huawei.com/…
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>() { @Override public void onSuccess(MLImageSegmentation mlImageSegmentationResults) {. if (mlImageSegmentationResults != null) { //取得从图片中宰割出的人像前景图 foreground = mlImageSegmentationResults.getForeground(); preview.setImageBitmap(MainActivity.this.foreground); } } }).addOnFailureListener(new OnFailureListener() { @Override public 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 最新技术资讯~