56 lines
1.9 KiB
Dart
56 lines
1.9 KiB
Dart
import 'package:observer/detection/detection_result.dart';
|
|
import 'package:observer/detection/detector_worker.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
DetectionResult box(String label, double score, double x, double y,
|
|
{int modelId = -1, String modelName = ''}) =>
|
|
DetectionResult(
|
|
label: label,
|
|
score: score,
|
|
left: x,
|
|
top: y,
|
|
right: x + 0.1,
|
|
bottom: y + 0.1,
|
|
modelId: modelId,
|
|
modelName: modelName,
|
|
);
|
|
|
|
void main() {
|
|
test('不同模型同标签重复框:NMS 去重取高分', () {
|
|
// 环颈雉鸡模型与野兔模型都检出了同一只"环颈雉鸡"(不同模型对同一目标的重复框)
|
|
final all = [
|
|
box('pheasant', 0.18, 0.3, 0.3, modelId: 1, modelName: '环颈雉鸡模型'),
|
|
box('pheasant', 0.55, 0.31, 0.3, modelId: 2, modelName: '野兔模型'),
|
|
];
|
|
final merged = mergeAcrossModels(all, 0.45);
|
|
expect(merged.length, 1);
|
|
expect(merged.first.score, 0.55);
|
|
expect(merged.first.modelName, '野兔模型');
|
|
});
|
|
|
|
test('不同类别互不压制', () {
|
|
final all = [
|
|
box('pheasant', 0.3, 0.5, 0.5, modelId: 1),
|
|
box('hare', 0.7, 0.5, 0.5, modelId: 2), // 同位置但不同类别
|
|
];
|
|
final merged = mergeAcrossModels(all, 0.45);
|
|
expect(merged.length, 2);
|
|
});
|
|
|
|
test('同模型内部与跨模型合并一致:远处不重叠保留', () {
|
|
final all = [
|
|
box('pheasant', 0.2, 0.1, 0.1, modelId: 1, modelName: '环颈雉鸡模型'),
|
|
box('pheasant', 0.3, 0.8, 0.8, modelId: 1, modelName: '环颈雉鸡模型'),
|
|
];
|
|
final merged = mergeAcrossModels(all, 0.45);
|
|
expect(merged.length, 2);
|
|
expect(merged.first.score, 0.3); // 按分排序
|
|
});
|
|
|
|
test('单条结果原样返回', () {
|
|
final single = [box('suspect', 0.11, 0.2, 0.2)];
|
|
final merged = mergeAcrossModels(single, 0.45);
|
|
expect(identical(merged, single), isTrue);
|
|
});
|
|
}
|