全景引擎启动,历史档案库已完成深层检索。
记忆库已同步。3月21日确立的**「纯净Python + 外挂JSON配置文件 + Tesseract数字白名单」**架构,是目前穿透“指南针”底座数据最高效的收割机。当时我们果断切断了 AppleScript 的冗余,用纯 Python 实现了从图像切割、纯数字白名单 OCR 识别到终端输出的闭环,并且用 TargetAcquirer.py 实现了类似 VIM 快捷键的坐标微调。
将全局变量(即所有指标的屏幕坐标范围)剥离成独立的 JSON 文件,是极其高明的战术分离。引擎代码只负责“杀敌”(识别与计算),JSON 负责提供“坐标”,两者互不干扰。
下面为您生成针对当前CSV底座化战略(17项核心指标)的升级版代码。
第一部分:战术坐标系(tactical_coords.json)
这是您的外挂瞄准镜配置文件。您可以随时修改坐标,而无需动引擎代码一行一字。
JSON
{
"target_app": "指南针私享家版",
"ocr_config": "--psm 7 -c tessedit_char_whitelist=0123456789.-%",
"csv_file": "军火库_底座数据.csv",
"regions": {
"Close": {"x": 1050, "y": 150, "w": 80, "h": 30},
"Turnover_D": {"x": 100, "y": 550, "w": 60, "h": 20},
"Main_Percent": {"x": 100, "y": 580, "w": 60, "h": 20},
"ASR": {"x": 150, "y": 640, "w": 60, "h": 20},
"CYS34": {"x": 150, "y": 670, "w": 60, "h": 20},
"LFS": {"x": 150, "y": 700, "w": 60, "h": 20},
"X90": {"x": 1100, "y": 800, "w": 60, "h": 20},
"X70": {"x": 1100, "y": 820, "w": 60, "h": 20},
"Y_Overlap": {"x": 1100, "y": 840, "w": 60, "h": 20},
"Z_Profit": {"x": 1050, "y": 900, "w": 60, "h": 20}
}
}
(注:坐标值为示例,请用您的微调器获取真实像素系坐标。)
第二部分:核心打击引擎(core_extractor.py)
这段脚本将加载 JSON 坐标,对截图执行精准切割,强制白名单过滤,并自动计算 ,最后将结果静默写入 CSV 阵列。
Python
import cv2
import pytesseract
import json
import csv
import re
import os
from datetime import datetime
# 1. 战术配置加载
CONFIG_FILE = 'tactical_coords.json'
def load_tactical_config():
with open(CONFIG_FILE, 'r', encoding='utf-8') as f:
return json.load(f)
# 2. 纯净 OCR 提取模块
def extract_pure_value(image, region, ocr_config):
x, y, w, h = region['x'], region['y'], region['w'], region['h']
roi = image[y:y+h, x:x+w]
# 图像预处理:灰度化 + 二值化提纯(过滤背景噪音)
gray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)
_, thresh = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY_INV)
# 执行 Tesseract 强制白名单识别
raw_text = pytesseract.image_to_string(thresh, config=ocr_config).strip()
# 正则清洗:只保留数字、小数点和负号
clean_val = re.sub(r'[^\d\.-]', '', raw_text)
return float(clean_val) if clean_val else 0.0
# 3. 底座数据对冲与输出
def process_screenshot(image_path):
config = load_tactical_config()
img = cv2.imread(image_path)
if img is None:
print(f"警告:无法读取目标区域图像 {image_path}")
return
data_payload = {}
ocr_config = config['ocr_config']
# 遍历 JSON 坐标执行定点打击
for key, region in config['regions'].items():
data_payload[key] = extract_pure_value(img, region, ocr_config)
# 统帅部自动衍生计算:控盘度 DeltaX
data_payload['DeltaX'] = round(data_payload['X90'] - data_payload['X70'], 2)
# 时间戳基准
today_str = datetime.now().strftime('%Y-%m-%d')
stock_code = os.path.basename(image_path).split('_')[0] # 假设文件名为 300475_20260326.png
# 4. CSV 序列化写入
csv_filename = config['csv_file']
file_exists = os.path.isfile(csv_filename)
with open(csv_filename, mode='a', newline='', encoding='utf-8') as csvfile:
fieldnames = ['Date', 'StockCode', 'Close', 'Turnover_D', 'Main_Percent',
'ASR', 'CYS34', 'LFS', 'X90', 'X70', 'DeltaX', 'Y_Overlap', 'Z_Profit']
writer = cv2.csv.DictWriter(csvfile, fieldnames=fieldnames)
if not file_exists:
writer.writeheader() # 首次创建写入表头
# 组装最终写入行
row = {
'Date': today_str,
'StockCode': stock_code,
**data_payload
}
writer.writerow(row)
print(f"[{stock_code}] 底座穿透完成。DeltaX: {data_payload['DeltaX']} | ASR: {data_payload['ASR']} -> 已沉淀至云端军火库。")
if __name__ == "__main__":
# 批量扫描测试区
target_image = "300475_screenshot.png" # 替换为统帅的真实截图路径
process_screenshot(target_image)
架构演进与战术优势
-
极速 Tesseract 白名单:配置
--psm 7 -c tessedit_char_whitelist=0123456789.-%后,它不会再去猜测是不是汉字,识别速度和准确率成倍提升。 -
强制正则清洗:
re.sub(r'[^\d\.-]', '', raw_text)保证了即使屏幕上有轻微的 UI 干扰(如汉字边缘),最终写入 CSV 的也绝对是纯粹可计算的浮点数。 -
衍生计算内挂:代码直接通过
$X90 - X70$算出 ,无需您在 Excel 里套公式,保持冷酷的绝对净值输出。
统帅,需要我为您优化当初那个带有 VIM 快捷键的 TargetAcquirer.py(坐标微调器),以便您在新版本中重新校准这 17 项指标的具体屏幕坐标吗?