From 1206ecd5759015ef2324eba33e093a93486370f6 Mon Sep 17 00:00:00 2001 From: lvmeng <848755140@qq.com> Date: Tue, 10 Mar 2026 13:00:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=90=91=E9=87=8F=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E7=BB=93=E6=9E=9C=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sw/inbound/objbox/FoodModule.kt | 60 ++++++++++--------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/com/sw/inbound/objbox/FoodModule.kt b/app/src/main/java/com/sw/inbound/objbox/FoodModule.kt index e19ffc9..2fb929d 100644 --- a/app/src/main/java/com/sw/inbound/objbox/FoodModule.kt +++ b/app/src/main/java/com/sw/inbound/objbox/FoodModule.kt @@ -47,6 +47,7 @@ object FoodModule { private const val MODEL_INPUT_WIDTH = 300 private const val MODEL_INPUT_HEIGHT = 300 const val DEFAULT_FOOD_INDEX = -1 + const val DEFAULT_QUERY_COUNT = 50 const val BAG_RATE = 0.05 @@ -94,7 +95,7 @@ object FoodModule { return null } -// fun queryFood(uri: Uri, queryCount: Int = 15): List? { +// fun queryFood(uri: Uri, queryCount: Int = DEFAULT_QUERY_COUNT): List? { // return uri2FloatArray(uri)?.let { // queryFood(it, queryCount) // } @@ -103,7 +104,7 @@ object FoodModule { // /** // * 返回识别物品名称列表 // */ -// fun queryFood(bitmap: Bitmap, queryCount: Int = 15): List { +// fun queryFood(bitmap: Bitmap, queryCount: Int = DEFAULT_QUERY_COUNT): List { // val floatArray = bitmap2FloatArray(bitmap) // return queryFood(floatArray, queryCount) // } @@ -111,14 +112,14 @@ object FoodModule { // /** // * 返回识别物品IdNameScore对象列表 // */ -// fun queryFoodNameScore(bitmap: Bitmap, queryCount: Int = 15): List { +// fun queryFoodNameScore(bitmap: Bitmap, queryCount: Int = DEFAULT_QUERY_COUNT): List { // val floatArray = bitmap2FloatArray(bitmap) // return queryFoodNameScore(floatArray, queryCount) // } suspend fun queryFoodNameScore( floatArray: FloatArray?, - queryCount: Int = 15 + queryCount: Int = DEFAULT_QUERY_COUNT ): List { if (floatArray == null) return emptyList() // val query: Query = box.query(Food_.foodVector.nearestNeighbors(floatArray, queryCount)).build() @@ -143,7 +144,7 @@ object FoodModule { return nameScoreList } - suspend fun getFoodScoreList(bitmap: Bitmap, queryCount: Int = 15): List { + suspend fun getFoodScoreList(bitmap: Bitmap, queryCount: Int = DEFAULT_QUERY_COUNT): List { val floatArray = bitmap2FloatArray(bitmap, false) ?: return emptyList() logInfo("getFoodScoreList向量:${floatArray.toJsonString()}") val nameScoreList = queryFoodNameScore(floatArray, queryCount) @@ -156,34 +157,35 @@ object FoodModule { .groupBy { it.name } .map { (_, value) -> value.minByOrNull { it.score }!! } .toMutableList() - val map = mutableMapOf() - nameScoreList.forEach { - val key = it.name - val count = map[key] ?: 0 - map[key] = count + 1 - } - val orderList = map.entries.sortedByDescending { it.value }.map { it.key }.toMutableList() - val firstFood = nameScoreList[0].name - orderList.remove(firstFood) - orderList.add(0, firstFood) - - val sortedScoreList = maxScoreList.sortedWith(compareBy { - orderList.indexOf(it.name) - }) +// val map = mutableMapOf() +// nameScoreList.forEach { +// val key = it.name +// val count = map[key] ?: 0 +// map[key] = count + 1 +// } +// val orderList = map.entries.sortedByDescending { it.value }.map { it.key }.toMutableList() +// val firstFood = nameScoreList[0].name +// orderList.remove(firstFood) +// orderList.add(0, firstFood) +// +// val sortedScoreList = maxScoreList.sortedWith(compareBy { +// orderList.indexOf(it.name) +// }) + val sortedScoreList = maxScoreList.sortedBy { it.score } logInfo("getFoodScoreList数据:${sortedScoreList.toJsonString()}") return sortedScoreList } - suspend fun queryFood(floatArray: FloatArray, queryCount: Int = 15): List { - val map = mutableMapOf() - val nameScoreList = queryFoodNameScore(floatArray, queryCount) - nameScoreList.filter { it.score < 0.05 }.forEach { - val count = map[it.name] ?: 0 - map[it.name] = count + 1 - } - val list = map.entries.sortedByDescending { it.value }.map { it.key } - return list - } +// suspend fun queryFood(floatArray: FloatArray, queryCount: Int = DEFAULT_QUERY_COUNT): List { +// val map = mutableMapOf() +// val nameScoreList = queryFoodNameScore(floatArray, queryCount) +// nameScoreList.filter { it.score < 0.05 }.forEach { +// val count = map[it.name] ?: 0 +// map[it.name] = count + 1 +// } +// val list = map.entries.sortedByDescending { it.value }.map { it.key } +// return list +// } data class IdNameScore( val id: Long,