overlay-translator

Introduction: 无 ROOT 的 Android 屏幕实时翻译:截屏 → OCR(ML Kit / PaddleOCR / 百度 / 腾讯)→ LLM/DeepL → 悬浮窗叠加。Real-time on-screen translator for Android (no root): capture → OCR → LLM/DeepL → floating overlay, for games / visual novels / manga.
More: Author   ReportBugs   
Tags:

简体中文 · English

Android 屏幕实时翻译 · 截屏 → OCR → 翻译 → 悬浮窗叠加

License Release Downloads Stars Issues Android API Kotlin Compose QQ 群 1059655926

通过 MediaProjection / Shizuku 截屏 → 端侧或云端 OCR → LLM / 机器翻译 → 悬浮窗叠加显示。 无需 ROOT,单机可用,面向视觉小说、漫画、游戏对话等任意屏上文字的实时翻译。

安装 · 使用 · 配置 · 参与开发 · Releases · Issues


✨ 功能

🎯 一句话定位

游戏 / 漫画 / 视觉小说画面在屏,按一下圆球,几秒后中文译文盖在原文上。

🖱️ 怎么触发翻译

  • 悬浮球单击:默认翻整个屏幕;可切到「划词模式」——按一下后用手指圈一小块文字单独翻(更准、专挑要看的那一段)
  • 悬浮球长按:弹出弧形子菜单,常用动作一指可达:循环翻译 / 重选区域 / 在「全屏翻译」和「划词翻译」之间切换 / 快速切源语言与目标语言 / 切换翻译预设 / 打开设置 / 回主页。按钮顺序和每页数量可在设置里调整;超过一页自动出现「下一组」翻页按钮
  • 循环模式:可选固定间隔,或等待报幕文字稳定后再翻译;会跳过完全相同的画面 / 译文,并可优先检测下半屏对话区域,连续看剧情时不用反复点球
  • 音量双键:同时按住「音量+ / 音量−」0.3 秒触发,手指不用离开游戏(需在系统无障碍中启用)
  • 从其它 App 选中文字:在任意 App 里长按选中一段文字 → 系统菜单选「屏译翻译」→ 直接弹译文卡片,省去切到屏译再框选的步骤

🔍 识别屏上的文字(OCR)

  • 本机识别:ML Kit(中日韩英)/ PaddleOCR / 日漫 OCR——图不上传,无网也能用;PaddleOCR 支持 v5/v6 多档模型
  • 本地 HTTP OCR:可接入局域网里的 Umi-OCR / LunaTranslator OCR 服务,适合把 PC 端 OCR 能力接到手机截屏流里
  • 云端识别:PP-OCRv6 在线(PaddleOCR AI Studio)/ 百度 / 腾讯 / 有道——本机识不准时兜底;PP-OCRv6 在线需填写 AI Studio Access Token
  • 切源语言时会自动检查"当前 OCR 能不能认这门语言",认不了会推荐换引擎,不用自己排查
  • 可自动判别横排 / 竖排 / 旋转文本方向,必要时重跑更合适的 OCR 路径;也可以手动锁定方向
  • PaddleOCR、日漫 OCR 和方向模型会按设备可用核心数动态选择 1 / 2 / 4 / 6 个 CPU 推理线程,最高 6 线程

🌐 翻译引擎

  • 大语言模型:DeepSeek / ChatGPT / 智谱 / 自架兼容接口……一边翻一边显示,不用等整段
  • 端侧 LLM:Sakura(日→简中 ACGN/VN)与 Hy-MT2(多语种翻译)GGUF 模型按需下载,模型就绪后可离线翻译
  • 译名一致性:可按全局或指定 App 保存人名、地点、组织和专业术语,让 OpenAI 兼容接口与端侧 LLM 在连续剧情中使用固定译名
  • DeepL:官方付费 / 免费版自动识别,支持自架 deeplx(免 key 的开源代理,能在自己服务器上跑),可选「官方 / deeplx / 自动 fallback」三种协议
  • 有道图翻:截图直接换译文,跳过中间环节,特别适合漫画
  • Google:免 key、免费(国内需代理)
  • 每个引擎都有「测试连接」按钮,DeepL 顺带告诉你这个月还剩多少免费字数

🔤 划词翻译(按一个词出字典)

不只是翻整屏。框出屏上一个单词或短语,弹卡片一次告诉你:

  • 译文 —— 所有翻译引擎都给
  • 音标 / 词性 / 多条释义 / 例句对照 / 难点解释 —— 使用大语言模型时才有完整字典;生僻词、专业名词、缩写、文化背景和易混用法会单独说明(百度 / 腾讯 / DeepL 这类只返回译文)
  • 卡片上有「复制原文」「复制译文」两个按钮,长按文字也能复制
  • 横屏时顶部关闭栏和底部复制栏固定,中间内容单独滚动,并自动避开状态栏、导航栏和刘海区域
  • 适合查游戏 / 漫画 / 视觉小说里冒出来的生词,单词长按一秒,比切回字典 App 快得多

