这是一个非常明智的选择。**Umi-OCR** 相比于直接调用 `PaddleOCR` 的库,最大的优势在于它提供了一个非常成熟的 **HTTP API 接口**(或者离线命令行接口),这使得你的 Python 自动化脚本可以保持轻量化,不需要在本地环境安装庞大且容易起冲突的深度学习库。 以下是针对 **Umi-OCR** 集成的更新版开发指南 MD 文档: --- # 🚀 桌面自动化脚本开发指南 (Umi-OCR 集成版) ## 1. 系统架构说明 本脚本采用 **Umi-OCR (HTTP 服务模式)** 作为感知核心。脚本通过发送截图到 Umi-OCR 的本地 API,获取 JSON 格式的识别结果(文字内容及坐标)。 --- ## 2. 核心技术栈 * **OCR 引擎**: [Umi-OCR](https://github.com/hiroi-sora/Umi-OCR) (需提前启动 HTTP 服务)。 * **浏览器控制**: Playwright (用于操作 Web 端 DMS/ERP)。 * **桌面控制**: PyAutoGUI / Mouse (用于点击 OCR 识别出的坐标)。 * **通信**: `requests` (用于调用 Umi-OCR API)。 --- ## 3. 目录结构规范 ```text project_root/ ├── config/ # 配置文件 (yaml/json) ├── core/ │ ├── ocr_client.py # 封装 Umi-OCR API 调用逻辑 │ ├── browser.py # Playwright 页面操作 │ └── actions.py # 封装“识别文字并点击”的高级动作 ├── config.yaml # 存放 Umi-OCR 地址 (默认 http://127.0.0.1:1224/api/ocr) ├── data/ # 存放临时截图、下载的文件 ├── assets/ # 存放用于识别的图标/模板图片 ├── utils/ # 日志、时间处理等工具类 └── main.py # 业务主流程 ``` --- ## 4. 关键模块开发逻辑 ### 4.1 OCR 调用逻辑 (`ocr_client.py`) > **AI 指令**:请实现一个 `UmiClient` 类,要求: * 使用 `requests` 向 `http://127.0.0.1:1224/api/ocr` 发送 Base64 编码的图片。 * 解析返回的 JSON,提取 `data` 列表中的 `text` 和 `box`(四个顶点的坐标)。 * 提供一个 `find_text(target_name)` 方法,返回该文字在屏幕上的中心点 `(x, y)`。 ### 4.2 自动化执行逻辑 (`actions.py`) > **AI 指令**:结合 `PyAutoGUI` 和 `ocr_client.py`: * 实现 `click_text(text)`:截图 -> OCR 识别 -> 匹配目标 -> 点击。 * 实现 `wait_for_text(text, timeout=20)`:在规定时间内循环检测屏幕是否出现目标文字。 --- ## 5. 开发约束 1. **服务检测**:脚本启动时需检测 Umi-OCR 端口是否占用,若未启动则抛出错误提醒。 2. **区域 OCR**:为了提高效率,支持“局部截图 OCR”,而不是每次都截全屏。 3. **坐标转换**:Umi-OCR 返回的是相对图片的坐标,需确保点击时与 Windows 屏幕坐标对齐。 --- ## 6. 第一步:Umi-OCR API 调用代码参考 你可以让 AI 基于以下片段进行扩展: ```python import requests import base64 def call_umi_ocr(image_path): url = "http://127.0.0.1:1224/api/ocr" with open(image_path, "rb") as f: img64 = base64.b64encode(f.read()).decode('utf-8') payload = { "base64": img64, "options": {"data_format": "dict"} } response = requests.post(url, json=payload) return response.json() ``` ---