版本变更V3.31添加识图功能

This commit is contained in:
dxc
2026-05-22 11:40:35 +08:00
parent 8c635d6afe
commit 3ffcd35093
2 changed files with 42 additions and 37 deletions

View File

@ -77,40 +77,42 @@ def image_search():
query_vector_str = '[' + ','.join(str(v) for v in embedding) + ']' query_vector_str = '[' + ','.join(str(v) for v in embedding) + ']'
sql = text(""" sql = text("""
SELECT id, name, spec_model, image_url, SELECT id, name, spec_model, image_url,
(1 - (vec <=> :query_vector)) AS similarity (1 - (vec <=> :query_vector)) AS similarity
FROM ( FROM (
-- 1. 基础物料表 -- 1. 基础物料表
SELECT id, name, spec_model, product_image AS image_url, img_embedding AS vec SELECT id, name, spec_model, product_image AS image_url, img_embedding AS vec
FROM material_base FROM material_base
WHERE img_embedding IS NOT NULL WHERE img_embedding IS NOT NULL
UNION ALL UNION ALL
-- 2. 采购入库表 (通过 base_id 关联拿真实物料) -- 2. 采购入库表 (通过 base_id 关联拿真实物料信息)
SELECT mb.id, mb.name, mb.spec_model, sb.arrival_photo AS image_url, sb.arrival_image_embedding AS vec SELECT mb.id, mb.name, mb.spec_model, sb.arrival_photo AS image_url, sb.arrival_image_embedding AS vec
FROM stock_buy sb FROM stock_buy sb
JOIN material_base mb ON sb.base_id = mb.id JOIN material_base mb ON sb.base_id = mb.id
WHERE sb.arrival_image_embedding IS NOT NULL WHERE sb.arrival_image_embedding IS NOT NULL
UNION ALL UNION ALL
-- 3. 半成品入库表 -- 3. 半成品入库表 (通过 base_id 关联拿真实物料信息)
SELECT mb.id, mb.name, mb.spec_model, ss.arrival_photo AS image_url, ss.arrival_image_embedding AS vec SELECT mb.id, mb.name, mb.spec_model, ss.arrival_photo AS image_url, ss.arrival_image_embedding AS vec
FROM stock_semi ss FROM stock_semi ss
JOIN material_base mb ON ss.base_id = mb.id JOIN material_base mb ON ss.base_id = mb.id
WHERE ss.arrival_image_embedding IS NOT NULL WHERE ss.arrival_image_embedding IS NOT NULL
UNION ALL UNION ALL
-- 4. 成品入库表 -- 4. 成品入库表 (通过 base_id 关联拿真实物料信息)
SELECT mb.id, mb.name, mb.spec_model, sp.product_photo AS image_url, sp.arrival_image_embedding AS vec SELECT mb.id, mb.name, mb.spec_model, sp.product_photo AS image_url, sp.arrival_image_embedding AS vec
FROM stock_product sp FROM stock_product sp
JOIN material_base mb ON sp.base_id = mb.id JOIN material_base mb ON sp.base_id = mb.id
WHERE sp.arrival_image_embedding IS NOT NULL WHERE sp.arrival_image_embedding IS NOT NULL
) AS combined ) AS combined
ORDER BY vec <=> :query_vector LIMIT 10
""") -- 核心:计算余弦距离并排序,取最接近的前 50 个!
ORDER BY vec <=> :query_vector LIMIT 50
""")
# 执行查询 # 执行查询
records = db.session.execute(sql, {"query_vector": query_vector_str}).fetchall() records = db.session.execute(sql, {"query_vector": query_vector_str}).fetchall()
@ -150,7 +152,7 @@ def image_search():
"similarity": round(float(row.similarity), 4) "similarity": round(float(row.similarity), 4)
}) })
# 【新增】只要凑够了 10 个完全不同的物料,就立刻结束循环 # 修改后:只要凑够了 10 个完全不同的物料,就立刻结束循环
if len(results) >= 10: if len(results) >= 10:
break break

View File

@ -1,3 +1,6 @@
# .env.development # .env.development
# 注意:这里必须写你电脑的局域网 IP # 1. 本地局域网测试用(比如让平板连 192.168.9.33
VITE_API_BASE_URL=http://172.16.0.95:8000/api/v1 #VITE_API_BASE_URL=http://192.168.9.33:8000/api/v1
# 2. 服务器环境用(推送到服务器前,把上面那行注释掉,这行解开)
VITE_API_BASE_URL=http://172.16.0.95:8000/api/v1