🎨 译文怎么显示

  • 两种渲染:贴每段原文下 / 上 / 覆盖(BLOCKS),或装进一个可拖拽缩放的悬浮窗口(适合虚拟按键密集的游戏,让译文飘在画面上方不挡操作;可一键锁定避免误触)
  • 自动适配画面:紧贴原文显示时,根据每个文字区域自动选择颜色、背景和字号,并尽量把译文放回原文位置;关闭后恢复原来的显示设置
  • 排版与阅读顺序统一:默认让译文跟随 OCR 识别出的横排 / 竖排及阅读顺序;关闭后必须手动选择横排或竖排,以及从左到右或从右到左,OCR 块排序和译文渲染共用同一方向
  • 译文块可复制:可选长按译文块调用系统文字选择,或点击译文块打开选择面板,按范围选择文字,也能整段复制原文 / 译文
  • 5 套配色 + 可视化取色器:直接选择背景、文字、边框颜色和透明度,不需要手填 ARGB;横屏下取色面板可滚动
  • 完整文字样式:加粗、倾斜、下划线、字符间距、行距、对齐、描边和阴影都可独立调整,预览与实际译文同步
  • 漫画 / 字幕优化:自动把被切成几段的同一句话合到一起再翻;竖排日漫从右往左拼;漢字旁的小注音(振假名)自动去掉,译文不再重复;竖排场景可用竖排译文布局
  • 长译文跑马灯:单行模式下太长不会被省略号截断,自动横向滚动
  • 译文字体自选:导入 .ttf 后只作用于译文渲染,系统 UI 仍使用默认字体;已导入字体会以 chip 形式保留可切换

🛠️ 用着舒服的小事

  • 中英界面 + 浅 / 深 / 跟随系统主题,立即切换不重启
  • 设置项内搜索:找不到选项?顶部搜一下,中英关键字都行;颜色、字体、备份、导入导出等新配置均已加入索引
  • 系统预设方案:内置「离线日语漫画 OCR → 简中」等组合,一键完成识别、翻译和显示设置;日漫预设默认使用自动适配画面,缺模型时会提示先下载
  • 后台模型下载:离开设置页后仍可继续;应用内和系统通知都会显示当前模型与下载进度,并支持取消、失败重试和断点续传
  • 按应用翻译上下文:可自动识别前台 App,为不同游戏启用各自的术语;包名始终留在本机,只有主动开启时才把应用显示名称交给支持上下文的翻译模型
  • 便携配置包:一键导出 / 导入非敏感设置、自定义预设和字体文件;API Key、Token 等凭据只留在当前设备
  • 翻译结果缓存:当前运行期间,相同文本和翻译配置会复用结果;云端接口与端侧 LLM 都不会重复计算
  • 崩溃自动留现场:Java 崩溃、原生崩溃、ANR、低内存退出等会在下次启动进入日志页,可导出经过脱敏的诊断报告
  • 基础 TalkBack 支持:悬浮球、弧形菜单、语言 / 预设快切、截图选区、划词卡片和取色器都有读屏标签、状态与操作提示
  • 敏感设置加密保存:API Key、prompt、镜像 URL、预设等持久化字段会迁移到加密存储,减少本机明文残留
  • 新版本自动提示:进入主页自动检查(每天最多一次),国内拉不到会给你直链
  • 国产手机后台引导:小米 / OPPO / VIVO / 华为 / 三星 容易杀后台的手机,有一键跳转设置的引导
  • 隐私保护:明文 HTTP 默认只能在家里的局域网用,公网必须 HTTPS

🧩 项目特点

屏译将截屏、OCR、翻译和译文排版分成可独立配置的环节:

特点 说明
OCR 和翻译可以自由组合 OCR 可选端侧、本地 HTTP 或云端;翻译可选端侧模型、OpenAI 兼容接口或多家机器翻译,不会因为某一家服务不好用就整套应用失效
可以全离线,也可以完全自建 使用端侧 OCR + Sakura / Hy-MT2 时截图和文字无需离开手机;也能把 OCR、DeepLX、Ollama 等服务放在自己的电脑或服务器上
专门面向游戏、漫画和视觉小说 智能等待文字显示完整、跳过重复画面、优先处理对话框、识别竖排日漫,并让译文跟随原文位置和阅读方向;还可按游戏固定人名与术语
开源且不锁配置 代码采用 Apache-2.0;设置、预设、术语和字体可以导出迁移,API Key 不会写进导出文件

