'commit'
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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": "未知"}
|
||||
|
||||
|
||||
@@ -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兜底"
|
||||
})
|
||||
|
||||
# 解析价格
|
||||
|
||||
Reference in New Issue
Block a user