This commit is contained in:
HuangHai
2026-01-12 20:39:06 +08:00
parent 874c1ceb23
commit 2051cb61c2
11 changed files with 196 additions and 400 deletions

View File

@@ -20,7 +20,6 @@ from Apps.XinDianTu import Kit
from Apps.XinDianTu.Kit import take_screenshot
from Util.ObsUtil import ObsUploader
from Util.RedisKit import RedisKit
from Util.PaddleOCRKit import get_ocr_kit
import cv2
from Apps.XinDianTu.Service import XinDianTuService
from Apps.XinDianTu.ReadImageKit import ReadImageKit
@@ -60,7 +59,6 @@ logging.basicConfig(
logger = logging.getLogger("StationList")
# 强制设置所有相关模块的日志级别为 INFO,防止被第三方库干扰
logging.getLogger("PaddleOCRKit").setLevel(logging.INFO)
logging.getLogger("OpenXinDianTu").setLevel(logging.INFO)
logging.getLogger("FullProcess").setLevel(logging.INFO)

View File

@@ -534,14 +534,14 @@ class ReadImageKit:
@staticmethod
async def get_stations_hybrid(image_path, uploader, cdn_domain):
"""
混合识别模式:图形学切片 + 大模型小图 OCR
混合识别模式:图形学切片 + 大模型小图 VL 识别
"""
# 1. 图形学切片
segments = ReadImageKit.get_card_segments(image_path)
if not segments:
return []
# 2. 对每个切片并行进行 OCR
# 2. 对每个切片并行进行 VL 识别
tasks = []
for seg in segments:
# 上传切片
@@ -552,9 +552,9 @@ class ReadImageKit:
# 记录上传后的 URL 供识别使用
seg["patch_url"] = patch_url
tasks.append(ReadImageKit.recognize_card_text(patch_url))
tasks.append(ReadImageKit.recognize_card_with_vl(patch_url))
# 等待所有 OCR 完成
# 等待所有 VL 完成
results = await asyncio.gather(*tasks)
# 3. 组装结果
@@ -773,9 +773,9 @@ class ReadImageKit:
return []
@staticmethod
async def recognize_card_text(patch_url):
async def recognize_card_with_vl(patch_url):
"""
对切片进行小图 OCR 识别,提取场站详细信息
对切片进行小图 VL 识别,提取场站详细信息
"""
resp = await ReadImageKit._client.chat.completions.create(
model=VL_MODEL_NAME,
@@ -802,7 +802,7 @@ class ReadImageKit:
if json_match:
return json.loads(json_match.group())
except Exception:
logger.warning(f"OCR 结果解析 JSON 失败: {content}")
logger.warning(f"VL 结果解析 JSON 失败: {content}")
return {"station_name": "未知"}

View File

@@ -161,7 +161,7 @@ class XinDianTuService:
async def process_station_list_hybrid(self, local_image_path: str, uploader, cdn_domain) -> list:
"""
混合模式处理场站列表 (图形学切片 + OCR)
混合模式处理场站列表 (图形学切片 + VL)
"""
station_list = await ReadImageKit.parse_hybrid_image(local_image_path, uploader, cdn_domain)
if not station_list:
@@ -207,9 +207,10 @@ class XinDianTuService:
"type": "未知",
"power": "",
"status_text": f"空闲{free}/总{total}",
"remark": "混合模式解析"
"remark": "列表页VL"
})
except: pass
except:
pass
price_str = station.get("price", "")
current_price = None
@@ -431,7 +432,7 @@ class XinDianTuService:
"type": p_type,
"power": "",
"status_text": f"空闲{f_int}/总{t_int}",
"remark": "列表页OCR"
"remark": "列表页VL"
})
else:
# 模式 2: 无类型,仅 "2/10"
@@ -445,7 +446,7 @@ class XinDianTuService:
"type": "未知",
"power": "",
"status_text": f"空闲{f_int}/总{t_int}",
"remark": "列表页OCR"
"remark": "列表页VL"
})
if not standardized_piles:
@@ -459,7 +460,7 @@ class XinDianTuService:
"type": "未知",
"power": "",
"status_text": f"空闲{free}/总{total}",
"remark": "列表页OCR兜底"
"remark": "列表页VL兜底"
})
# 解析价格