优化向量查询,替换新模型
This commit is contained in:
Binary file not shown.
@@ -25,7 +25,6 @@
|
||||
"松花蛋",
|
||||
"松茸菌WP2025120100016",
|
||||
"沙葱",
|
||||
"洋葱(鲜)[葱头]WP2026022800612",
|
||||
"海带(浸)[江白菜,昆布]WP2026022800035",
|
||||
"牛腩WP2025110700043",
|
||||
"猪五花肉WP2026020300048",
|
||||
@@ -40,6 +39,7 @@
|
||||
"红心萝卜[心里美]WP2026022800368",
|
||||
"红提子WP2025111900006",
|
||||
"红椒WP2026030300055",
|
||||
"红洋葱WP2026030600054",
|
||||
"红美人椒WP2026020300049",
|
||||
"红薯",
|
||||
"红薯粉条(袋)",
|
||||
@@ -68,19 +68,20 @@
|
||||
"辣椒(红,小)WP2025111000066",
|
||||
"辣椒(青,尖)WP2026022800504",
|
||||
"醪糟",
|
||||
"金针菇WP2025111900010",
|
||||
"金针菇[(鲜)[智力菇]WP2026030600051",
|
||||
"青线椒WP2026013000031",
|
||||
"韭菜WP2026020200044",
|
||||
"韭黄",
|
||||
"馒头(代表值)WP2026030600056",
|
||||
"香椿[香椿芽]WP2026022801086",
|
||||
"香菇",
|
||||
"香菇(鲜)[香蕈,冬菇]WP2026030600050",
|
||||
"香菜WP2026013000030",
|
||||
"马铃薯[土豆、洋芋]WP2026012900001",
|
||||
"鸡全腿(带骨)",
|
||||
"鸡翅(带骨)",
|
||||
"鸡腿肉WP2025110700048",
|
||||
"鸡腿(带骨)",
|
||||
"鸡蛋(代表值)WP2026013000039",
|
||||
"鸡蛋WP2026013000039",
|
||||
"麦芹",
|
||||
"黄瓜(鲜)[胡瓜]WP2025110700031",
|
||||
"黄豆芽WP2026020200042",
|
||||
@@ -113,21 +114,21 @@
|
||||
"松花蛋": 22,
|
||||
"松茸菌WP2025120100016": 23,
|
||||
"沙葱": 24,
|
||||
"洋葱(鲜)[葱头]WP2026022800612": 25,
|
||||
"海带(浸)[江白菜,昆布]WP2026022800035": 26,
|
||||
"牛腩WP2025110700043": 27,
|
||||
"猪五花肉WP2026020300048": 28,
|
||||
"猪腿肉WP2025110700040": 29,
|
||||
"玉米WP2025120100017": 30,
|
||||
"玉米糁(黄)WP2026022800038": 31,
|
||||
"番茄[西红柿]WP2026021000028": 32,
|
||||
"白吉饼WP2026013000024": 33,
|
||||
"笋": 34,
|
||||
"粉丝": 35,
|
||||
"紫甘蓝": 36,
|
||||
"红心萝卜[心里美]WP2026022800368": 37,
|
||||
"红提子WP2025111900006": 38,
|
||||
"红椒WP2026030300055": 39,
|
||||
"海带(浸)[江白菜,昆布]WP2026022800035": 25,
|
||||
"牛腩WP2025110700043": 26,
|
||||
"猪五花肉WP2026020300048": 27,
|
||||
"猪腿肉WP2025110700040": 28,
|
||||
"玉米WP2025120100017": 29,
|
||||
"玉米糁(黄)WP2026022800038": 30,
|
||||
"番茄[西红柿]WP2026021000028": 31,
|
||||
"白吉饼WP2026013000024": 32,
|
||||
"笋": 33,
|
||||
"粉丝": 34,
|
||||
"紫甘蓝": 35,
|
||||
"红心萝卜[心里美]WP2026022800368": 36,
|
||||
"红提子WP2025111900006": 37,
|
||||
"红椒WP2026030300055": 38,
|
||||
"红洋葱WP2026030600054": 39,
|
||||
"红美人椒WP2026020300049": 40,
|
||||
"红薯": 41,
|
||||
"红薯粉条(袋)": 42,
|
||||
@@ -156,24 +157,25 @@
|
||||
"辣椒(红,小)WP2025111000066": 65,
|
||||
"辣椒(青,尖)WP2026022800504": 66,
|
||||
"醪糟": 67,
|
||||
"金针菇WP2025111900010": 68,
|
||||
"金针菇[(鲜)[智力菇]WP2026030600051": 68,
|
||||
"青线椒WP2026013000031": 69,
|
||||
"韭菜WP2026020200044": 70,
|
||||
"韭黄": 71,
|
||||
"香椿[香椿芽]WP2026022801086": 72,
|
||||
"香菇": 73,
|
||||
"香菜WP2026013000030": 74,
|
||||
"马铃薯[土豆、洋芋]WP2026012900001": 75,
|
||||
"鸡全腿(带骨)": 76,
|
||||
"鸡翅(带骨)": 77,
|
||||
"鸡腿肉WP2025110700048": 78,
|
||||
"鸡腿(带骨)": 79,
|
||||
"鸡蛋(代表值)WP2026013000039": 80,
|
||||
"麦芹": 81,
|
||||
"黄瓜(鲜)[胡瓜]WP2025110700031": 82,
|
||||
"黄豆芽WP2026020200042": 83,
|
||||
"黑袋子": 84,
|
||||
"黑鱼(整条鱼)WP2025110600012": 85
|
||||
"馒头(代表值)WP2026030600056": 72,
|
||||
"香椿[香椿芽]WP2026022801086": 73,
|
||||
"香菇(鲜)[香蕈,冬菇]WP2026030600050": 74,
|
||||
"香菜WP2026013000030": 75,
|
||||
"马铃薯[土豆、洋芋]WP2026012900001": 76,
|
||||
"鸡全腿(带骨)": 77,
|
||||
"鸡翅(带骨)": 78,
|
||||
"鸡腿肉WP2025110700048": 79,
|
||||
"鸡腿(带骨)": 80,
|
||||
"鸡蛋WP2026013000039": 81,
|
||||
"麦芹": 82,
|
||||
"黄瓜(鲜)[胡瓜]WP2025110700031": 83,
|
||||
"黄豆芽WP2026020200042": 84,
|
||||
"黑袋子": 85,
|
||||
"黑鱼(整条鱼)WP2025110600012": 86
|
||||
},
|
||||
"idx_to_class": {
|
||||
"0": "三黄鸡",
|
||||
@@ -201,21 +203,21 @@
|
||||
"22": "松花蛋",
|
||||
"23": "松茸菌WP2025120100016",
|
||||
"24": "沙葱",
|
||||
"25": "洋葱(鲜)[葱头]WP2026022800612",
|
||||
"26": "海带(浸)[江白菜,昆布]WP2026022800035",
|
||||
"27": "牛腩WP2025110700043",
|
||||
"28": "猪五花肉WP2026020300048",
|
||||
"29": "猪腿肉WP2025110700040",
|
||||
"30": "玉米WP2025120100017",
|
||||
"31": "玉米糁(黄)WP2026022800038",
|
||||
"32": "番茄[西红柿]WP2026021000028",
|
||||
"33": "白吉饼WP2026013000024",
|
||||
"34": "笋",
|
||||
"35": "粉丝",
|
||||
"36": "紫甘蓝",
|
||||
"37": "红心萝卜[心里美]WP2026022800368",
|
||||
"38": "红提子WP2025111900006",
|
||||
"39": "红椒WP2026030300055",
|
||||
"25": "海带(浸)[江白菜,昆布]WP2026022800035",
|
||||
"26": "牛腩WP2025110700043",
|
||||
"27": "猪五花肉WP2026020300048",
|
||||
"28": "猪腿肉WP2025110700040",
|
||||
"29": "玉米WP2025120100017",
|
||||
"30": "玉米糁(黄)WP2026022800038",
|
||||
"31": "番茄[西红柿]WP2026021000028",
|
||||
"32": "白吉饼WP2026013000024",
|
||||
"33": "笋",
|
||||
"34": "粉丝",
|
||||
"35": "紫甘蓝",
|
||||
"36": "红心萝卜[心里美]WP2026022800368",
|
||||
"37": "红提子WP2025111900006",
|
||||
"38": "红椒WP2026030300055",
|
||||
"39": "红洋葱WP2026030600054",
|
||||
"40": "红美人椒WP2026020300049",
|
||||
"41": "红薯",
|
||||
"42": "红薯粉条(袋)",
|
||||
@@ -244,26 +246,27 @@
|
||||
"65": "辣椒(红,小)WP2025111000066",
|
||||
"66": "辣椒(青,尖)WP2026022800504",
|
||||
"67": "醪糟",
|
||||
"68": "金针菇WP2025111900010",
|
||||
"68": "金针菇[(鲜)[智力菇]WP2026030600051",
|
||||
"69": "青线椒WP2026013000031",
|
||||
"70": "韭菜WP2026020200044",
|
||||
"71": "韭黄",
|
||||
"72": "香椿[香椿芽]WP2026022801086",
|
||||
"73": "香菇",
|
||||
"74": "香菜WP2026013000030",
|
||||
"75": "马铃薯[土豆、洋芋]WP2026012900001",
|
||||
"76": "鸡全腿(带骨)",
|
||||
"77": "鸡翅(带骨)",
|
||||
"78": "鸡腿肉WP2025110700048",
|
||||
"79": "鸡腿(带骨)",
|
||||
"80": "鸡蛋(代表值)WP2026013000039",
|
||||
"81": "麦芹",
|
||||
"82": "黄瓜(鲜)[胡瓜]WP2025110700031",
|
||||
"83": "黄豆芽WP2026020200042",
|
||||
"84": "黑袋子",
|
||||
"85": "黑鱼(整条鱼)WP2025110600012"
|
||||
"72": "馒头(代表值)WP2026030600056",
|
||||
"73": "香椿[香椿芽]WP2026022801086",
|
||||
"74": "香菇(鲜)[香蕈,冬菇]WP2026030600050",
|
||||
"75": "香菜WP2026013000030",
|
||||
"76": "马铃薯[土豆、洋芋]WP2026012900001",
|
||||
"77": "鸡全腿(带骨)",
|
||||
"78": "鸡翅(带骨)",
|
||||
"79": "鸡腿肉WP2025110700048",
|
||||
"80": "鸡腿(带骨)",
|
||||
"81": "鸡蛋WP2026013000039",
|
||||
"82": "麦芹",
|
||||
"83": "黄瓜(鲜)[胡瓜]WP2025110700031",
|
||||
"84": "黄豆芽WP2026020200042",
|
||||
"85": "黑袋子",
|
||||
"86": "黑鱼(整条鱼)WP2025110600012"
|
||||
},
|
||||
"embedding_dim": 512,
|
||||
"total_images": 2070,
|
||||
"build_time": "2026-03-06T09:38:05.028631"
|
||||
"total_images": 2093,
|
||||
"build_time": "2026-03-10T10:33:47.104848"
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -36,10 +36,6 @@ object FoodModule {
|
||||
|
||||
private lateinit var module_mobile: Module
|
||||
|
||||
// private lateinit var box: Box<Food>
|
||||
private lateinit var embeddingsList: List<List<Float>>
|
||||
private lateinit var labelsList: IntArray
|
||||
private lateinit var classInfo: FoodClassInfo
|
||||
private val NO_MEAN_RGB = floatArrayOf(0.0f, 0.0f, 0.0f)
|
||||
private val NO_STD_RGB = floatArrayOf(1.0f, 1.0f, 1.0f)
|
||||
|
||||
@@ -135,9 +131,11 @@ object FoodModule {
|
||||
|
||||
logInfo("queryFood向量:${floatArray.slice(0 until 50).toJsonString()}")
|
||||
val idScoreList = ObjectBox.query(floatArray, queryCount)
|
||||
// 批量加载所有实体,一次DB操作替代循环单条查询
|
||||
val foodMap = ObjectBox.getByIds(idScoreList.map { it.id }).associateBy { it.id }
|
||||
val nameScoreList = mutableListOf<IdNameScore>()
|
||||
idScoreList.forEach {
|
||||
val name = ObjectBox.get(it.id)?.name ?: ""
|
||||
val name = foodMap[it.id]?.name ?: ""
|
||||
nameScoreList.add(IdNameScore(id = it.id, name = name, score = it.score))
|
||||
}
|
||||
logInfo("queryFood数据:${nameScoreList.toJsonString()}")
|
||||
@@ -203,10 +201,10 @@ object FoodModule {
|
||||
val labelsJson = AssetsTool.readAssetsFile(context, "data/labels.json")
|
||||
val classInfoJson = AssetsTool.readAssetsFile(context, "data/class_info.json")
|
||||
|
||||
embeddingsList =
|
||||
val embeddingsList: List<List<Float>> =
|
||||
Gson().fromJson(embeddingsJson, object : TypeToken<List<List<Float>>>() {}.type)
|
||||
labelsList = Gson().fromJson(labelsJson, IntArray::class.java)
|
||||
classInfo =
|
||||
val labelsList: IntArray = Gson().fromJson(labelsJson, IntArray::class.java)
|
||||
val classInfo: FoodClassInfo =
|
||||
Gson().fromJson(classInfoJson, FoodClassInfo::class.java)
|
||||
|
||||
val foodMap = classInfo.idx_to_class
|
||||
|
||||
@@ -172,6 +172,12 @@ object ObjectBox {
|
||||
getBox<Food>()?.get(id)
|
||||
}
|
||||
|
||||
// 批量按ID加载,一次DB事务替代循环单条查询
|
||||
suspend fun getByIds(ids: List<Long>): List<Food> = safeDbOp {
|
||||
if (ids.isEmpty()) return@safeDbOp emptyList<Food>()
|
||||
getBox<Food>()?.get(ids.toLongArray()) ?: emptyList<Food>()
|
||||
} ?: emptyList()
|
||||
|
||||
suspend fun put(entity: Food) = safeDbOp {
|
||||
getBox<Food>()?.put(entity)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user