4.1 KiB
4.1 KiB
name, description, type
| name | description | type |
|---|---|---|
| GUI Agent 项目状态 | 手机GUI Agent项目当前进度、技术决策和待确认事项 | 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— 读文件 OCRGET /ocr?path=...&text=微信— 按文本过滤POST /snap— POST 图片字节直接 OCR(NanoHTTPD 二进制处理有 bug,待修)
- 使用流程:
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 限制 |
已知问题
- OCR 偶尔误读("康"→"東")— ML Kit 和 easyocr 都有此问题
- POST /snap 端点 NanoHTTPD 二进制 body 解析 bug — 文件方式 workaround
- 微信双开弹选择框 — 每次 am start 会弹"使用以下方式打开"
- 发送按钮白字绿底 OCR 不稳定 — 用坐标 (1008, 2425) 或 OCR "(田发送"
下一步(周一继续)
- 速度优化:发送按钮固定坐标不走 OCR(省2s),缩短 sleep(省2s),目标 5-6s/操作
- OCR 推理优化:缩图再识别 / NNAPI 加速,目标 <1s
- 集成到 Agent 主循环:device OCR 引擎接入 ocr_grounding.py
- 配置 .env(Poe API Key)
- 接入 VLM(Poe API 调 Qwen2.5-VL)— 复杂场景屏幕理解
- 端到端跑通复杂多步任务(滑动、长按、跨 App)
- 完善验证纠错层
技术背景
项目灵感来自对字节 UI-TARS / 豆包手机的深度调研。结论:
- UI-TARS 开源的是权重+推理壳,训练代码和系统级操控完全闭源
- 核心壁垒不是模型,是"截屏→理解→定位→规划→执行→验证"的全链路
- 本项目目标:用开源 VLM + ADB 复现这个全链路