适合希望自行选择 OCR 和翻译方式,并兼顾离线使用、竖排漫画与自建服务的用户。

📸 截图

实际译文叠加 —— Discord 沟通规则页,OCR 紧贴原文渲染:

经典深色主题 浅色纸张主题 自动适配画面
经典深色译文叠加 浅色纸张译文叠加 Discord 自动适配画面

游戏场景 —— Sandship UI 同一画面对比:原图、紧贴原文与自动适配画面。

显示方式 画面
原图无处理 游戏原图无处理
紧贴原文 游戏译文紧贴原文
自动适配画面 游戏译文自动适配画面

漫画 / 字幕场景 —— 漫画气泡按列识别后译文紧贴覆盖:

韩文漫画 日文竖排漫画
韩文漫画译文叠加 日文竖排漫画译文叠加

日文漫画自动适配对比 —— 同一张竖排日漫从原版到自动适配画面,并展示将译文改为横排、从左向右后的效果:

原版 自动适配画面 自动适配画面(横排、从左向右)
日文漫画原版 日文漫画自动适配画面 日文漫画自动适配画面,译文横排并从左向右

设置页

语言 / 主题 / 系统预设 翻译后端
设置顶部与系统预设 翻译后端设置
OCR 引擎 方向模型设置
OCR 引擎设置 自动方向判别与方向模型设置
译文样式与字体 自动适配画面
译文显示与字体设置 自动适配画面设置
弧形菜单按钮 悬浮窗口模式选项
弧形菜单按钮设置 悬浮窗口模式设置
段落合并 / 悬浮球 智能循环翻译
段落合并与悬浮球设置 智能循环翻译设置

悬浮窗口模式 —— 把所有原文 / 译文集中到一个可拖拽缩放的浮窗里,避免「贴原文」模式下译文挡住游戏操控(虚拟摇杆 / 按键 / 对话推进键)。窗口支持锁定:解锁时可拖动、可缩放、带 X 关闭按钮和底部缩放手柄;锁定后只剩文字内容,不响应任何手势,彻底防误触。

解锁(可拖拽 / 缩放 / 关闭) 锁定(防误触,只剩内容)
悬浮窗口解锁状态 悬浮窗口锁定状态

长按悬浮球的弧形子菜单 & 划词翻译卡片 —— 左:长按弹出菜单,循环 / 选区 / 在「全屏翻译」和「划词翻译」之间切换 / 回主页(按钮顺序可在设置里拖动重排);右:圈出屏上一个词后弹出的卡片,连读音、词性、多条释义、例句一起呈现(使用大语言模型时才能拿到这套完整字典)。

长按弹出的弧形菜单 划词翻译卡片(带字典)
长按悬浮球弹出弧形菜单 划词翻译字典卡片

📦 安装

  1. 到本仓库的 Releases 页下载最新 ScreenTranslator-x.y.z.apk
  2. 在 Android 设备上点击安装(首次需在系统设置允许"安装未知来源应用")
  3. 启动后依次授予 悬浮窗通知 权限

只发布 arm64-v8a(64 位 ARM) 架构。armeabi-v7a / x86 暂不支持——端侧 OCR(PaddleOCR / ML Kit)的 native lib 体积大;且 32 位 ARM 缺 64 位 NEON 优化、可用寄存器少,推理慢一档,OCR 等待时间会明显拉长。如有 32 位设备需求请在 Issue 反馈。

每个 APK 同时附带 .sha256 校验文件,可对照本地 Get-FileHash / sha256sum 输出确认下载完整性。

🚀 使用

  1. 启动 App,点 启动截屏服务,确认系统弹出的"开始截屏?"对话框
  2. 切到任意游戏 / 视觉小说 / 漫画 App
  3. 点屏幕上的圆形悬浮按钮 → 2~3 秒内底部出现译文
  4. 长按悬浮按钮 → 打开弧形菜单,可切换循环模式、重选截图区域、切源语言/目标语言、切翻译预设,或在整屏翻译与划词翻译之间切换(循环可使用固定间隔,也可等待文字稳定后自动翻译)
  5. 默认单击译文条隐藏、长按选择复制;也可在设置中改为点击译文块打开原文 / 译文复制面板

可选:

  • 在系统"无障碍"里启用本应用,同时按下音量加 / 音量减并按住 300ms 作为全局触发。该服务不读取其它 App 的无障碍文字或 View 树;屏译自身的主要悬浮控件提供 TalkBack 标签、状态和操作提示
  • 安装 Shizuku 并授权后,在设置切换到 Shizuku 截屏路径,免去每次的系统授权弹窗;截屏会优先走原始像素通路,并用 PNG 作为兼容回退
  • 在设置顶部选择系统预设方案,例如「离线日语漫画 OCR → 简中」。预设需要的模型未就绪时,会显示缺失项并提供下载入口
  • 若只想查一个词,先在弧形菜单把主球操作切到「划词翻译」,再框选屏幕上的单词 / 短语;也可以在其它 App 中选中文本后从系统菜单调用屏译

