优化向量查询结果数据
This commit is contained in:
@@ -47,6 +47,7 @@ object FoodModule {
|
|||||||
private const val MODEL_INPUT_WIDTH = 300
|
private const val MODEL_INPUT_WIDTH = 300
|
||||||
private const val MODEL_INPUT_HEIGHT = 300
|
private const val MODEL_INPUT_HEIGHT = 300
|
||||||
const val DEFAULT_FOOD_INDEX = -1
|
const val DEFAULT_FOOD_INDEX = -1
|
||||||
|
const val DEFAULT_QUERY_COUNT = 50
|
||||||
|
|
||||||
const val BAG_RATE = 0.05
|
const val BAG_RATE = 0.05
|
||||||
|
|
||||||
@@ -94,7 +95,7 @@ object FoodModule {
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
// fun queryFood(uri: Uri, queryCount: Int = 15): List<String>? {
|
// fun queryFood(uri: Uri, queryCount: Int = DEFAULT_QUERY_COUNT): List<String>? {
|
||||||
// return uri2FloatArray(uri)?.let {
|
// return uri2FloatArray(uri)?.let {
|
||||||
// queryFood(it, queryCount)
|
// queryFood(it, queryCount)
|
||||||
// }
|
// }
|
||||||
@@ -103,7 +104,7 @@ object FoodModule {
|
|||||||
// /**
|
// /**
|
||||||
// * 返回识别物品名称列表
|
// * 返回识别物品名称列表
|
||||||
// */
|
// */
|
||||||
// fun queryFood(bitmap: Bitmap, queryCount: Int = 15): List<String> {
|
// fun queryFood(bitmap: Bitmap, queryCount: Int = DEFAULT_QUERY_COUNT): List<String> {
|
||||||
// val floatArray = bitmap2FloatArray(bitmap)
|
// val floatArray = bitmap2FloatArray(bitmap)
|
||||||
// return queryFood(floatArray, queryCount)
|
// return queryFood(floatArray, queryCount)
|
||||||
// }
|
// }
|
||||||
@@ -111,14 +112,14 @@ object FoodModule {
|
|||||||
// /**
|
// /**
|
||||||
// * 返回识别物品IdNameScore对象列表
|
// * 返回识别物品IdNameScore对象列表
|
||||||
// */
|
// */
|
||||||
// fun queryFoodNameScore(bitmap: Bitmap, queryCount: Int = 15): List<IdNameScore> {
|
// fun queryFoodNameScore(bitmap: Bitmap, queryCount: Int = DEFAULT_QUERY_COUNT): List<IdNameScore> {
|
||||||
// val floatArray = bitmap2FloatArray(bitmap)
|
// val floatArray = bitmap2FloatArray(bitmap)
|
||||||
// return queryFoodNameScore(floatArray, queryCount)
|
// return queryFoodNameScore(floatArray, queryCount)
|
||||||
// }
|
// }
|
||||||
|
|
||||||
suspend fun queryFoodNameScore(
|
suspend fun queryFoodNameScore(
|
||||||
floatArray: FloatArray?,
|
floatArray: FloatArray?,
|
||||||
queryCount: Int = 15
|
queryCount: Int = DEFAULT_QUERY_COUNT
|
||||||
): List<IdNameScore> {
|
): List<IdNameScore> {
|
||||||
if (floatArray == null) return emptyList()
|
if (floatArray == null) return emptyList()
|
||||||
// val query: Query<Food> = box.query(Food_.foodVector.nearestNeighbors(floatArray, queryCount)).build()
|
// val query: Query<Food> = box.query(Food_.foodVector.nearestNeighbors(floatArray, queryCount)).build()
|
||||||
@@ -143,7 +144,7 @@ object FoodModule {
|
|||||||
return nameScoreList
|
return nameScoreList
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun getFoodScoreList(bitmap: Bitmap, queryCount: Int = 15): List<IdNameScore> {
|
suspend fun getFoodScoreList(bitmap: Bitmap, queryCount: Int = DEFAULT_QUERY_COUNT): List<IdNameScore> {
|
||||||
val floatArray = bitmap2FloatArray(bitmap, false) ?: return emptyList()
|
val floatArray = bitmap2FloatArray(bitmap, false) ?: return emptyList()
|
||||||
logInfo("getFoodScoreList向量:${floatArray.toJsonString()}")
|
logInfo("getFoodScoreList向量:${floatArray.toJsonString()}")
|
||||||
val nameScoreList = queryFoodNameScore(floatArray, queryCount)
|
val nameScoreList = queryFoodNameScore(floatArray, queryCount)
|
||||||
@@ -156,34 +157,35 @@ object FoodModule {
|
|||||||
.groupBy { it.name }
|
.groupBy { it.name }
|
||||||
.map { (_, value) -> value.minByOrNull { it.score }!! }
|
.map { (_, value) -> value.minByOrNull { it.score }!! }
|
||||||
.toMutableList()
|
.toMutableList()
|
||||||
val map = mutableMapOf<String, Int>()
|
// val map = mutableMapOf<String, Int>()
|
||||||
nameScoreList.forEach {
|
// nameScoreList.forEach {
|
||||||
val key = it.name
|
// val key = it.name
|
||||||
val count = map[key] ?: 0
|
// val count = map[key] ?: 0
|
||||||
map[key] = count + 1
|
// map[key] = count + 1
|
||||||
}
|
// }
|
||||||
val orderList = map.entries.sortedByDescending { it.value }.map { it.key }.toMutableList()
|
// val orderList = map.entries.sortedByDescending { it.value }.map { it.key }.toMutableList()
|
||||||
val firstFood = nameScoreList[0].name
|
// val firstFood = nameScoreList[0].name
|
||||||
orderList.remove(firstFood)
|
// orderList.remove(firstFood)
|
||||||
orderList.add(0, firstFood)
|
// orderList.add(0, firstFood)
|
||||||
|
//
|
||||||
val sortedScoreList = maxScoreList.sortedWith(compareBy {
|
// val sortedScoreList = maxScoreList.sortedWith(compareBy {
|
||||||
orderList.indexOf(it.name)
|
// orderList.indexOf(it.name)
|
||||||
})
|
// })
|
||||||
|
val sortedScoreList = maxScoreList.sortedBy { it.score }
|
||||||
logInfo("getFoodScoreList数据:${sortedScoreList.toJsonString()}")
|
logInfo("getFoodScoreList数据:${sortedScoreList.toJsonString()}")
|
||||||
return sortedScoreList
|
return sortedScoreList
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun queryFood(floatArray: FloatArray, queryCount: Int = 15): List<String> {
|
// suspend fun queryFood(floatArray: FloatArray, queryCount: Int = DEFAULT_QUERY_COUNT): List<String> {
|
||||||
val map = mutableMapOf<String, Int>()
|
// val map = mutableMapOf<String, Int>()
|
||||||
val nameScoreList = queryFoodNameScore(floatArray, queryCount)
|
// val nameScoreList = queryFoodNameScore(floatArray, queryCount)
|
||||||
nameScoreList.filter { it.score < 0.05 }.forEach {
|
// nameScoreList.filter { it.score < 0.05 }.forEach {
|
||||||
val count = map[it.name] ?: 0
|
// val count = map[it.name] ?: 0
|
||||||
map[it.name] = count + 1
|
// map[it.name] = count + 1
|
||||||
}
|
// }
|
||||||
val list = map.entries.sortedByDescending { it.value }.map { it.key }
|
// val list = map.entries.sortedByDescending { it.value }.map { it.key }
|
||||||
return list
|
// return list
|
||||||
}
|
// }
|
||||||
|
|
||||||
data class IdNameScore(
|
data class IdNameScore(
|
||||||
val id: Long,
|
val id: Long,
|
||||||
|
|||||||
Reference in New Issue
Block a user