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,