模型概述
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。