模型简述
iMobile支持用户使用自己训练的检测模型,也提供示例检测模型。示例训练模型能检测出80种不同物品。在实际工作中,被检测物品包含在这80种之内,或者试用产品功能,可以下载此模型。模型下载地址:https://pan.baidu.com/s/11ag0oA7s5OPx_wg6QsIYpg,提取码:bydd。
目标检测模型能够检测的物品如下表所示:
person 人 | bicycle 自行车 | car 汽车 | motorcycle 摩托车 | airplane 飞机 |
bus 公共汽车 | train 火车 | truck 卡车 | boat 船 | traffic light 信号灯 |
fire hydrant 消防栓 | stop sign 停车标志 | parking meter 停车计时器 | bench 长椅 | bird 鸟 |
cat 猫 | dog 狗 | horse 马 | sheep 羊 | cow 牛 |
elephant 大象 | bear 熊 | zebra斑马 | giraffe 长颈鹿 | backpack 背包 |
umbrella 雨伞 | handbag 手提包 | tie 领带 | suitcase 旅行箱 | frisbee 飞盘 |
skis 滑板 | snowboard 单板滑雪板 | sports ball 运动球 | kite 风筝 | baseball bat 棒球棒 |
baseball glove 棒球手套 | skateboard 滑板 | surfboard 冲浪板 | tennis racket 网球拍 | bottle 瓶子 |
wine glass 酒杯 | cup 杯子 | fork 叉子 | knife 刀 | spoon 勺 |
bowl 碗 | banana 香蕉 | apple 苹果 | sandwich 三明治 | orange 桔子 |
broccoli 西兰花 | carrot 胡萝卜 | hot dog 热狗 | pizza 披萨 | donut多纳圈 |
cake 蛋糕 | chair 椅子 | couch 长沙发 | potted plant 盆栽植物 | bed 床 |
dining table 餐桌 | toilet 马桶 | tv 电视 | laptop 手提电脑 | mouse 鼠标 |
remote 遥控器 | keyboard 键盘 | cell phone 电话 | microwave 微波炉 | oven 烤箱 |
toaster 吐司炉 | sink 洗碗槽 | refrigerator 冰箱 | book 书 | clock 表 |
vase 花瓶 | cissors 剪刀 | teddy bear 泰迪熊 | hair drier 吹风机 | toothbrush 牙刷 |
开发准备
(1).添加类库
添加com.supermap.ai.jar、com.supermap.data.jar、okhttp-3.9.0.jar、okio-1.13.0.jar等jar包, libimb2d_v1000.so、libeasypusher.so 、libhyperlpr.so 、libopencv_java3.so 、libproffmpeg.so 、libtensorflow_demo.so、libtensorflow_inference.so、libtensorflowlite_jni.so、libTxtOverlay.so、libUtils.so、libVideoCodecer.so、libx264enc.so等so库到工程中。上述类库在产品包中的libs文件夹下,详情见“开发指南\开发包介绍"。
图:“目标检测”添加类库示意 |
(2).添加脚本
在工程的build.gradle(“..\app”目录下)文件中,添加如下代码:
aaptOptions {
noCompress "tflite"
noCompress "lite"
}
(3).添加训练文件
支持示例模型或满足格式的自训练模型。可通过两种方式加载模型文件。
第一种:将训练模型文件拷贝到工程的“..\app\src\main\assets目录下。模型下载地址:https://pan.baidu.com/s/11ag0oA7s5OPx_wg6QsIYpg,提取码:bydd。
图:“目标检测”加载训练模型示意 |
第二种:将训练模型文件拷贝到移动设备上使用。
通过AIDetectViewInfo. fileType设置选择哪种文件加载方式,通过AIDetectViewInfo. modeFile、AIDetectViewInfo. lableFile设置对应的文件。
(4).添加AIDetectView控件
<com.supermap.ai.AIDetectView
android:id="@+id/test_arcontrol"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:visibility="visible"/>
编写代码
操作步骤:
① 参数设置:通过AIDetectViewInfo设置必须的参数。
② 初始化:利用AIDetectView类进行初始化和设置。
③ 监听设置:通过setDetectedListener()方法,添加监听。
参考代码:
//①设置初始化参数
AIDetectViewInfo aidetectViewInfo = new AIDetectViewInfo();
aidetectViewInfo.assetManager = getAssets(); //存放模型文件的assetManager
fileType = AIDetectViewInfo.FileType.ASSETS_FILE;//设置文件类型
aidetectViewInfo.modeFile = "detect.tflite"; //模型文件路径
aidetectViewInfo.lableFile = "labelmap.txt"; //标签文件路径
aidetectViewInfo.inputSize = 300; //输入尺寸
aidetectViewInfo.isQUANTIZED = true; //是否量化模型
//②初始化
m_AIdetectView = (AIDetectView) findViewById(R.id.test_arcontrol);
m_AIdetectView.setDetectInfo(aidetectViewInfo); //设置参数
m_AIdetectView.init(); //初始化
m_AIdetectView.setDetectArrayToUse(m_vecStringUseTypes); //设置选择分类数组
m_AIdetectView.setDetectInterval(0); //设置识别时间间隔
//③设置识别结果监听
m_AIdetectView.setDetectedListener(new AIDetectView.DetectListener() {
@Override
public void onDectetComplete(Map<String, Integer> map) {//流量统计结果监听
}
@Override
public void onProcessDetectResult(List<AIRecognition> list) {//图像识别结果监听
}
@Override
public void onTrackedCountChanged(int i) { //跟踪计数结果监听
}
@Override
public void onAISizeChanged(AISize aiSize) {
}
});
图:目标检测 |
在目标检测的过程中,利用AIDetectView类的setisPolymerize()方法,进入聚类识别状态。
参考代码:
if (m_AIdetectView.isPolymerize()) //判断是否聚合模式
{
m_AIdetectView.setisPolymerize(false); //设置为非聚合模式
}
else
{
m_AIdetectView.setisPolymerize(true); //设置为聚合模式
m_AIdetectView.setPolymerizeThreshold(400,400); //设置聚合模式阈值
}
图:目标检测聚类识别 |
在目标检测的过程中,利用AIDetectView类的startCountTrackedObjs()方法和stopCountTrackedObjs()方法,控制是否进行动态目标跟踪。
m_AIdetectView.startCountTrackedObjs(); //开始跟踪计数
m_AIdetectView.stopCountTrackedObjs(); //停止跟踪计数
图:目标检测跟踪计数 |
以上示例代码下载地址:https://pan.baidu.com/s/11ag0oA7s5OPx_wg6QsIYpg,提取码:bydd。