- UID
- 1719851
- 阅读权限
- 10
- 精华
- 主题
- 帖子
- 积分
- 101
- 论坛币
- Zeny
- HP
-
- SP
-
- 威望
- 点
- 魅力
- 点
- 赞
8
- 关注帖主
- 人
- 关注别人
- 人
|
发表于 2024-4-14 12:00:21
|阅读模式
TDhLRko=YDEFX
本帖最后由 jack1235467 于 2024-4-14 12:23 编辑
[j]YDEFX RPDGU9[/j]
[j]YDEFX RPDGSZ[/j]===前言===
[j]YDEFX RPDGTM[/j]
[j]YDEFX RPDGTW[/j]由于现有翻译器在 Linux 上基本不可用( wine 无 ***下载/download/otomedream/ダウンロード*** 常启动/ OCR 时闪退等)www.otomedream.com#0?) B( p: w- Z4 X- r,Linux 系统上也基本无可用的原生版本视觉小说翻译器www.otomedream.com#0?. f2 ~% ?% S( e g5 U x& [( O,故无奈寻求替代方案www.otomedream.com#0?8 O8 D% a4 p, b( v; r。
[j]YDEFX RPDGTX[/j]
[j]YDEFX RPDGTS[/j]Linux 系统上较为知名的支持OCR和划词翻译的翻译软件有 crow translate 和 pot-desktop 等www.otomedream.com#0?2 B5 a v k8 e) U ^% S。由于 crow translate 不能选择翻译效果更好的 DeepL 或者 OpenAI API 或 TogetherAI 的 API 等 进行翻译www.otomedream.com#0?. Q% X5 _: J* q$ j( t,且缺失一些高级特(xing)www.otomedream.com#0?9 i2 c* g j8 D( z3 O,故采用更方便的 pot-desktop
[j]YDEFX RPDGU5[/j]
[j]YDEFX RPDGTN[/j]获取相关软件和脚本
[j]YDEFX RPDGUD[/j]
[j]YDEFX RPDGTY[/j]首先安装如下包:[j]YDEFX RPDGTA[/j]
pot-desktopwww.otomedream.com#0?0 p3 r2 s1 L6 e& B3 A: i,实际包名请查询 Linux 发行版的官方仓库www.otomedream.com#0?: V) I% @2 N& w9 T$ E) h,NixOS 上的包名是 pot
[j]YDEFX RPDGU0[/j]slurp[j]YDEFX RPDGTC[/j]
grim
[j]YDEFX RPDGT6[/j]imagemagick
[j]YDEFX RPDGUJ[/j]bc
[j]YDEFX RPDGTI[/j]
[j]YDEFX RPDGT5[/j]同时需要下载 TEXTCLEANER 脚本(用于截图后在 OCR 前的预处理): http://www.fmwconcepts.com/imagemagick/textcleaner/index.php
[j]YDEFX RPDGT4[/j]
[j]YDEFX RPDGTU[/j]可能缺失依赖项www.otomedream.com#0?3 y, s5 I# T, o% R& S,请自行补齐[j]YDEFX RPDGTJ[/j]
[j]YDEFX RPDGTI[/j]截图方案
[j]YDEFX RPDGUA[/j]
[j]YDEFX RPDGU8[/j]为了实现自动化 OCR 而不是手动截图www.otomedream.com#0?- L) C- n {7 X3 s,需要通过 API 调用自动拉起该软件进行翻译www.otomedream.com#0?9 |( U+ k& ] {0 O,启动时软件会自动 ***下载/download/otomedream/ダウンロード*** 60828 端口[j]YDEFX RPDGU2[/j]
例如使用如下命令
[j]YDEFX RPDGUI[/j]- curl “127.0.0.1:60828/ocr_translate?screenshot=false”
复制代码 并保证需要 OCR 翻译的图片路径为 $CACHE/com.pot-app.desktop/pot_screenshot_cut.png 即可拉起 pot-desktop 进行 OCR 翻译www.otomedream.com#0?7 i8 G9 h* _( s/ D) y,其他使用方式请自行查询官方文档
[j]YDEFX RPDGTF[/j]
[j]YDEFX RPDGU2[/j]由于本人使用 Sway WM 作为桌面环境www.otomedream.com#0? O& N+ u% Z: Z! {,且 Wayland 中截图的方式与 X11 中不同www.otomedream.com#0?; s$ @6 ^) L3 y* R/ l1 \ K,本文采用 Wayland 中可用的方式www.otomedream.com#0?$ h/ ? }, }& N,X11 环境中原理类似
[j]YDEFX RPDGT3[/j]
[j]YDEFX RPDGUL[/j]通常的截图方案为运行 slurp 命令即可进行屏幕区域选择www.otomedream.com#0?0 W5 p: g n C/ \6 i- n,而 grim 则负责完成截图操作
[j]YDEFX RPDGTA[/j]
[j]YDEFX RPDGU2[/j]在用作翻译器时www.otomedream.com#0?, P* q V3 ^- Q0 t: t,由于视觉小说本身文字位置相对固定www.otomedream.com#0?! o/ p- W3 r; O/ Q,所以我们通过 slurp 找出截图区域后即可自动化该流程
[j]YDEFX RPDGU5[/j]假设我们得到了 “482,570 342x135” 的截图区域www.otomedream.com#0?, U9 e3 e7 E1 S,只需如下使用即可- grim -g “482,570 342x135”
复制代码
[j]YDEFX RPDGT8[/j]使用下述命令即可完成针对 pot 的截图www.otomedream.com#0?1 c- [2 t* @% g4 L,没有相关文件夹请提前创建- grim -g “482,570 342x135” ~/com.pot-app.desktop/pot_screenshot_cut.png
复制代码 [j]YDEFX RPDGTS[/j]
但是由于效果较差www.otomedream.com#0?, \! ~& q9 ?, f/ i,需要进行预处理www.otomedream.com#0?$ X$ J) d5 P: E& a,暂时保存为任意文件:- grim -g “482,570 342x135” ~/com.pot-app.desktop/pot_screenshot_tmp.png
复制代码
[j]YDEFX RPDGSX[/j]
[j]YDEFX RPDGT7[/j]图像预处理
[j]YDEFX RPDGTZ[/j][j]YDEFX RPDGTQ[/j]
由于本地 OCR 针对任意背景的文本识别效果较差www.otomedream.com#0?% W* ?$ O5 E; S F,需要根据具体场景实现图像的预处理
[j]YDEFX RPDGUJ[/j]复杂方案很多www.otomedream.com#0?9 k# B0 A! a6 [9 r7 B6 R! T. W,常见有利用 python opencv 等www.otomedream.com#0?4 V# D$ e5 y) y y,此处为了方便 逃课 选用了基于 imagemagick 的 TEXTCLEANER 脚本
[j]YDEFX RPDGTG[/j]目前在文字背景较为绚丽的情况下使用 -g -e none -f 15 -o 20 参数似乎效果不错www.otomedream.com#0?/ ***下载/download/otomedream/ダウンロード*** U; k# C k2 y4 F,但在背景为暗色时候效果不佳(感觉是降噪太狠了)www.otomedream.com#0?: _3 h, K5 z% y0 U1 d7 i. n( V,具体请根据文档酌情调整[j]YDEFX RPDGSY[/j]
如采用上述参数www.otomedream.com#0? Z: O: { \2 h: G {,则可完成图像处理部分
[j]YDEFX RPDGT9[/j]- /path/to/textcleaner -g -e none -f 15 -o 20 ~/.cache/com.pot-app.desktop/pot_screenshot_tmp.png ~/.cache/com.pot-app.desktop/pot_screenshot_cut.png
复制代码
[j]YDEFX RPDGUL[/j]如果采用 NixOSwww.otomedream.com#0?8 ^# t/ l m8 k7 p% Y! i$ |1 a( J,由于缺失依赖项www.otomedream.com#0?+ V9 i6 a& c% o, o,我懒得找了www.otomedream.com#0?0 r4 M6 g- ]$ H* L& y$ ? x4 ? g,我直接选择了 steam-run 方式获得一个较为常规的运行环境www.otomedream.com#0? f g N$ k2 I9 \) L,通过覆盖steam包获得剩下的依赖项 ( gamescope vkbasalt zenity 用于本人日常游戏www.otomedream.com#0?2 n- w. l9 P& k( D2 w) w, _,与本主题无关)[j]YDEFX RPDGT8[/j]
- programs.steam.package = pkgs.steam.override {
[j]YDEFX RPDGU8[/j] - extraPkgs = pkgs: with pkgs; [
[j]YDEFX RPDGUK[/j] - gamescope
[j]YDEFX RPDGTX[/j] - vkbasalt[j]YDEFX RPDGT7[/j]
- gnome.zenity[j]YDEFX RPDGTH[/j]
- imagemagick
[j]YDEFX RPDGTM[/j] - bc[j]YDEFX RPDGTU[/j]
- ];[j]YDEFX RPDGT2[/j]
- };
复制代码
[j]YDEFX RPDGU4[/j]
[j]YDEFX RPDGTF[/j]整理[j]YDEFX RPDGU9[/j]
[j]YDEFX RPDGT6[/j]简要可以概括为
[j]YDEFX RPDGU2[/j]- grim -g “482,570 342x135” ~/com.pot-app.desktop/pot_screenshot_tmp.png && (steam-run) /path/to/textcleaner -g -e none -f 15 -o 20 ~/.cache/com.pot-app.desktop/pot_screenshot_tmp.png ~/.cache/com.pot-app.desktop/pot_screenshot_cut.png && curl “127.0.0.1:60828/ocr_translate?screenshot=false”
复制代码
[j]YDEFX RPDGTU[/j]
[j]YDEFX RPDGUC[/j]无限循环[j]YDEFX RPDGU2[/j]
[j]YDEFX RPDGTL[/j]采用下列方式 while true; do ***下载/download/otomedream/ダウンロード*** ***下载/download/otomedream/ダウンロード*** ; done 即可
[j]YDEFX RPDGUF[/j]例如
[j]YDEFX RPDGT5[/j]- while true
[j]YDEFX RPDGTR[/j] - do
[j]YDEFX RPDGUE[/j] - sleep 2s
[j]YDEFX RPDGTE[/j] - grim -g “138,703 935x229” ~/.cache/com.pot-app.desktop/pot_screenshot_tmp.png && steam-run ~/.config/sway/textcleaner -g -e none -f 15 -o 20 ~/.cache/com.pot-app.desktop/pot_screenshot_tmp.png ~/.cache/com.pot-app.desktop/pot_screenshot_cut.png && curl “127.0.0.1:60828/ocr_translate?screenshot=false”
[j]YDEFX RPDGTK[/j] - done
复制代码 由于费用考虑www.otomedream.com#0?. v) _3 I% k% p+ P. D,可适当增加 sleep 间隔
[j]YDEFX RPDGTV[/j][j]YDEFX RPDGU5[/j]
总结
[j]YDEFX RPDGUJ[/j]
[j]YDEFX RPDGU4[/j]归根结底www.otomedream.com#0?0 c, H# A: j1 P$ T4 K; P,问题基本是自动化进行 截图->预处理->调用翻译 等步骤www.otomedream.com#0?7 [/ }8 k5 C0 ^; J6 p,采用类似方案也可达到同样效果www.otomedream.com#0?! ` Z% f# x1 f B% },可自行尝试
[j]YDEFX RPDGUK[/j][j]YDEFX RPDGT7[/j]
[j]YDEFX RPDGU1[/j]最终的翻译效果图:
[j]YDEFX RPDGTV[/j]
[j]YDEFX RPDGTU[/j]
[j]YDEFX RPDGTP[/j]关于图片处理:
[j]YDEFX RPDGTZ[/j]一般要达到足够清晰的效果才可完成本地 OCR
[j]YDEFX RPDGTF[/j]处理前:
[j]YDEFX RPDGTD[/j]
[j]YDEFX RPDGTT[/j]处理后:
[j]YDEFX RPDGTB[/j][j]YDEFX RPDGTW[/j]
pot进一步处理:[j]YDEFX RPDGT6[/j]
[j]YDEFX RPDGTG[/j]效果依然不是很好www.otomedream.com#0?- z8 v3 ?/ y1 q) J) l! g,需要更多调整
|
|