⚙️ 配置

启动 App 后进入"设置"。设置页顶部可切换 应用语言主题模式;任意 section 都可用搜索图标按关键字(中英文都行)快速跳转。

OCR 引擎

引擎 适用场景 备注
端侧 ML Kit (auto / latin / ja / zh / ko) 默认;日文 / 中文 / 韩文 / 拉丁字符 无需外网,端侧推理
端侧 PaddleOCR PP-OCRv5 / v6 多语种密排文字、UI 按钮、横排中文 / 英文 支持 v5 mobile、v6 tiny / small / medium;首次使用需模型就绪,见下
端侧 日漫 OCR 日语漫画、竖排气泡、手写感字体 使用 manga-ocr ONNX,复用 DBNet 检测;约 140 MB,按需下载或本地导入
本地 HTTP Umi-OCR 已在 PC / 局域网部署 Umi-OCR 的场景 http://<host>:<port>/api/ocr,手机截图发到你的局域网服务
本地 HTTP LunaTranslator 已在 PC / 局域网部署 LunaTranslator OCR 的场景 填 LunaTranslator OCR HTTP endpoint
云端 PP-OCRv6 在线 中文、日文及拉丁字母多语种 使用 PaddleOCR AI Studio PP-OCRv6 异步任务接口;需 AI Studio Access Token
云端 百度 OCR ML Kit / Paddle 漏检兜底 需 API Key + Secret,按量计费;5 个 endpoint(标准/含位置/高精度/含位置高精度/网络图片);图片有尺寸 / 宽高比限制
云端 腾讯 OCR 同上 需 SecretId + SecretKey;3 个 endpoint:GeneralBasic / GeneralAccurate / RecognizeAgent(LLM 智能体,已对接 ParagNo 段落分组合并)
云端 有道云 OCR 简单一键 需 应用 ID(API Key)+ 应用密钥;langType 跟随源语言自动映射,无需独立选择
端侧 OCR 基准测试

测试条件:

  • 设备:高通骁龙 8 Gen 3,16 GB 内存
  • 测试画面:同一张日文漫画截图,全屏 1440×3200
  • 预处理与文本合并关闭;Debug 构建开启详细性能日志
  • 「OCR 耗时」是引擎内部识别耗时;「完整流程」还包含截屏、方向判断、必要的模型切换和渲染
  • 以下是单台设备、单张画面的实测记录,用于比较本项目内不同端侧模型,不代表所有设备和图片的固定表现

速度优先

OCR 模型 OCR 耗时 完整流程 本次画面识别情况
PP-OCRv5 Mobile 平均 1.17 秒 平均 2.30 秒 34 段;速度尚可,但错字、漏字和乱码较多
PP-OCRv6 Tiny 0.65 秒 2.00 秒¹ 29 段;最快,但本次日文识别基本不可用
PP-OCRv6 Small 0.84 秒 2.51 秒¹ 35 段;PaddleOCR 中综合表现最好,大部分正文正确
PP-OCRv6 Medium 3.60 秒 6.36 秒¹ 35 段;找回部分正文,但仍有错字和拆分问题
Manga OCR 5.54 秒 6.45 秒 17 个完整气泡;竖排组合、语句完整性和整体准确度最好

¹ 完整流程包含从上一个 PaddleOCR 模型切换并加载的时间:Tiny 约 0.44 秒、Small 约 0.77 秒、Medium 约 1.80 秒。

精度优先

OCR 模型 OCR 耗时 完整流程 相比速度优先
PP-OCRv5 Mobile 3.08 秒 4.24 秒 多检出 5 段,但误检和乱码增加
PP-OCRv6 Tiny 1.81 秒 3.02 秒 多检出文本框,但日文仍基本不可用
PP-OCRv6 Small 4.01 秒 5.35 秒 找回少量小字,同时新增多处误检
PP-OCRv6 Medium 16.85 秒 18.16 秒 只多保留 2 段,耗时过高
Manga OCR 平均 5.73 秒 平均 7.00 秒 21 段;找回更多小字,底部复杂区域有所改善,也增加少量噪声

本次画面建议优先使用 PP-OCRv6 Small 速度优先,它在速度和日文识别质量之间最均衡;日漫竖排与准确度优先时使用 Manga OCR。本次测试中,PaddleOCR 的精度优先档均未体现出稳定的准确度收益。

