如何实施
可以使用图像分类华为ML套件服务。它将图像中的元素分类为直观的类别,以定义图像主题和使用场景。该服务既支持设备上的识别模式,也支持云上的识别模式,前者识别400多个类别的项目,后者识别12000多个类别。它还允许创建自定义图像分类模型。
制剂
1.创建一个应用程序的应用程序连接和配置签名证书指纹。
2.配置华为Maven存储库地址,并添加对图像分类服务的构建依赖项。
- <pstyle="line-height: 1.5em;">dependencies{
- // Import the basic SDK.
- implementation'com.huawei.hms:ml-computer-vision-classification:2.0.1.300'
- // Import the image classification model package.
- implementation'com.huawei.hms:ml-computer-vision-image-classification-model:2.0.1.300'
- }</p>
3.自动更新机器学习模型。
将下列语句添加到AndroidManifest.xml档案。当用户从华为应用程序库安装应用程序后,机器学习模型将自动更新到用户的设备上。
- <pstyle="line-height: 1.5em;"><manifest
- ...
- <meta-data
- android:name="com.huawei.hms.ml.DEPENDENCY"
- android:value="label"/>
- ...
- </manifest></p>
4.配置混淆脚本。
有关详细信息,请参阅ML工具包。发展指南华为的开发者。
5.在AndroidManifest.xml档案。
要通过照相机或相册获取图像,您需要在文件中申请相关权限。
XML
- <pstyle="line-height: 1.5em;"><uses-permissionandroid:name="android.permission.CAMERA"/>
- <uses-permissionandroid:name="android.permission.INTERNET"/>
- <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>
- <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
- <uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE"/>
- <uses-featureandroid:name="android.hardware.camera"/>
- <uses-featureandroid:name="android.hardware.camera.autofocus"/></p>
发展过程
1.创建和配置云上图像分类分析器。
为图像分类分析器创建一个类。
<p style="line-height: 1.5em;">public class RemoteImageClassificationTransactor extends BaseTransactor<List<MLImageClassification>> </p>
在类中,使用自定义类(MLRemoteClassficationAnalyzerSet)若要创建分析器、设置相关参数并配置处理程序,请执行以下操作。
- <pstyle="line-height: 1.5em;">privatefinalMLImageClassificationAnalyzerdetector;
- privateHandlerhandler;MLRemoteClassificationAnalyzerSettingoptions=newMLRemoteClassificationAnalyzerSetting.Factory().setMinAcceptablePossibility(0f).create();
- this.detector=MLAnalyzerFactory.getInstance().getRemoteImageClassificationAnalyzer(options);this.handler=handler;
- </p>
2.呼叫异步分析框架处理图像。
异步分类输入MLFrame对象。
- <pstyle="line-height: 1.5em;">@Override
- protectedTask<List<MLImageClassification>>detectInImage(MLFrameimage) {
- returnthis.detector.asyncAnalyseFrame(image);
- }
- </p>
3.获得成功的分类结果。
覆盖成功方法图像分类转换器若要在图像中显示可识别对象的名称,请执行以下操作。
- <pstyle="line-height: 1.5em;">@Override
- protectedvoidonSuccess(
- BitmaporiginalCameraImage,
- List<MLImageClassification>classifications,
- FrameMetadataframeMetadata,
- GraphicOverlaygraphicOverlay) {
- graphicOverlay.clear();
- this.handler.sendEmptyMessage(Constant.GET_DATA_SUCCESS);
- List<String>classificationList=newArrayList<>();
- for(inti=0;i<classifications.size();++i) {
- MLImageClassificationclassification=classifications.get(i);
- if(classification.getName()!=null) {
- classificationList.add(classification.getName());
- }
- }
- RemoteImageClassificationGraphicremoteImageClassificationGraphic=
- newRemoteImageClassificationGraphic(graphicOverlay,this.mContext,classificationList);
- graphicOverlay.addGraphic(remoteImageClassificationGraphic);
- graphicOverlay.postInvalidate();
- }
- </p>
如果识别失败,处理错误并检查日志中的失败原因。
- <pstyle="line-height: 1.5em;">@Override
- protectedvoidonFailure(Exceptione) {
- this.handler.sendEmptyMessage(Constant.GET_DATA_FAILED);
- Log.e(RemoteImageClassificationTransactor.TAG,"Remote image classification detection failed: "+e.getMessage());
- }
- </p>
4.在认可结束时释放资源。
识别结束时,停止分析器,释放检测资源,并覆盖停()方法图像分类转换器.
- <pstyle="line-height: 1.5em;">@Override
- publicvoidstop() {
- super.stop();
- try{
- this.detector.stop();
- }catch(IOExceptione) {
- Log.e(RemoteImageClassificationTransactor.TAG,
- "Exception thrown while trying to close remote image classification transactor"+e.getMessage());
- }
- }
- </p>