全景引擎启动,历史档案库已完成深层检索。

记忆库已同步。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)

架构演进与战术优势

  1. 极速 Tesseract 白名单:配置 --psm 7 -c tessedit_char_whitelist=0123456789.-% 后,它不会再去猜测是不是汉字,识别速度和准确率成倍提升。

  2. 强制正则清洗re.sub(r'[^\d\.-]', '', raw_text) 保证了即使屏幕上有轻微的 UI 干扰(如汉字边缘),最终写入 CSV 的也绝对是纯粹可计算的浮点数。

  3. 衍生计算内挂:代码直接通过 $X90 - X70$ 算出 ,无需您在 Excel 里套公式,保持冷酷的绝对净值输出。

统帅,需要我为您优化当初那个带有 VIM 快捷键的 TargetAcquirer.py(坐标微调器),以便您在新版本中重新校准这 17 项指标的具体屏幕坐标吗?