目标分类

模型概述

iMobile支持用户使用自己训练的检测模型,也提供示例分类模型。示例分类模型能检测出1001种不同物品。在实际工作中,需要分类的物品包含在这1001种之内,或者需要模型进行开发试用,可以使用此模型。示例模型中能够进行分类的地物可参照文件“SuperMap iMobile 目标分类示例模型分类项中英文对照列表.xlsx”。模型与文件的下载地址:https://pan.baidu.com/s/1NtSUsibv5383WHDHzxJlpA,提取码:gav2。

图:部分分类模型分类项示意

开发准备

(1).添加类库

添加com.supermap.ai.jar、com.supermap.data.jar等jar包,libimb2d.so、libtensorflowlite_jni.so等so库到工程中。类库下载地址:https://pan.baidu.com/s/1NtSUsibv5383WHDHzxJlpA,提取码:gav2。

图:“目标检测“添加类库示意

(2).添加脚本

在工程的build.gradle(“..\app”目录下)文件中,添加如下代码:

aaptOptions{
noCompress "tflite"
noCompress "lite"
}

(3).添加训练文件

支持示例模型或满足格式的自训练模型,可通过两种方式加载模型文件。

第一种:将训练模型文件拷贝到工程的“..\app\src\main\assets目录下。模型下载地址:https://pan.baidu.com/s/1NtSUsibv5383WHDHzxJlpA,提取码:gav2。

图:“目标分类”加载训练模型示意

第二种:将训练模型文件拷贝到移动设备上使用。

使用时,通过AIClassifierTFlite.create()的不同参数,设置是从工程中加载还是从设备中加载。

(4).添加CameraView控件

<com.wonderkiln.camerakit.CameraView
android:id="@+id/cameraView"
android:layout_width="500dp"
android:layout_height="500dp"
android:layout_gravity="center|top" />

编写代码

目标分类可以对设备中的存量图片进行识别,也可以识别实时拍摄的照片。

//初始化
m_executor.execute(new Runnable() {
  @Override
  public void run() {
    try {
      //构造分析器,使用工程中的训练模型
      m_classifierTFlite = AIClassifierTFlite.create(getAssets(),MODEL_FILE,LABEL_FILE,INPUT_SIZE,true);
    } catch (final Exception e) {
      throw new RuntimeException("Error initializing TensorFlow!", e);
    }
  }
});

(1).增量图片识别,先拍照,在回调中进行目标分类

//拍照(拍照前,请确保已申请相机权限)
m_cameraView.captureImage();
//在监听中分类识别图片
m_cameraView.addCameraKitListener(new CameraKitEventListener() {
  @Override
  public void onEvent(CameraKitEvent cameraKitEvent) {
  }
  @Override
  public void onError(CameraKitError cameraKitError) {
  }
  @Override
  public void onImage(CameraKitImage cameraKitImage) {
    Bitmap bitmap = cameraKitImage.getBitmap();
    bitmap = Bitmap.createScaledBitmap(bitmap, INPUT_SIZE, INPUT_SIZE, false);
    m_imageView.setImageBitmap(bitmap);
    final List<ClassifierTFlite.Recognition> results = m_classifierTFlite.recognizeImage(bitmap);
    String res = results.toString().replace(",", "").replace("[", "").replace("]", "").trim();
    m_textView.setText(res);
  }
  @Override
  public void onVideo(CameraKitVideo cameraKitVideo) {
  }
});
图:拍照分类

(2).存量图片识别,先选择图片,再进行目标分类

//拍照(拍照前,请确保已申请相机权限)
m_cameraView.captureImage();
//在监听中分类识别图片
m_cameraView.addCameraKitListener(new CameraKitEventListener() {
  @Override
  public void onEvent(CameraKitEvent cameraKitEvent) {
  }
  @Override
  public void onError(CameraKitError cameraKitError) {
  }
  @Override
  public void onImage(CameraKitImage cameraKitImage) {
    Bitmap bitmap = cameraKitImage.getBitmap();
    bitmap = Bitmap.createScaledBitmap(bitmap, INPUT_SIZE, INPUT_SIZE, false);
    m_imageView.setImageBitmap(bitmap);
    final List<ClassifierTFlite.Recognition> results = m_classifierTFlite.recognizeImage(bitmap);
    String res = results.toString().replace(",", "").replace("[", "").replace("]", "").trim();
    m_textView.setText(res);
  }
  @Override
  public void onVideo(CameraKitVideo cameraKitVideo) {
  }
});
图:选择图片分类

以上示例代码下载地址:https://pan.baidu.com/s/1NtSUsibv5383WHDHzxJlpA,提取码:gav2。