端侧翻译基准测试

测试条件:

  • 设备:高通骁龙 8 Gen 3,16 GB 内存
  • 相同的 18 段日文 OCR 结果,翻译为简体中文
  • 开发者选项开启「禁用翻译缓存」,两组均为 0 个缓存命中
  • CPU 推理线程为 TG=6 / PP=6;JNI 原生 B4 批量翻译,共 5 组(4+4+4+4+2)
  • 每个模型都在强制停止应用后重新启动;开启悬浮翻译时自动加载并预热模型
  • 「开始显示」和「全部完成」从翻译批次开始计时,不包含前面的 OCR;以下结果来自 Debug 构建
端侧翻译模型 模型文件 冷启动预热 开始显示 18 段全部完成 本次翻译情况
Sakura 1.5B(Q5_K_S) 约 1.20 GB 2.99 秒 3.40 秒 10.30 秒 中文较自然,但出现一处否定翻反和时间词误译
Hy-MT2 1.8B(Q4_K_M) 约 1.08 GB 2.38 秒 3.51 秒 10.84 秒 否定和时间词更准确,但部分语境、长句和中文表达较差

Sakura 的首批显示快约 0.11 秒,全部完成快约 0.54 秒;Hy-MT2 的冷启动预热快约 0.61 秒。Sakura 本次中文更自然,Hy-MT2 在个别语义细节上处理得更准确。Hy-MT2 的 KV 缓冲为 512 MiB,Sakura 为 224 MiB,在内存较小的设备上需要注意运行时压力。

PaddleOCR 模型:首次使用需要下载或本地导入,默认选择 PP-OCRv5 mobile。也可以按画面和语言切换版本:

  • v5 mobile:默认版本,支持简体中文、繁体中文、英文和日文
  • v6 tiny:体积最小、速度最快,支持多种拉丁字母语言,但不支持日文
  • v6 small:速度与准确度比较均衡,支持日文
  • v6 medium:体积更大、速度更慢,适合配置较高并且愿意多等一会儿的设备

PP-OCRv6 在线:这是云端识别服务,需要填写 AI Studio Access Token,不用下载上面的手机端模型。使用时截图会发送到 PaddleOCR 的在线服务。

方向模型:用于判断画面是否旋转、文字是否倒置,已经随应用提供。显示「已就绪」时无需重复下载。

日漫 OCR 模型:第一次使用需要下载或本地导入,模型来源主要在 Hugging Face;网络无法访问时可以使用代理、自定义镜像或本地导入。

模型下载与就绪状态:PaddleOCR、日漫 OCR、方向模型和离线翻译模型都可以在后台下载。离开设置页后任务仍会继续,应用和系统通知会同步显示进度;可以随时取消,网络中断后会自动重试并接着下载。显示「已就绪」后即可使用;如需更换模型,先删除现有模型。

自动方向判别:默认开启,会根据画面和语言选择横排或竖排。遇到误判时,可以手动指定横排、日漫竖排或其它方向。

检测速度与精度:默认使用「速度优先」。遇到小字、浅色字或细长竖排漏检时,可以改为「精度优先」,但识别时间会更长。OCR 高级设置一般保持默认即可;只有持续漏字或误识别过多时再逐步调整,并可一键恢复默认。

手机端性能:本地识别和翻译会根据手机性能自动调整工作量。性能较好的手机等待更短,低端设备可能需要更长时间,无需手动设置线程数量。

百度 OCR 注意事项:图片限制为 最长边 ≤ 4096px、最短边 ≥ 15px、宽高比 1:4 ~ 4:1、base64 后 < 4MB。本项目对前两条会自动缩放兜底,宽高比超限只能调小 / 重画截屏区。

翻译引擎

先按使用场景选,不需要把每个参数都看一遍:

引擎 适合什么 需要准备 使用前要知道
Sakura(端侧) 日语漫画、视觉小说、galgame 翻成简中 下载约 1.26 GB 模型 仅用于日语 → 简中;离线可用,但依赖手机性能
Hy-MT2(端侧) 多语种离线翻译 下载约 1.13 GB 模型 源语言和目标语言跟随设置;低内存设备可能加载失败
OpenAI 兼容 已有 DeepSeek、OpenAI、智谱、SiliconFlow、Ollama 等账号或服务 Base URL、API Key、模型名 可流式显示并自定义提示词;费用和限流由服务商决定
DeepL / DeepLX 想用传统机器翻译,或已有自建 DeepLX DeepL Auth Key,或 DeepLX 服务地址 官方 DeepL 自动匹配 free / pro;测试连接可查看额度
有道图翻 漫画、整张图片和大量文字框 有道应用 ID + 应用密钥 直接翻整张截图,选择后不再使用上方 OCR 引擎
Google 临时尝试、不想填写密钥 使用非官方端点,国内通常需要代理,可能随时限流或失效
火山引擎 长时间循环翻译 已开通机器翻译的 AK / SK 保持默认地区即可;属于联网服务
百度翻译 通用文本翻译 百度翻译开放平台 APPID + 密钥 与百度 OCR 不是同一个产品和账号体系
腾讯翻译 通用文本翻译,或已经配置腾讯 OCR 腾讯 SecretId + SecretKey 可直接复用腾讯 OCR 的同一组密钥

