diff --git "a/20240616\345\256\211\345\205\250\345\261\225\344\273\243\347\240\201\345\244\207\344\273\275.zip" "b/20240616\345\256\211\345\205\250\345\261\225\344\273\243\347\240\201\345\244\207\344\273\275.zip" deleted file mode 100644 index 2ad76e6..0000000 --- "a/20240616\345\256\211\345\205\250\345\261\225\344\273\243\347\240\201\345\244\207\344\273\275.zip" +++ /dev/null Binary files differ diff --git "a/20240616\345\256\211\345\205\250\345\261\225\344\273\243\347\240\201\345\244\207\344\273\275.zip" "b/20240616\345\256\211\345\205\250\345\261\225\344\273\243\347\240\201\345\244\207\344\273\275.zip" deleted file mode 100644 index 2ad76e6..0000000 --- "a/20240616\345\256\211\345\205\250\345\261\225\344\273\243\347\240\201\345\244\207\344\273\275.zip" +++ /dev/null Binary files differ diff --git a/app/src/main/cpp/yolo.cpp b/app/src/main/cpp/yolo.cpp index 2e12645..ae657a5 100644 --- a/app/src/main/cpp/yolo.cpp +++ b/app/src/main/cpp/yolo.cpp @@ -606,23 +606,19 @@ } for (const auto &item: objects) { - float array[4]; + float array[6]; array[0] = item.rect.x; array[1] = item.rect.y; array[2] = item.rect.width; array[3] = item.rect.height; + array[4] = (float) item.label; + array[5] = item.prob * 100; - char text[256]; - sprintf( - text, - "%d %f %f %f %f %.1f%%", - item.label, - array[0], array[1], array[2], array[3], - item.prob * 100 - ); + jfloatArray result_array = env->NewFloatArray(6); + env->SetFloatArrayRegion(result_array, 0, 6, array); //add - env->CallBooleanMethod(segment_array_obj, arraylist_add, env->NewStringUTF(text)); + env->CallBooleanMethod(segment_array_obj, arraylist_add, result_array); } } @@ -682,23 +678,19 @@ std::sort(objects.begin(), objects.end(), objects_area_greater); for (const auto &item: objects) { - float array[4]; + float array[6]; array[0] = item.rect.x; array[1] = item.rect.y; array[2] = item.rect.width; array[3] = item.rect.height; + array[4] = (float) item.label; + array[5] = item.prob * 100; - char text[256]; - sprintf( - text, - "%d %f %f %f %f %.1f%%", - item.label, - array[0], array[1], array[2], array[3], - item.prob * 100 - ); + jfloatArray result_array = env->NewFloatArray(6); + env->SetFloatArrayRegion(result_array, 0, 6, array); //add - env->CallBooleanMethod(detect_array_obj, arraylist_add, env->NewStringUTF(text)); + env->CallBooleanMethod(detect_array_obj, arraylist_add, result_array); } } @@ -815,26 +807,20 @@ //初始化ArrayList对象 jobject arraylist_obj = env->NewObject(list_clazz, arraylist_init); - for (int i = 0; i < count; i++) { - auto item = objects[i]; - - float array[4]; + for (const auto &item: objects) { + float array[6]; array[0] = item.rect.x; array[1] = item.rect.y; array[2] = item.rect.width; array[3] = item.rect.height; + array[4] = (float) item.label; + array[5] = item.prob * 100; - char text[256]; - sprintf( - text, - "%d %f %f %f %f %.1f%%", - item.label, - array[0], array[1], array[2], array[3], - item.prob * 100 - ); + jfloatArray result_array = env->NewFloatArray(6); + env->SetFloatArrayRegion(result_array, 0, 6, array); - //回调 - env->CallBooleanMethod(arraylist_obj, arraylist_add, env->NewStringUTF(text)); + //add + env->CallBooleanMethod(arraylist_obj, arraylist_add, result_array); } env->CallVoidMethod(j_callback, j_method_id, arraylist_obj); diff --git "a/20240616\345\256\211\345\205\250\345\261\225\344\273\243\347\240\201\345\244\207\344\273\275.zip" "b/20240616\345\256\211\345\205\250\345\261\225\344\273\243\347\240\201\345\244\207\344\273\275.zip" deleted file mode 100644 index 2ad76e6..0000000 --- "a/20240616\345\256\211\345\205\250\345\261\225\344\273\243\347\240\201\345\244\207\344\273\275.zip" +++ /dev/null Binary files differ diff --git a/app/src/main/cpp/yolo.cpp b/app/src/main/cpp/yolo.cpp index 2e12645..ae657a5 100644 --- a/app/src/main/cpp/yolo.cpp +++ b/app/src/main/cpp/yolo.cpp @@ -606,23 +606,19 @@ } for (const auto &item: objects) { - float array[4]; + float array[6]; array[0] = item.rect.x; array[1] = item.rect.y; array[2] = item.rect.width; array[3] = item.rect.height; + array[4] = (float) item.label; + array[5] = item.prob * 100; - char text[256]; - sprintf( - text, - "%d %f %f %f %f %.1f%%", - item.label, - array[0], array[1], array[2], array[3], - item.prob * 100 - ); + jfloatArray result_array = env->NewFloatArray(6); + env->SetFloatArrayRegion(result_array, 0, 6, array); //add - env->CallBooleanMethod(segment_array_obj, arraylist_add, env->NewStringUTF(text)); + env->CallBooleanMethod(segment_array_obj, arraylist_add, result_array); } } @@ -682,23 +678,19 @@ std::sort(objects.begin(), objects.end(), objects_area_greater); for (const auto &item: objects) { - float array[4]; + float array[6]; array[0] = item.rect.x; array[1] = item.rect.y; array[2] = item.rect.width; array[3] = item.rect.height; + array[4] = (float) item.label; + array[5] = item.prob * 100; - char text[256]; - sprintf( - text, - "%d %f %f %f %f %.1f%%", - item.label, - array[0], array[1], array[2], array[3], - item.prob * 100 - ); + jfloatArray result_array = env->NewFloatArray(6); + env->SetFloatArrayRegion(result_array, 0, 6, array); //add - env->CallBooleanMethod(detect_array_obj, arraylist_add, env->NewStringUTF(text)); + env->CallBooleanMethod(detect_array_obj, arraylist_add, result_array); } } @@ -815,26 +807,20 @@ //初始化ArrayList对象 jobject arraylist_obj = env->NewObject(list_clazz, arraylist_init); - for (int i = 0; i < count; i++) { - auto item = objects[i]; - - float array[4]; + for (const auto &item: objects) { + float array[6]; array[0] = item.rect.x; array[1] = item.rect.y; array[2] = item.rect.width; array[3] = item.rect.height; + array[4] = (float) item.label; + array[5] = item.prob * 100; - char text[256]; - sprintf( - text, - "%d %f %f %f %f %.1f%%", - item.label, - array[0], array[1], array[2], array[3], - item.prob * 100 - ); + jfloatArray result_array = env->NewFloatArray(6); + env->SetFloatArrayRegion(result_array, 0, 6, array); - //回调 - env->CallBooleanMethod(arraylist_obj, arraylist_add, env->NewStringUTF(text)); + //add + env->CallBooleanMethod(arraylist_obj, arraylist_add, result_array); } env->CallVoidMethod(j_callback, j_method_id, arraylist_obj); diff --git a/app/src/main/java/com/casic/br/ar/app/external/INativeCallback.kt b/app/src/main/java/com/casic/br/ar/app/external/INativeCallback.kt index 5cfdc6c..4769f9e 100644 --- a/app/src/main/java/com/casic/br/ar/app/external/INativeCallback.kt +++ b/app/src/main/java/com/casic/br/ar/app/external/INativeCallback.kt @@ -9,10 +9,12 @@ /** * 分割 */ - fun onSegmentation(segmentationOutput: ArrayList, detectOutput: ArrayList) + fun onSegmentation( + segmentationOutput: ArrayList, detectOutput: ArrayList + ) /** * 检测 */ - fun onDetect(output: ArrayList) + fun onDetect(output: ArrayList) } \ No newline at end of file diff --git "a/20240616\345\256\211\345\205\250\345\261\225\344\273\243\347\240\201\345\244\207\344\273\275.zip" "b/20240616\345\256\211\345\205\250\345\261\225\344\273\243\347\240\201\345\244\207\344\273\275.zip" deleted file mode 100644 index 2ad76e6..0000000 --- "a/20240616\345\256\211\345\205\250\345\261\225\344\273\243\347\240\201\345\244\207\344\273\275.zip" +++ /dev/null Binary files differ diff --git a/app/src/main/cpp/yolo.cpp b/app/src/main/cpp/yolo.cpp index 2e12645..ae657a5 100644 --- a/app/src/main/cpp/yolo.cpp +++ b/app/src/main/cpp/yolo.cpp @@ -606,23 +606,19 @@ } for (const auto &item: objects) { - float array[4]; + float array[6]; array[0] = item.rect.x; array[1] = item.rect.y; array[2] = item.rect.width; array[3] = item.rect.height; + array[4] = (float) item.label; + array[5] = item.prob * 100; - char text[256]; - sprintf( - text, - "%d %f %f %f %f %.1f%%", - item.label, - array[0], array[1], array[2], array[3], - item.prob * 100 - ); + jfloatArray result_array = env->NewFloatArray(6); + env->SetFloatArrayRegion(result_array, 0, 6, array); //add - env->CallBooleanMethod(segment_array_obj, arraylist_add, env->NewStringUTF(text)); + env->CallBooleanMethod(segment_array_obj, arraylist_add, result_array); } } @@ -682,23 +678,19 @@ std::sort(objects.begin(), objects.end(), objects_area_greater); for (const auto &item: objects) { - float array[4]; + float array[6]; array[0] = item.rect.x; array[1] = item.rect.y; array[2] = item.rect.width; array[3] = item.rect.height; + array[4] = (float) item.label; + array[5] = item.prob * 100; - char text[256]; - sprintf( - text, - "%d %f %f %f %f %.1f%%", - item.label, - array[0], array[1], array[2], array[3], - item.prob * 100 - ); + jfloatArray result_array = env->NewFloatArray(6); + env->SetFloatArrayRegion(result_array, 0, 6, array); //add - env->CallBooleanMethod(detect_array_obj, arraylist_add, env->NewStringUTF(text)); + env->CallBooleanMethod(detect_array_obj, arraylist_add, result_array); } } @@ -815,26 +807,20 @@ //初始化ArrayList对象 jobject arraylist_obj = env->NewObject(list_clazz, arraylist_init); - for (int i = 0; i < count; i++) { - auto item = objects[i]; - - float array[4]; + for (const auto &item: objects) { + float array[6]; array[0] = item.rect.x; array[1] = item.rect.y; array[2] = item.rect.width; array[3] = item.rect.height; + array[4] = (float) item.label; + array[5] = item.prob * 100; - char text[256]; - sprintf( - text, - "%d %f %f %f %f %.1f%%", - item.label, - array[0], array[1], array[2], array[3], - item.prob * 100 - ); + jfloatArray result_array = env->NewFloatArray(6); + env->SetFloatArrayRegion(result_array, 0, 6, array); - //回调 - env->CallBooleanMethod(arraylist_obj, arraylist_add, env->NewStringUTF(text)); + //add + env->CallBooleanMethod(arraylist_obj, arraylist_add, result_array); } env->CallVoidMethod(j_callback, j_method_id, arraylist_obj); diff --git a/app/src/main/java/com/casic/br/ar/app/external/INativeCallback.kt b/app/src/main/java/com/casic/br/ar/app/external/INativeCallback.kt index 5cfdc6c..4769f9e 100644 --- a/app/src/main/java/com/casic/br/ar/app/external/INativeCallback.kt +++ b/app/src/main/java/com/casic/br/ar/app/external/INativeCallback.kt @@ -9,10 +9,12 @@ /** * 分割 */ - fun onSegmentation(segmentationOutput: ArrayList, detectOutput: ArrayList) + fun onSegmentation( + segmentationOutput: ArrayList, detectOutput: ArrayList + ) /** * 检测 */ - fun onDetect(output: ArrayList) + fun onDetect(output: ArrayList) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ar/app/external/YoloResult.java b/app/src/main/java/com/casic/br/ar/app/external/YoloResult.java index be9d419..0f0401f 100644 --- a/app/src/main/java/com/casic/br/ar/app/external/YoloResult.java +++ b/app/src/main/java/com/casic/br/ar/app/external/YoloResult.java @@ -1,18 +1,10 @@ package com.casic.br.ar.app.external; public class YoloResult { - private int type; private float[] position; + private int type; private String prob; - public int getType() { - return type; - } - - public void setType(int type) { - this.type = type; - } - public float[] getPosition() { return position; } @@ -21,6 +13,14 @@ this.position = position; } + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + public String getProb() { return prob; } diff --git "a/20240616\345\256\211\345\205\250\345\261\225\344\273\243\347\240\201\345\244\207\344\273\275.zip" "b/20240616\345\256\211\345\205\250\345\261\225\344\273\243\347\240\201\345\244\207\344\273\275.zip" deleted file mode 100644 index 2ad76e6..0000000 --- "a/20240616\345\256\211\345\205\250\345\261\225\344\273\243\347\240\201\345\244\207\344\273\275.zip" +++ /dev/null Binary files differ diff --git a/app/src/main/cpp/yolo.cpp b/app/src/main/cpp/yolo.cpp index 2e12645..ae657a5 100644 --- a/app/src/main/cpp/yolo.cpp +++ b/app/src/main/cpp/yolo.cpp @@ -606,23 +606,19 @@ } for (const auto &item: objects) { - float array[4]; + float array[6]; array[0] = item.rect.x; array[1] = item.rect.y; array[2] = item.rect.width; array[3] = item.rect.height; + array[4] = (float) item.label; + array[5] = item.prob * 100; - char text[256]; - sprintf( - text, - "%d %f %f %f %f %.1f%%", - item.label, - array[0], array[1], array[2], array[3], - item.prob * 100 - ); + jfloatArray result_array = env->NewFloatArray(6); + env->SetFloatArrayRegion(result_array, 0, 6, array); //add - env->CallBooleanMethod(segment_array_obj, arraylist_add, env->NewStringUTF(text)); + env->CallBooleanMethod(segment_array_obj, arraylist_add, result_array); } } @@ -682,23 +678,19 @@ std::sort(objects.begin(), objects.end(), objects_area_greater); for (const auto &item: objects) { - float array[4]; + float array[6]; array[0] = item.rect.x; array[1] = item.rect.y; array[2] = item.rect.width; array[3] = item.rect.height; + array[4] = (float) item.label; + array[5] = item.prob * 100; - char text[256]; - sprintf( - text, - "%d %f %f %f %f %.1f%%", - item.label, - array[0], array[1], array[2], array[3], - item.prob * 100 - ); + jfloatArray result_array = env->NewFloatArray(6); + env->SetFloatArrayRegion(result_array, 0, 6, array); //add - env->CallBooleanMethod(detect_array_obj, arraylist_add, env->NewStringUTF(text)); + env->CallBooleanMethod(detect_array_obj, arraylist_add, result_array); } } @@ -815,26 +807,20 @@ //初始化ArrayList对象 jobject arraylist_obj = env->NewObject(list_clazz, arraylist_init); - for (int i = 0; i < count; i++) { - auto item = objects[i]; - - float array[4]; + for (const auto &item: objects) { + float array[6]; array[0] = item.rect.x; array[1] = item.rect.y; array[2] = item.rect.width; array[3] = item.rect.height; + array[4] = (float) item.label; + array[5] = item.prob * 100; - char text[256]; - sprintf( - text, - "%d %f %f %f %f %.1f%%", - item.label, - array[0], array[1], array[2], array[3], - item.prob * 100 - ); + jfloatArray result_array = env->NewFloatArray(6); + env->SetFloatArrayRegion(result_array, 0, 6, array); - //回调 - env->CallBooleanMethod(arraylist_obj, arraylist_add, env->NewStringUTF(text)); + //add + env->CallBooleanMethod(arraylist_obj, arraylist_add, result_array); } env->CallVoidMethod(j_callback, j_method_id, arraylist_obj); diff --git a/app/src/main/java/com/casic/br/ar/app/external/INativeCallback.kt b/app/src/main/java/com/casic/br/ar/app/external/INativeCallback.kt index 5cfdc6c..4769f9e 100644 --- a/app/src/main/java/com/casic/br/ar/app/external/INativeCallback.kt +++ b/app/src/main/java/com/casic/br/ar/app/external/INativeCallback.kt @@ -9,10 +9,12 @@ /** * 分割 */ - fun onSegmentation(segmentationOutput: ArrayList, detectOutput: ArrayList) + fun onSegmentation( + segmentationOutput: ArrayList, detectOutput: ArrayList + ) /** * 检测 */ - fun onDetect(output: ArrayList) + fun onDetect(output: ArrayList) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ar/app/external/YoloResult.java b/app/src/main/java/com/casic/br/ar/app/external/YoloResult.java index be9d419..0f0401f 100644 --- a/app/src/main/java/com/casic/br/ar/app/external/YoloResult.java +++ b/app/src/main/java/com/casic/br/ar/app/external/YoloResult.java @@ -1,18 +1,10 @@ package com.casic.br.ar.app.external; public class YoloResult { - private int type; private float[] position; + private int type; private String prob; - public int getType() { - return type; - } - - public void setType(int type) { - this.type = type; - } - public float[] getPosition() { return position; } @@ -21,6 +13,14 @@ this.position = position; } + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + public String getProb() { return prob; } diff --git a/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt index 3581dde..71d952b 100644 --- a/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt +++ b/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt @@ -123,48 +123,22 @@ } override fun onSegmentation( - segmentationOutput: ArrayList, detectOutput: ArrayList + segmentationOutput: ArrayList, detectOutput: ArrayList ) { //转成泛型集合 val segmentationResults = ArrayList() segmentationOutput.forEach { - val yolo = YoloResult() - - val strings = it.split(" ") - yolo.type = strings.first().toInt() - - val array = FloatArray(4) - array[0] = strings[1].toFloat() - array[1] = strings[2].toFloat() - array[2] = strings[3].toFloat() - array[3] = strings[4].toFloat() - yolo.position = array - - yolo.prob = strings.last() - segmentationResults.add(yolo) + segmentationResults.add(it.convert2YoloResult()) } val detectResults = ArrayList() detectOutput.forEach { - val yolo = YoloResult() - - val strings = it.split(" ") - yolo.type = strings.first().toInt() - - val array = FloatArray(4) - array[0] = strings[1].toFloat() - array[1] = strings[2].toFloat() - array[2] = strings[3].toFloat() - array[3] = strings[4].toFloat() - yolo.position = array - - yolo.prob = strings.last() - detectResults.add(yolo) + detectResults.add(it.convert2YoloResult()) } binding.detectView.updateTargetPosition(segmentationResults, detectResults) } - override fun onDetect(output: ArrayList) { + override fun onDetect(output: ArrayList) { lifecycleScope.launch(Dispatchers.Main) { binding.titleView.text = detectedScene } @@ -172,24 +146,33 @@ //转成泛型集合 val results = ArrayList() output.forEach { - val yolo = YoloResult() - - val strings = it.split(" ") - yolo.type = strings.first().toInt() - - val array = FloatArray(4) - array[0] = strings[1].toFloat() - array[1] = strings[2].toFloat() - array[2] = strings[3].toFloat() - array[3] = strings[4].toFloat() - yolo.position = array - - yolo.prob = strings.last() - results.add(yolo) + results.add(it.convert2YoloResult()) } binding.detectView.updateTargetPosition(results) } + private fun FloatArray.convert2YoloResult(): YoloResult { + /** + * 前四位是目标Rect,第五位是目标名对应的角标,第六位是可信度 + * + * [135.88397,120.17752,68.061325,204.02115,28.0,43.642334] + * */ + val yolo = YoloResult() + + val array = FloatArray(4) + array[0] = this[0] + array[1] = this[1] + array[2] = this[2] + array[3] = this[3] + yolo.position = array + + yolo.type = this[4].toInt() + + //保留两位有效小数 + yolo.prob = "${String.format("%.2f", this[5])}%" + return yolo + } + override fun onResume() { super.onResume() yolov8ncnn.openCamera(1)