当前位置: 首页 > 后端技术 > Java

从菜鸟到专家,HMSCore图像分割服务教你如何在复杂背景下精细切割图像

时间:2023-04-02 01:27:04 Java

2021年以来,自动驾驶赛道进入爆发期,这个行业成为各大厂商和初创企业的必争之地.其中很多公司都采用了计算机视觉作为自动驾驶的技术基础。只有通过图像分割技术,汽车才能有效地了解道路场景,区分哪里是路,哪里是人。除了自动驾驶领域,图像分割技术还经常出现在其他重要场景中,例如:医学图像分割:帮助医生进行诊断测试卫星图像分析:适用于对大量图像数据进行深入研究Video娱乐app:人像抠图,避免视频弹幕遮脸。因此,图像分割技术的应用非常重要和广泛。HMSCore机器学习服务的图像分割服务采用了创新的语义分割框架。这个框架标记了图像中的每个像素,甚至头发的细节都可以清晰完整地保留下来。此外,图像分割服务还提高了处理不同图像质量和尺寸图像的能力。针对分割算法中经常出现的白边,采用更加结构化的学习训练方式,使边缘更加自然。那么这种稳定且细粒度的切分能力是如何实现的呢?开发实践1.开发准备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{//importbasicSDKImplementation'com.huawei.hms:ml-computer-vision-segmentation:2.1.0.301'//在AndroidManifest中引入人像分割模型包实现'com.huawei.hms:ml-computer-vision-image-segmentation-body-model:2.1.0.303'}3。xml中添加权限//使用存储权限2.开发步骤@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);如果(!allPermissionsGranted()){getRuntimePermissions();}}privatebooleanallPermissionsGranted(){for(Stringpermission:getRequiredPermissions()){if(!isPermissionGranted(this,许可)){返回假;}}returntrue;}privatevoidgetRuntimePermissions(){ListallNeededPermissions=newArrayList<>();for(Stringpermission:getRequiredPermissions()){if(!isPermissionGranted(this,permission)){allNeededPermissions.add(permission);}}}if(!allNeededPermissions.isEmpty()){ActivityCompat.requestPermissions(this,allNeededPermissions.toArray(newString[0]),PERMISSION_REQUESTS);}}privatestaticbooleanisPermissionGranted(Contextcontext,Stringpermission){if(ContextCompat.checkSelfPermission(context,permission)==PackageManager.PERMISSION_GRANTED){返回真;}返回假;}privateString[]getRequiredPermissions(){try{PackageInfoinfo=this.getPackageManager().getPackageInfo(this.getPackageName(),PackageManager.GET_PER任务);String[]ps=info.requestedPermissions;if(ps!=null&&ps.length>0){返回ps;}else{返回新字符串[0];}}catch(RuntimeExceptione){抛出e;}catch(Exceptione){returnnewString[0];}}2创建图像分割检测器MLImageSegmentationSettingsetting=newMLImageSegmentationSetting.Factory()//设置为纵向分割.setAnalyzerType(MLImageSegmentationSetting.BODY_SEG).create();this.analyzer=MLAnalyzerFactory.getInstance().getImageSegmentationAnalyzer(setting);3通过android.graphics.Bitmap创建一个“MLFrame”对象供分析器检测图片MLFramemlFrame=newMLFrame.Creator().setBitmap(this.originBitmap).create();4调用“asyncAnalyseFrame”方法进行图像分割//创建一个任务来处理图像分割检测器返回的结果Tasktask=this.analyzer.asyncAnalyseFrame(mlFrame);//异步处理图像分割检测器返回的结果。task.addOnSuccessListener(newOnSuccessListener(){@OverridepublicvoidonSuccess(MLImageSegmentationmlImageSegmentationResults){.if(mlImageSegmentationResults!=null){//获取从图像前景分割出来的人像前景图像=mlImageSegmentationResults.getForeground();preview.setImageBitmap(MainActivity.this.foreground);}}}).addOnFailureListener(newOnFailureListener(){@OverridepublicvoidonFailure(Exceptione){return;}});5改变图片背景//从相册图片backgroundBitmap=Utils.loadFromPath(this,id,targetedSize.first,targetedSize.second);BitmapDrawabledrawable=newBitmapDrawable(backgroundBitmap);preview.setBackground(可绘制);preview.setImageBitmap(this.foreground);6更改图片背景MLFramemlFrame=newMLFrame.Creator().setBitmap(this.originBitmap).create();(demo演示视频如下)更多详情>>访问华为开发者联盟官网获取开发指导文档华为移动服务开源仓库地址:GitHub、Gitee关注我们,第一时间了解HMSCore最新技术资讯~