所有联网引擎都可以先点「测试连接」,确认配置正确后再进入游戏。

OpenAI 兼容接口怎么填?
  • Base URL:填写服务商给出的 OpenAI 兼容地址,通常以 /v1/ 结尾
  • API Key:填写服务商生成的密钥;自建服务没有密钥时可留空
  • 模型名:照服务商控制台或自建服务中的名称填写,不要凭示例猜测
  • Prompt 模板:默认是适合游戏对话的口语化翻译提示词;可以修改。未自定义时会跟随界面语言,已经改过的内容不会被自动覆盖
端侧模型下载与性能说明
  • 支持 Hugging Face、hf-mirror、自定义镜像和本地模型导入;后台下载提供通知进度、取消、失败重试和断点续传
  • 使用移动网络或无法判断网络类型时,下载大模型前会先提醒流量风险
  • 启动截屏服务后,已选择并下载好的日漫 OCR、Sakura 或 Hy-MT2 会提前做好准备,减少第一次识别和翻译的等待
  • 一张画面里有多段文字时,Sakura / Hy-MT2 会尽量一起处理;设备不适合时会自动改为逐段处理
  • 手机端翻译目前主要使用 CPU;Sakura 的 Vulkan 加速仍是默认关闭的实验功能,不保证所有设备都能使用或更快
  • Sakura / Hy-MT2 只在受支持的 64 位设备和系统版本上开放

术语与应用上下文

  • 术语库:可保存原文、固定译名、语言对、分类、大小写规则和启用状态,并按全局或指定 App 生效;支持按原文 / 译文 / 应用 / 分类筛选
  • 前台 App 识别:可选自动、无障碍、使用情况访问或仅全局。应用包名只用于本机匹配术语,不会发送给翻译服务;「向模型发送应用名称」默认独立关闭
  • 引擎范围:应用名称和术语上下文目前只对 OpenAI 兼容接口与端侧 LLM 生效;普通机器翻译引擎仍按原有请求工作

循环翻译

  • 触发方式:固定间隔按设定毫秒数执行;「智能等待文字完成」会在打字 / 报幕继续变化时重置计时,文字稳定后立即翻译
  • 动态背景:端侧 OCR 可在画面仍有动画时复核文字是否连续不变;云端 OCR 只使用画面稳定性判断,避免为复核额外计费请求
  • 报幕区域:可选自动、下半屏优先或全屏自由,并决定只翻译报幕区域,还是用该区域判断稳定后翻译首帧全部文字
  • 重复跳过:完全相同的画面直接跳过 OCR 与翻译;相似画面会继续确认 OCR 文字是否变化,灵敏度可调

