目标检测

模型简述

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。