78 lines
4.1 KiB
Markdown
78 lines
4.1 KiB
Markdown
---
|
||
name: GUI Agent 项目状态
|
||
description: 手机GUI Agent项目当前进度、技术决策和待确认事项
|
||
type: project
|
||
---
|
||
|
||
## 项目状态:端到端已跑通 + 手机端 OCR 已部署
|
||
|
||
### 设备信息
|
||
- **华为 P40 Pro**(ELS-AN00)
|
||
- 序列号:UQG5T20416000119
|
||
- 分辨率:1200x2640
|
||
- 系统:HarmonyOS 4.x(兼容安卓层,ADB 可用)
|
||
- ADB 路径:`/opt/homebrew/bin/adb`
|
||
- 连接注意:华为手机需在开发者选项中额外打开"仅充电模式下允许ADB调试"
|
||
- **已开启「通过USB安装应用」权限**(2026-03-29)
|
||
|
||
### 已完成
|
||
- 七层管线骨架代码(L1-L7)全部就位
|
||
- Web 控制台(FastAPI + 暗色主题 UI)已验证可运行
|
||
- 端口 4380,VLM 默认走 Poe API
|
||
- 支持 8 种动作类型(tap/swipe/type/long_press/back/home/scroll/wait)
|
||
- Agent 主循环含历史记忆(最近 5 步)和连续错误自动停止
|
||
- **ADB 截屏已验证通过**(2026-03-29)
|
||
- **Mac 端 OCR 元素定位已验证**(2026-03-29)— easyocr 中文识别,返回像素坐标
|
||
- **中文文本输入已验证**(2026-03-29)— uiautomator2 send_keys
|
||
- **端到端发微信消息已跑通 3 次**(2026-03-29)— "你是大聪明"、"祝你生日快乐"、"生日快乐"
|
||
- **手机端 OCR Service APK 已部署**(2026-03-29)— ML Kit Chinese bundled,端口 18900
|
||
|
||
### 手机端 OCR Service(android-ocr-service/)
|
||
- **引擎**:Google ML Kit text-recognition-chinese(bundled 版,不依赖 GMS,华为可用)
|
||
- **架构**:Kotlin APK = OcrEngine + NanoHTTPD(18900) + ForegroundService
|
||
- **接口**:
|
||
- `GET /health` — 健康检查
|
||
- `GET /ocr?path=/data/local/tmp/s.png` — 读文件 OCR
|
||
- `GET /ocr?path=...&text=微信` — 按文本过滤
|
||
- `POST /snap` — POST 图片字节直接 OCR(NanoHTTPD 二进制处理有 bug,待修)
|
||
- **使用流程**:
|
||
```bash
|
||
adb shell am start -n com.guiagent.ocr/.MainActivity
|
||
adb forward tcp:18900 tcp:18900
|
||
adb shell "screencap -p /data/local/tmp/s.png"
|
||
curl http://localhost:18900/ocr?path=/data/local/tmp/s.png
|
||
```
|
||
- **性能**:首次 ~2.4s(模型加载),后续 ~1.8s/次
|
||
- **构建**:`ANDROID_HOME=/opt/homebrew/share/android-commandlinetools JAVA_HOME=/opt/homebrew/Cellar/openjdk@21/21.0.10/libexec/openjdk.jdk/Contents/Home ./gradlew assembleDebug`
|
||
|
||
### 关键技术决策
|
||
| 能力 | 方案 | 备注 |
|
||
|------|------|------|
|
||
| 元素定位(Mac) | easyocr | pytesseract 中文分词差,uiautomator dump 在华为微信上返回空 |
|
||
| 元素定位(手机端) | ML Kit Chinese (bundled) | 不依赖 GMS/HMS,APK 自带模型 |
|
||
| 中文输入 | uiautomator2 send_keys | 需装辅助 APK,华为需开 USB 安装权限 |
|
||
| 截屏 | `adb shell screencap -p /data/local/tmp/s.png` | 不经 FUSE,比 /sdcard/ 快 |
|
||
| adb input text | 不支持中文 | NullPointerException,clipboard 也不可用 |
|
||
| 截屏显示 | 必须 sips -Z 1800 缩小 | 原始 1200x2640 超 Claude 2000px 限制 |
|
||
|
||
### 已知问题
|
||
1. OCR 偶尔误读("康"→"東")— ML Kit 和 easyocr 都有此问题
|
||
2. POST /snap 端点 NanoHTTPD 二进制 body 解析 bug — 文件方式 workaround
|
||
3. 微信双开弹选择框 — 每次 am start 会弹"使用以下方式打开"
|
||
4. 发送按钮白字绿底 OCR 不稳定 — 用坐标 (1008, 2425) 或 OCR "(田发送"
|
||
|
||
### 下一步(周一继续)
|
||
1. **速度优化**:发送按钮固定坐标不走 OCR(省2s),缩短 sleep(省2s),目标 5-6s/操作
|
||
2. **OCR 推理优化**:缩图再识别 / NNAPI 加速,目标 <1s
|
||
3. **集成到 Agent 主循环**:device OCR 引擎接入 ocr_grounding.py
|
||
4. 配置 .env(Poe API Key)
|
||
5. 接入 VLM(Poe API 调 Qwen2.5-VL)— 复杂场景屏幕理解
|
||
6. 端到端跑通复杂多步任务(滑动、长按、跨 App)
|
||
7. 完善验证纠错层
|
||
|
||
### 技术背景
|
||
项目灵感来自对字节 UI-TARS / 豆包手机的深度调研。结论:
|
||
- UI-TARS 开源的是权重+推理壳,训练代码和系统级操控完全闭源
|
||
- 核心壁垒不是模型,是"截屏→理解→定位→规划→执行→验证"的全链路
|
||
- 本项目目标:用开源 VLM + ADB 复现这个全链路
|