显示

  • 渲染模式:BLOCKS(按 OCR 框紧贴原文)/ 悬浮窗口(可拖拽缩放的独立浮窗,详见上方截图章节
  • 位置:BLOCKS 下可选 below / overlap / above + 像素级 x/y 偏移微调
  • 译文排版:「跟随识别」默认开启,让横排 / 竖排与阅读顺序共同决定 OCR 块排序和译文渲染;关闭后需明确选择横排 / 竖排和左到右 / 右到左,支持竖排日漫和横排 RTL
  • 译文块交互:默认点击关闭、长按自由选择复制;也可切换为点击打开复制面板,在原文和译文中选择范围或整段复制
  • 悬浮窗口:可切「原文+译文 / 仅译文」两种内容形态;锁定后窗口不可拖拽 / 不可缩放,适合游戏中防误触;底部「重置位置 / 大小」按钮一键回到默认
  • 主题色:5 种预设 + 可视化自定义取色器,可分别调整背景 / 文字 / 边框颜色与透明度;边框支持实线 / 虚线 / 点线 / 双线 / 凹槽
  • 文字样式:加粗 / 倾斜 / 下划线、字符间距、行距、左中右对齐、描边宽度与颜色、阴影半径 / 偏移 / 颜色均可配置
  • 字体:可导入 .ttf 字体,只影响译文层和译文预览;导入过的字体会保留为可横向切换的 chip,重新选择已有字体不会打乱顺序
  • 避让 & 合并:碰撞检测限制译文宽度不挤进相邻 OCR 框;OCR 后合并相邻 box 提供 保守 / 标准 / 激进 三档强度——保守适合视觉小说 / 长段密集,标准适合多数场景,激进适合漫画气泡内多列被切碎的情形(可能误合相邻气泡)

预设与悬浮菜单

  • 系统预设方案:内置「离线日语漫画 OCR → 简中」等组合,一次设置好识别、翻译、语言和显示方式。日漫预设默认使用自动适配画面;缺少模型时会逐项提示下载。
  • 自定义预设:当前设置可保存为预设;只有和当前设置完全匹配时才显示为已应用,改过任意关键项会回到"未保存预设"状态。
  • 弧形菜单按钮:可拖动排序,可选每页显示 2–6 个按钮;如果还有下一组,最后一格会自动变成「下一组」。菜单可包含循环、截图区域、划词/整屏切换、语言快切、预设快切、设置页和返回主应用。

配置备份与迁移

  • 完整配置包:导出为 .otsettings,包含除凭据外的应用设置、自定义预设、术语库和已导入的 .ttf 字体,适合换机或分享配置
  • 敏感信息不出设备:API Key、Token、Secret、Access ID、App ID 等不写入配置包;导入时保留目标设备已有凭据
  • 兼容旧预设:仍可导入旧版 .otpresets 文件;新配置包导入后会校验并去重预设名称
  • 模型按选择恢复:配置包会保存模型选择、镜像和调优参数,但不会塞入体积可达 GB 的模型文件;模型仍需在目标设备下载或本地导入

无障碍与诊断

  • TalkBack:主要悬浮入口提供可读标签、开关状态和双击 / 长按操作;选区会朗读当前状态和尺寸,复杂菜单按整行读取
  • 划词卡片:顶部关闭栏和底部复制栏固定,正文独立滚动;横屏会扣除系统栏与刘海安全区域,避免按钮只显示一半
  • 崩溃日志:除 Java 异常外,Android 11+ 还会汇总系统记录的原生崩溃、ANR、低内存和信号退出;报告中的设置快照会脱敏,系统 trace 限制读取大小
  • 开发者诊断:可选择保存 OCR 使用的截图,方便排查漏字和错字;该功能默认关闭,每次启动应用最多保存 8 张,截图可能包含私人内容。还可以临时关闭译文缓存,让每次测试都重新翻译

⚠️ 已知限制

  • Android 14+ 每次首次启动截屏都会弹一次系统授权窗,这是 Google 设计;Shizuku 路径可绕过
  • 部分 ROM(小米 / OPPO / VIVO)默认杀后台 / 拦截悬浮窗,需手动加入电池白名单 + 允许后台启动;应用内有兼容引导
  • 反作弊网游可能把 MediaProjection 判为外挂截屏 → 本项目仅适用于单机 / 视觉小说 / 漫画
  • 设置了 FLAG_SECURE 的画面(部分网银 / 视频 App)截出来是黑屏,本项目不做绕过
  • PaddleOCR 端侧推理在低端机(骁龙 7 系以下)单次约 1~3 秒;推荐配合区域选择使用
  • 端侧 LLM 模型体积约 1GB 以上,首次下载建议走 Wi-Fi;低内存设备可能无法稳定加载
  • 当前端侧 OCR 与 LLM 的正式推理路径以 CPU 为主,尚未接入高通 QNN / NPU;Sakura Vulkan 路径仍为默认关闭的实验能力,不保证所有设备可用或更快
  • 日漫 OCR 模型公开源主要在 HuggingFace,国内网络不可达时需要代理、自建镜像或本地导入
  • TalkBack 已覆盖主要悬浮操作,但 OCR 识别出的整屏游戏文字尚未提供成可逐项浏览的系统无障碍节点

🗺️ 路线图

✅ 现在已经能用

功能 用户实际能做什么
悬浮翻译 在游戏、漫画或视觉小说上点悬浮球,直接把译文显示在原文附近或独立悬浮窗口中
自动适配画面 根据每个文字区域自动选择译文颜色、背景和字号,并把译文放回原文位置
自动循环 固定间隔翻译,或等报幕文字显示完整后再翻;相同画面自动跳过,也可优先识别下半屏对话框
多种 OCR 使用手机端 ML Kit / PaddleOCR / 日漫 OCR,也能连接局域网 OCR 或百度、腾讯、有道、PP-OCRv6 在线服务
横排与竖排 自动识别旋转画面、横排和竖排日漫;译文可以跟随识别结果,也能手动指定排列和阅读方向
多种翻译方式 使用 OpenAI 兼容接口、DeepL、Google、火山、百度、腾讯、有道图翻,或 Sakura / Hy-MT2 离线模型
复制译文 长按译文自由选择复制,或点击译文块打开面板,复制部分文字、整段原文或整段译文
划词查词 框选一个词或短语查看译文;使用大语言模型时还能显示音标、词性、释义、例句和难点说明
固定人名与术语 保存全局或指定游戏的人名、地点和专业术语,让连续剧情中的译名保持一致
模型下载 在后台下载端侧模型,通过应用和通知查看进度,并可取消、失败重试或断点续传
本地翻译优化 启动截屏后提前准备离线模型,并尽量一起处理同一画面的多段文字,减少等待
个性化与迁移 调整译文颜色、字体、大小、描边和阴影;导出设置、预设、术语和字体,换机后再导入
辅助功能 使用音量双键触发、TalkBack 操作提示、崩溃日志导出和国产手机后台运行引导

📋 后续方向

以下是准备继续改善的用户功能,不代表固定的开发顺序:

方向 希望带来的体验
译文朗读(TTS) 在每个译文块旁直接播放译文语音,并提供清楚的播放 / 停止状态
翻译历史 回看之前翻过的画面和对话,不再因为切屏而丢失上一段内容
离线词典 没有联网或使用普通机器翻译时,也能查看单词释义和基础例句
本地翻译继续优化 进一步缩短等待时间,并降低长时间使用时的发热与耗电
无障碍完善 让整屏 OCR 文字和动态译文也能被读屏逐项浏览和操作

🤝 参与开发

欢迎社区贡献。无论是 bug 修复、新功能、UI 改进、翻译还是文档勘误,都很受欢迎。

分支与 PR 规则

⚠️ 不要直接 PR 到 main 分支。

main 是稳定主线,只接受经维护者审核合入 —— 用作打 tag 发版的基线。

外部 PR 请按以下流程走:

  1. 先开 issue 讨论:说明你想做的改动 / 修的 bug,确认方向,避免做白工
  2. Fork 仓库,从最新 main 切出 feature 分支:
    git checkout -b feat/your-idea  origin/main
    
  3. 本地开发并自测(至少在一台真机上跑通 ./gradlew installDebug
  4. PR 提交到 dev 分支(如仓库还没有 dev,请在 issue 里 ping 维护者建立);维护者会在 dev 上聚合多人 PR、复测后整合到 main
  5. 直接 push 到 main / 强推 main 是被禁止的(仓库会通过 branch protection 拦截)

本地构建

git clone https://github.com/ciddwd/overlay-translator.git
cd overlay-translator
cp local.properties.example local.properties
# 编辑 local.properties,把 sdk.dir 改成本机 Android SDK 路径
./gradlew installDebug   # 装到已连接设备

需 JDK 17 + Android SDK 35。Android Studio 打开会自动同步并补 Gradle wrapper jar;命令行环境需先 gradle wrapper --gradle-version 8.10.2

翻译贡献

如果想加入新语言或修正现有翻译:

  1. 复制 app/src/main/res/values/strings.xmlapp/src/main/res/values-<lang>/strings.xml(例如 values-zh-rTWvalues-ja
  2. 只翻译 <string> 标签内的值,保留 key(name="...")和占位符({source}{target}%1$s\n 等)
  3. app/src/main/res/xml/locales_config.xml 添加 <locale android:name="<lang>" />
  4. app/src/main/java/com/gameocr/app/ui/SettingsScreen.ktAPP_LANGUAGE_OPTIONS 追加一行
  5. 在 PR 描述里附上覆盖率(多少条字符串已翻译)与试译截图

未来若有 10+ 种语言,会迁移到 Weblate 在线协作平台,简化流程。

Commit message

推荐遵循 Conventional Commits 简化版:

feat: 新功能
fix:  bug 修复
docs: 文档
refactor: 重构(不改行为)
chore: 构建 / CI / 工具链
i18n: 翻译相关

副标题与正文请用中文或英文,不要混在一句话里;首行 ≤ 72 字符。

行为准则

  • 友善、就事论事,对人不动情绪
  • 不发与项目无关的内容 / 商业推广 / 政治议题
  • 维护者保留以"不符合项目方向"为由关闭 issue / PR 的权利,并会说明原因

🙏 致谢

上游项目

贡献者

(首次 PR 合入后会自动出现在这里)

灵感来源

桌面端 VNR / Visual Novel Reader 等同类工具长期以来在 PC 平台为 galgame / 视觉小说玩家提供实时翻译。本项目把这条管线带到 Android,并针对手机场景(电池、ROM 限制、touch UI)做了重新设计。

📄 许可

代码采用 Apache-2.0。模型与第三方依赖各自保留原协议。

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools
AI Daily Digest