目的:在已经能够加载yolov5的一个模型的基础上,我们尝试实现多个yolov5模型的调用,框架图如下图。
已经实现的模型(new-fp16.tflite在11的文件夹中)
现在的尝试的架构
coco1.txt
indoor
outdoor
night
coco2.txt
stage
coco3.txt
zcrossing
wetroad
YoloV5Classifier.java
在new-fp16.tflite(用的是coco.txt标签文件)的模型加载下,我找到了标签的int型变量detectedClass,并定义了字符串变量leibie
运行结果
此时,我需要在其他java文件中调用leibie变量。
首先得装载好三个模型和三个标签文件
DetectorFactory.java
接着在DetectorFactory.java文件中编写调用的代码,并定义新的变量
定义新变量
String indoor = new String("0");
String outdoor = new String("1");
String night = new String("2");
代码
if (modelFilename.equals("1.tflite")) {
labelFilename = "file:///android_asset/coco1.txt";
isQuantized = false;
inputSize = 320;
output_width = new int[]{40, 20, 10};
masks = new int[][]{{0, 1, 2}, {3, 4, 5}, {6, 7, 8}};
anchors = new int[]{
10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326};
if (leibie.equals(indoor)) {
if (modelFilename.equals("2.tflite")) {
labelFilename = "file:///android_asset/coco2.txt";
isQuantized = false;
inputSize = 320;
output_width = new int[]{40, 20, 10};
masks = new int[][]{{0, 1, 2}, {3, 4, 5}, {6, 7, 8}};
anchors = new int[]{
10, 13, 16, 30, 33, 23, 30, 61, 62, 45, 59, 119, 116, 90, 156, 198, 373, 326
};
//标签
//2.tflite模型中主要为stage和室内平地的负样本
}
}
else if(leibie.equals(outdoor)) {
if (modelFilename.equals("3.tflite")) {
labelFilename = "file:///android_asset/coco3.txt";
isQuantized = false;
inputSize = 320;
output_width = new int[]{40, 20, 10};
masks = new int[][]{{0, 1, 2}, {3, 4, 5}, {6, 7, 8}};
anchors = new int[]{
10, 13, 16, 30, 33, 23, 30, 61, 62, 45, 59, 119, 116, 90, 156, 198, 373, 326
};
//标签
//3.tflite模型中主要为zcrossing、wetroad和室外的负样本(马路、水泥路、草地)
}
}
}
但是leibie变量报错无法引用,所以打算在最开始的部分引用leibie变量
引用完成后,DetectorActivity.java开始报错,因为在getDetector中多了一个字符型变量。
接下去就不知道如何操作了