上传OCR切换:小果GLM-OCR-8bit优先,Tesseract降级
MoFin/server.py 的 _ocr_image 改为: 1. 优先调小果 gateway (192.168.1.122:18003) 的 GLM-OCR-8bit 2. 失败/无响应则自动降级到本地 Tesseract(预处理+chi_sim+eng) 3. fallback逻辑保留原预处理管道(放大/锐化/二值化) ocr_client.py 模块独立可调用,兼作CLI工具
This commit is contained in:
+879
-55
File diff suppressed because it is too large
Load Diff
+72
-24
@@ -25,7 +25,9 @@
|
||||
"rr_ratio": 0.06,
|
||||
"action_note": "⚠️盈亏比偏低(1:0.6),不建议加仓",
|
||||
"timing_signal": "持有"
|
||||
}
|
||||
},
|
||||
"price": 816.69,
|
||||
"change_pct": 8.17
|
||||
},
|
||||
{
|
||||
"code": "01478",
|
||||
@@ -52,7 +54,9 @@
|
||||
"rr_ratio": 1.04,
|
||||
"action_note": "深套持有",
|
||||
"timing_signal": "持有"
|
||||
}
|
||||
},
|
||||
"price": 7.75,
|
||||
"change_pct": -1.65
|
||||
},
|
||||
{
|
||||
"code": "600739",
|
||||
@@ -79,7 +83,9 @@
|
||||
"rr_ratio": 1.44,
|
||||
"action_note": "⚠️盈亏比偏低(1:1.4),不建议加仓",
|
||||
"timing_signal": "持有"
|
||||
}
|
||||
},
|
||||
"price": 10.42,
|
||||
"change_pct": -2.16
|
||||
},
|
||||
{
|
||||
"code": "601899",
|
||||
@@ -106,7 +112,9 @@
|
||||
"rr_ratio": 0.68,
|
||||
"action_note": "深套持有",
|
||||
"timing_signal": "持有"
|
||||
}
|
||||
},
|
||||
"price": 27.66,
|
||||
"change_pct": -0.32
|
||||
},
|
||||
{
|
||||
"code": "688639",
|
||||
@@ -133,7 +141,9 @@
|
||||
"rr_ratio": 1.12,
|
||||
"action_note": "⚠️盈亏比偏低(1:1.1),不建议加仓",
|
||||
"timing_signal": "持有"
|
||||
}
|
||||
},
|
||||
"price": 21.42,
|
||||
"change_pct": -1.88
|
||||
},
|
||||
{
|
||||
"code": "09988",
|
||||
@@ -160,7 +170,9 @@
|
||||
"rr_ratio": 1.02,
|
||||
"action_note": "深套持有",
|
||||
"timing_signal": "持有"
|
||||
}
|
||||
},
|
||||
"price": 100.1,
|
||||
"change_pct": 1.26
|
||||
},
|
||||
{
|
||||
"code": "688411",
|
||||
@@ -187,7 +199,9 @@
|
||||
"rr_ratio": 0.96,
|
||||
"action_note": "⚠️盈亏比偏低(1:1.0),不建议加仓",
|
||||
"timing_signal": "持有"
|
||||
}
|
||||
},
|
||||
"price": 268.05,
|
||||
"change_pct": -1.56
|
||||
},
|
||||
{
|
||||
"code": "603259",
|
||||
@@ -214,7 +228,9 @@
|
||||
"rr_ratio": 3.35,
|
||||
"action_note": "",
|
||||
"timing_signal": "持有"
|
||||
}
|
||||
},
|
||||
"price": 115.8,
|
||||
"change_pct": 8.95
|
||||
},
|
||||
{
|
||||
"code": "688981",
|
||||
@@ -241,7 +257,9 @@
|
||||
"rr_ratio": 1.89,
|
||||
"action_note": "",
|
||||
"timing_signal": "持有"
|
||||
}
|
||||
},
|
||||
"price": 153.7,
|
||||
"change_pct": 8.47
|
||||
},
|
||||
{
|
||||
"code": "01888",
|
||||
@@ -268,7 +286,9 @@
|
||||
"rr_ratio": 7.78,
|
||||
"action_note": "短炒强趋势持",
|
||||
"timing_signal": "持有"
|
||||
}
|
||||
},
|
||||
"price": 93.3,
|
||||
"change_pct": 7.16
|
||||
},
|
||||
{
|
||||
"code": "02202",
|
||||
@@ -295,7 +315,9 @@
|
||||
"rr_ratio": 1.11,
|
||||
"action_note": "深套持有",
|
||||
"timing_signal": "持有"
|
||||
}
|
||||
},
|
||||
"price": 2.36,
|
||||
"change_pct": -2.08
|
||||
},
|
||||
{
|
||||
"code": "02388",
|
||||
@@ -322,7 +344,9 @@
|
||||
"rr_ratio": 2.93,
|
||||
"action_note": "",
|
||||
"timing_signal": "持有"
|
||||
}
|
||||
},
|
||||
"price": 46.36,
|
||||
"change_pct": -1.4
|
||||
},
|
||||
{
|
||||
"code": "300750",
|
||||
@@ -349,7 +373,9 @@
|
||||
"rr_ratio": 0.83,
|
||||
"action_note": "⚠️盈亏比偏低(1:0.8),不建议加仓",
|
||||
"timing_signal": "持有"
|
||||
}
|
||||
},
|
||||
"price": 395.02,
|
||||
"change_pct": 0.65
|
||||
},
|
||||
{
|
||||
"code": "01211",
|
||||
@@ -376,7 +402,9 @@
|
||||
"rr_ratio": 1.01,
|
||||
"action_note": "深套持有",
|
||||
"timing_signal": "持有"
|
||||
}
|
||||
},
|
||||
"price": 75.9,
|
||||
"change_pct": 0.07
|
||||
},
|
||||
{
|
||||
"code": "00981",
|
||||
@@ -403,7 +431,9 @@
|
||||
"rr_ratio": 2.79,
|
||||
"action_note": "",
|
||||
"timing_signal": "持有"
|
||||
}
|
||||
},
|
||||
"price": 85.5,
|
||||
"change_pct": 10.02
|
||||
},
|
||||
{
|
||||
"code": "00700",
|
||||
@@ -430,7 +460,9 @@
|
||||
"rr_ratio": 0.95,
|
||||
"action_note": "⚠️盈亏比偏低(1:0.9),不建议加仓",
|
||||
"timing_signal": "持有"
|
||||
}
|
||||
},
|
||||
"price": 433.4,
|
||||
"change_pct": 4.29
|
||||
},
|
||||
{
|
||||
"code": "09868",
|
||||
@@ -457,7 +489,9 @@
|
||||
"rr_ratio": 21.84,
|
||||
"action_note": "⚠️盈亏比偏低(1:1.0),不建议加仓",
|
||||
"timing_signal": "持有"
|
||||
}
|
||||
},
|
||||
"price": 49.98,
|
||||
"change_pct": 1.22
|
||||
},
|
||||
{
|
||||
"code": "300548",
|
||||
@@ -484,7 +518,9 @@
|
||||
"rr_ratio": 5.82,
|
||||
"action_note": "短炒强趋势持",
|
||||
"timing_signal": "持有"
|
||||
}
|
||||
},
|
||||
"price": 282.5,
|
||||
"change_pct": -1.24
|
||||
},
|
||||
{
|
||||
"code": "02318",
|
||||
@@ -511,7 +547,9 @@
|
||||
"rr_ratio": 15.44,
|
||||
"action_note": "⚠️盈亏比偏低(1:1.1),不建议加仓",
|
||||
"timing_signal": "持有"
|
||||
}
|
||||
},
|
||||
"price": 52.8,
|
||||
"change_pct": -1.49
|
||||
},
|
||||
{
|
||||
"code": "300035",
|
||||
@@ -538,7 +576,9 @@
|
||||
"rr_ratio": 0.93,
|
||||
"action_note": "深套持有",
|
||||
"timing_signal": "持有"
|
||||
}
|
||||
},
|
||||
"price": 16.1,
|
||||
"change_pct": -1.47
|
||||
},
|
||||
{
|
||||
"code": "518880",
|
||||
@@ -565,7 +605,9 @@
|
||||
"rr_ratio": 0.54,
|
||||
"action_note": "深套持有",
|
||||
"timing_signal": "持有"
|
||||
}
|
||||
},
|
||||
"price": 8.49,
|
||||
"change_pct": -0.57
|
||||
},
|
||||
{
|
||||
"code": "000700",
|
||||
@@ -592,7 +634,9 @@
|
||||
"rr_ratio": 3.35,
|
||||
"action_note": "",
|
||||
"timing_signal": "持有"
|
||||
}
|
||||
},
|
||||
"price": 14.57,
|
||||
"change_pct": -2.74
|
||||
},
|
||||
{
|
||||
"code": "01088",
|
||||
@@ -619,7 +663,9 @@
|
||||
"rr_ratio": 0.93,
|
||||
"action_note": "⚠️盈亏比偏低(1:0.9),不建议加仓",
|
||||
"timing_signal": "持有"
|
||||
}
|
||||
},
|
||||
"price": 41.84,
|
||||
"change_pct": -0.43
|
||||
},
|
||||
{
|
||||
"code": "600563",
|
||||
@@ -646,7 +692,9 @@
|
||||
"rr_ratio": 3.54,
|
||||
"action_note": "",
|
||||
"timing_signal": "持有"
|
||||
}
|
||||
},
|
||||
"price": 178.76,
|
||||
"change_pct": 10.0
|
||||
}
|
||||
],
|
||||
"cash": 5667,
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
"date": "2026-06-24",
|
||||
"high": 88.32,
|
||||
"low": 82.78,
|
||||
"close": 83.83
|
||||
"close": 83.76
|
||||
}
|
||||
],
|
||||
"00700": [
|
||||
@@ -836,7 +836,7 @@
|
||||
"date": "2026-06-24",
|
||||
"high": 145.0,
|
||||
"low": 130.0,
|
||||
"close": 142.7
|
||||
"close": 142.9
|
||||
}
|
||||
],
|
||||
"02388": [
|
||||
@@ -1004,7 +1004,7 @@
|
||||
"date": "2026-06-24",
|
||||
"high": 168.6,
|
||||
"low": 160.0,
|
||||
"close": 166.7
|
||||
"close": 166.9
|
||||
}
|
||||
],
|
||||
"06869": [
|
||||
@@ -1284,7 +1284,7 @@
|
||||
"date": "2026-06-24",
|
||||
"high": 68.8,
|
||||
"low": 65.74,
|
||||
"close": 66.85
|
||||
"close": 66.83
|
||||
}
|
||||
],
|
||||
"300548": [
|
||||
@@ -2316,7 +2316,7 @@
|
||||
"date": "2026-06-24",
|
||||
"high": 745.2,
|
||||
"low": 660.01,
|
||||
"close": 713.0
|
||||
"close": 714.88
|
||||
}
|
||||
],
|
||||
"688802": [
|
||||
@@ -2466,7 +2466,7 @@
|
||||
"date": "2026-06-24",
|
||||
"high": 5.38,
|
||||
"low": 4.86,
|
||||
"close": 5.09
|
||||
"close": 5.06
|
||||
}
|
||||
],
|
||||
"688630": [
|
||||
@@ -2610,7 +2610,7 @@
|
||||
"date": "2026-06-24",
|
||||
"high": 52.43,
|
||||
"low": 49.03,
|
||||
"close": 49.27
|
||||
"close": 49.23
|
||||
}
|
||||
],
|
||||
"002171": [
|
||||
|
||||
@@ -717,10 +717,22 @@ def upload_page():
|
||||
|
||||
|
||||
def _ocr_image(image_path):
|
||||
"""用Tesseract OCR提取图片中的文字(预处理优化中文表格识别)"""
|
||||
"""优先用小果GLM-OCR-8bit识别,失败则降级到pytesseract"""
|
||||
import sys
|
||||
from PIL import Image, ImageEnhance, ImageFilter
|
||||
import pytesseract
|
||||
|
||||
# 尝试小果OCR(GLM-OCR-8bit)
|
||||
try:
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "scripts"))
|
||||
from ocr_client import ocr_image as xg_ocr
|
||||
result = xg_ocr(image_path, "请识别这张图片中所有文字,包括股票名称、代码、价格、持股数、金额、百分比等。输出完整内容。")
|
||||
if result.get("success") and len(result.get("text", "")) > 20:
|
||||
return result["text"].strip()
|
||||
except Exception:
|
||||
pass # 降级到tesseract
|
||||
|
||||
# 降级:Tesseract(预处理优化中文表格识别)
|
||||
img = Image.open(image_path)
|
||||
|
||||
# 预处理:放大 + 锐化 + 二值化,提升小字识别率
|
||||
|
||||
Reference in New Issue
Block a user