文档管理中心

此版本文档已归档不再维护,推荐您使用最新版本

指南机器学习服务图片类服务开发对象检测与跟踪开发步骤

对象检测与跟踪开发步骤

在开始API开发工作之前,您需要完成必要的开发准备工作,同时请确保您的工程中已经配置HMS Core SDK的maven仓地址,并且完成了本服务的SDK集成

静态图片检测

1. 创建对象分析器。

收起
自动换行
深色代码主题
复制
  1. // 静态图片使用MLObjectAnalyzerSetting.TYPE_PICTURE。
  2. MLObjectAnalyzerSetting setting = new MLObjectAnalyzerSetting.Factory()
  3.    .setAnalyzerType(MLObjectAnalyzerSetting.TYPE_PICTURE)
  4.    .allowMultiResults()
  5.    .allowClassification()
  6.    .create();
  7. MLObjectAnalyzer analyzer = MLAnalyzerFactory.getInstance().getLocalObjectAnalyzer(setting);

2. 通过android.graphics.Bitmap创建MLFrame对象用于分析器检测图片,支持的图片格式包括:jpg/jpeg/png,建议图片尺寸不小于288*288像素。

收起
自动换行
深色代码主题
复制
  1. // 通过bitmap创建MLFrame,bitmap为输入的Bitmap格式图片数据。
  2. MLFrame frame = MLFrame.fromBitmap(bitmap);

3. 调用“asyncAnalyseFrame”方法进行对象检测。

收起
自动换行
深色代码主题
复制
  1. // 创建一个task,处理对象检测器返回的结果。
  2. Task<List<MLObject>> task = analyzer.asyncAnalyseFrame(frame);
  3. // 异步处理对象检测器返回结果。
  4. task.addOnSuccessListener(new OnSuccessListener<List<MLObject>>() {
  5.    @Override
  6.    public void onSuccess(List<MLObject> objects) {
  7.        // 检测成功处理。
  8.    }
  9. }).addOnFailureListener(new OnFailureListener() {
  10.    @Override
  11.    public void onFailure(Exception e) {
  12.        // 检测失败处理。
  13.    }
  14. });

4. 检测完成,停止分析器,释放检测资源。

收起
自动换行
深色代码主题
复制
  1. if (analyzer != null) {
  2.    try {
  3.        analyzer.stop();
  4.    } catch (IOException e) {
  5.        // 异常处理。
  6.    }
  7. }

5. 以上示例代码中使用了异步调用方式,对象检测还支持同步调用使用analyseFrame函数获取检测结果:

收起
自动换行
深色代码主题
复制
  1. SparseArray<MLObject> objects = analyzer.analyseFrame(frame);

视频流检测

开发者可以自行处理视频流,将视频帧转换为MLFrame对象,再按上文中静态图像检测的方法进行对象检测。如果开发者调用的是同步检测接口,也可以使用SDK内置的LensEngine类实现视频流对象检测,示例代码如下:

1. 创建对象分析器。

收起
自动换行
深色代码主题
复制
  1. MLObjectAnalyzer analyzer =
  2. MLAnalyzerFactory.getInstance().getLocalObjectAnalyzer();

2. 开发者创建识别结果处理类ObjectAnalyzerTransactor,该类实现MLAnalyzer.MLTransactor<T>接口,使用该接口中的transactResult方法获取检测结果并实现具体业务。

收起
自动换行
深色代码主题
复制
  1. public class ObjectAnalyzerTransactor implements MLAnalyzer.MLTransactor<MLObject> {
  2.    @Override
  3.    public void transactResult(MLAnalyzer.Result<MLObject> results) {
  4.        SparseArray<MLObject> items = results.getAnalyseList();
  5.        // 开发者根据需要处理识别结,需要注意,这里只对检测结果进行处理,
  6.        // 不可调用ML kit提供的其他检测相关接口。
  7.    }
  8.    @Override
  9.    public void destroy() {
  10.        // 检测结束回调方法,用于释放资源等。
  11.    }
  12. }

3. 设置识别结果处理器,实现分析器与结果处理器的绑定。

收起
自动换行
深色代码主题
复制
  1. analyzer.setTransactor(new ObjectAnalyzerTransactor());

4. 创建LensEngine,该类由ML SDK提供,用于捕捉相机动态视频流并传入分析器。

收起
自动换行
深色代码主题
复制
  1. Context context = this.getApplicationContext();
  2. this.lensEngine = new LensEngine.Creator(context, this.analyzer)
  3.    .setLensType(LensEngine.BACK_LENS)
  4.    .applyDisplayDimension(1440, 1080)
  5.    .applyFps(30.0f)
  6.    .enableAutomaticFocus(true)
  7.    .create();

5. 调用run方法,启动相机,读取视频流,进行识别。

收起
自动换行
深色代码主题
复制
  1. // 请自行实现SurfaceView控件的其他逻辑。
  2. SurfaceView mSurfaceView = findViewById(R.id.surface_view);
  3. try {
  4.    lensEngine.run(mSurfaceView.getHolder());
  5. } catch (IOException e) {
  6.    // 异常处理逻辑。
  7. }

6. 检测完成,停止分析器,释放检测资源。

收起
自动换行
深色代码主题
复制
  1. if (analyzer != null) {
  2.    try {
  3.        analyzer.stop();
  4.    } catch (IOException e) {
  5.         // 异常处理。
  6.    }
  7. }
  8. if (lensEngine != null) {
  9.    lensEngine.release();
  10. }

使用视频流检测,继承MLAnalyzer.MLTransactor<T>完成检测处理结果时,如果需要实现检测到特定结果后停止检测,待特定结果处理完后继续检测的功能,可以参考视频流检测模式多次识别场景开发


本页面可能包含由第三方许可的内容,请参考具体描述
在 指南 中进行搜索
请输入您想要搜索的关键词