# EngHelper **Repository Path**: xxlightman/eng-helper ## Basic Information - **Project Name**: EngHelper - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-03-12 - **Last Updated**: 2026-03-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 屏幕截图 OCR 翻译助手(微信聊天英文情境) [English](README_EN.md) | 中文 本项目是一个 Android App:**在任意界面通过悬浮按钮截取当前屏幕**,在本地完成 **OCR 文字识别(Paddle Lite / PaddleOCR)**,再调用 **百度翻译 AI 大模型能力**将中文内容翻译成英文,并在悬浮窗中展示**中英文对照**。 最初的动机:用来翻译微信聊天记录,把日常输入/阅读场景“翻译成英文语境”,弥补生活中缺少真实英语情境的不足。 --- ## 功能特性 - **全局悬浮按钮**:在任何界面都能一键触发 - **截屏方式自动选择** - **Android 9+(推荐)**:启用无障碍服务后可“免反复授权”截屏 - **降级方案**:使用 `MediaProjection` 截屏(需要系统授权弹窗) - **本地 OCR 识别**:离线完成文字检测/方向分类/文本识别(模型已在 `assets`) - **自动翻译成英文**:默认使用百度翻译接口的 **`model_type=llm`**(大模型翻译) - **结果悬浮窗展示**:支持**翻译/原文**切换、可收缩 - **一键复制** - 复制 OCR 原文 - 复制结构化 JSON(聊天记录格式说明见 `JSON_FORMAT.md`) --- ## 技术栈 - **Android**:Java(Support v7 / ConstraintLayout) - **截屏**:`AccessibilityService`(Android 9+)/ `MediaProjection`(降级) - **OCR**:Paddle Lite(C++ 推理)+ PaddleOCR 模型(det/cls/rec) - **图像处理**:OpenCV - **网络**:OkHttp(调用百度翻译接口) - **NDK/CMake**:C++ 推理 pipeline(见 `app/src/main/cpp/`) --- ## 快速开始 ### 1) 环境要求 - Android Studio - NDK + CMake(工程使用外部 CMake 构建) - 一台 Android 真机(建议 Android 9.0+) ### 2) 配置百度翻译密钥(重要) 本项目已**移除代码里硬编码密钥**,改为从本地配置注入(避免把 Key 提交到 GitHub)。 1. 在仓库根目录复制示例文件: - `secrets.properties.example` → `secrets.properties` 2. 编辑 `secrets.properties` 填入你的配置: ```properties BAIDU_TRANSLATE_API_KEY=YOUR_BAIDU_BEARER_TOKEN BAIDU_TRANSLATE_APP_ID=YOUR_BAIDU_APP_ID ``` 说明: - `secrets.properties` 已在 `.gitignore` 中忽略,请不要提交真实密钥 - 也支持通过 **Gradle 属性**或**系统环境变量**提供同名 key ### 3) 编译运行 - 用 Android Studio 打开本目录(`ppocr_demo`) - Sync Gradle - 连接手机,点击 Run 命令行构建(可选): ```bash ./gradlew assembleDebug ``` --- ## 使用方式(推荐流程) 1. 首次打开 App,会进入引导页(`WelcomeActivity`) 2. 按提示授予: - **悬浮窗权限** - **启用无障碍服务**(“OCR 截屏服务”,用于免授权截屏) 3. 点击“进入应用”后会启动悬浮按钮并返回桌面 4. 打开微信聊天页面(或任何你想翻译的界面),点击悬浮按钮 5. 等待识别与翻译完成,在结果悬浮窗查看 **中英文对照** --- ## 权限说明 在 `app/src/main/AndroidManifest.xml` 中可看到主要权限: - **INTERNET**:调用百度翻译接口 - **SYSTEM_ALERT_WINDOW**:悬浮窗显示(悬浮按钮、结果窗口) - **BIND_ACCESSIBILITY_SERVICE**:无障碍截屏(Android 9+) - **CAMERA**:保留原 OCR Demo 的相机预览能力 - **READ/WRITE_EXTERNAL_STORAGE**:历史 Demo 逻辑使用(不同系统版本行为不同) --- ## 工程结构(关键文件) - **悬浮按钮**:`app/src/main/java/.../FloatingWindowService.java` - **截屏(无障碍)**:`app/src/main/java/.../ScreenshotAccessibilityService.java` - **截屏(MediaProjection)+ OCR 执行**:`app/src/main/java/.../MainActivity.java` - **结果展示 + 自动翻译**:`app/src/main/java/.../ResultFloatingWindow.java` - **翻译接口封装**:`app/src/main/java/.../common/TransService.java` - **OCR C++ Pipeline**:`app/src/main/cpp/pipeline.cc` - **OCR 模型/字典/config**:`app/src/main/assets/` --- ## 常见问题(FAQ) ### 1) 为什么建议 Android 9.0+? 因为无障碍服务的截屏能力需要 Android 9.0+ 才能较好工作;低版本会自动降级到 `MediaProjection`(需要系统授权弹窗)。 ### 2) 翻译失败/提示未配置 Key? 请确认根目录存在 `secrets.properties`,并填写了: - `BAIDU_TRANSLATE_API_KEY` - `BAIDU_TRANSLATE_APP_ID` ### 3) OCR 本地离线,翻译为什么还需要网络? OCR 推理在本地完成;翻译调用百度接口,需要联网。 --- ## Roadmap - 支持更多目标语言(不仅限英文) - 结果窗口支持逐句对齐/高亮 - 更安全的密钥管理(例如 Keystore + 加密存储) - 导出到文件/分享(JSON/纯文本) --- ## 贡献 欢迎提 Issue / PR: - Bug/兼容性问题(不同系统/不同 ROM 的无障碍与悬浮窗行为差异较大) - UI/交互改进 - 翻译 Prompt/参考参数优化(提升口语化与段落保持) --- ## 致谢与声明 - OCR 推理部分基于 **Paddle-Lite-Demo / PaddleOCR** 的工程结构与模型资源 - OpenCV 相关许可见 `OpenCV/LICENSE` 如果你希望本仓库单独发布为开源项目,建议补充顶层 `LICENSE` 并在此处明确许可类型。