V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kiduu
V2EX  ›  程序员

不用 GPU 搭建一个漫画自动翻译网站

  •  6
     
  •   kiduu · 2023-06-12 00:14:10 +08:00 · 4146 次点击
    这是一个创建于 530 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不用 GPU 搭建一个漫画自动翻译网站

    简介

    最近因为看《我心里危险的东西》和《放学后失眠的你》然后因为太喜欢了就去看漫画了,后来又一发不可收拾就去追更漫画了。还追了一部没找到熟肉的条漫。条漫是英语还好,我自己虽然只是四级水平的英语能力,但是可以勉强能看懂台词,实在看不懂的可以去直接各个翻译平台就行了。但是日漫还有一些本子来说说,我完全不认识日文,想去平台翻译也不太好翻译。因为漫画不是小说,文字都是图片形式的,自己去做 OCR 识别再去翻译属实是折磨中的折磨。因此我就到处找能用的软件 /平台终于让我找到了这个程序。试用了一下就觉得这就是我要的。

    这个项目就是: https://github.com/zyddnys/manga-image-translator

    硬件需求

    理论上来说还是推荐大家使用 GPU 服务器提供服务,这样速度会更快。还有就是推荐用海外平台。主要是为了方便用一些海外服务商的翻译服务。当然,也可以国内直接搭建,家用电脑也可以。

    我们这里用的是

    腾讯云的硅谷轻量服务器( 2C2G )

    说回项目本身。硬件配置 2C2G 其实是有些低的,但是我也只是需要最小可用即可。因为这是为我自己个人使用而搭建的,没有正式商业化的打算。如果你需要的是商业化或者说开放给大家使用的话那么推荐可以考虑购买活动主场的新老同享区的 GPU 计算型 GN7 服务器,推荐年付。服务器价格只有平时的三折,对于 GPU 服务器来说每月只需 798 还是很划算的。

    购买时镜像可以选择 Debian 或者是 linux 宝塔

    环境配置

    方面主要是 python 环境推荐 3.8 及以上版本。

    可以通过python --version进行查看默认版本号。如果遇到提示版本号 2.7 或者提示下图的

    python:command not found可以尝试使用

    python3 --version
    

    确定 python3 版本符合要求之后我们还需要进行额外的一步操作,让 linux 系统下的默认的 python 命令绑定到 python3 上。

    1 、如果你的系统只有 python3:

    1.1 首先,确认已安装的 Python3 版本和其安装路径。可以通过以下命令查找 Python3 的安装路径:

    which python3
    #/usr/bin/python3
    

    1.2 假设 Python3 的路径为 /usr/bin/python3(如果实际路径不同,请将以下步骤中的路径更改为实际路径),你可以运行以下命令将 Python3 添加为系统的可选择 Python 版本:

    update-alternatives --install /usr/bin/python python /usr/bin/python3 1
    

    这个命令的意思是,将 /usr/bin/python3 作为可供选择的 Python 版本,并为它设置优先级为 1 。

    1.3 运行以下命令,你可以看到所有可供选择的 Python 版本:

    update-alternatives --config python
    

    在出现的列表中,选择 Python3 作为默认版本。

    2 、同时有 python2 ,python3

    还是一样的操作

    which python2
    which python3
    

    然后,你需要使用 update-alternatives 命令将两个版本的 Python 添加到可选项中。你可以给它们设置一个优先级,数值越大,优先级越高。在这个例子中,我们将给 Python3 设置更高的优先级,使其成为默认版本:

    update-alternatives --install /usr/bin/python python /usr/bin/python2 1
    update-alternatives --install /usr/bin/python python /usr/bin/python3 2
    

    最后再选择 python3 版本的作为默认版本即可

    update-alternatives --config python
    

    项目搭建

    接下来就是重头戏了。

    添加 swap

    首先给你的服务器添加 swap 。因为这个项目还是比较吃内存的,我个人推荐内存+swap 最好大于 8GB 。这里我添加了 8GB 的 swap

    按照以下的命令一次复制粘贴执行即可

    fallocate -l 8G /swapfile
    #创建 swap 文件
    chmod 600 /swapfile
    #权限设置成只有 root 用户才能读写
    mkswap /swapfile
    #设置成 swap 空间
    swapon /swapfile
    #启用 swap 文件
    swapon --show
    #查看是否成功启用
    echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
    #重启有效
    

    项目配置

    首先我们需要编译安装pydensecrf,注意一定要先安装这个,不然可能会导致奇奇怪怪的问题

    #海外服务器
    pip install git+https://github.com/lucasb-eyer/pydensecrf.git
    
    #国内服务器
    pip install git+https://ghproxy.com/https://github.com/lucasb-eyer/pydensecrf.git
    

    这个速度可能会有点慢,稍微等几分钟就行。

    再拉取项目仓库:

    #海外服务器
    git clone https://github.com/zyddnys/manga-image-translator.git
    
    #国内服务器
    git clone https://ghproxy.com/https://github.com/zyddnys/manga-image-translator.git
    

    安装依赖:

    cd manga-image-translator
    pip install -r requirements.txt
    

    等依赖安装的过程之中我们可以先看下面的操作。

    防火墙设置

    项目可以命令行运行也可以 web 运行,我们时需要 web 服务,方便在线访问的。项目 web 模式会默认运行在 5003 端口,所以我们需要先去服务器控制台进行端口开放,如果使用了宝塔服务器还需要去宝塔后台同样进行操作。

    腾讯云轻量服务器控制台: https://console.cloud.tencent.com/lighthouse/instance

    选择项目服务器,点击防火墙

    开放 5003 端口协议选 tcp

    宝塔面板开放端口,操作都是类似的,但是宝塔强制要求备注

    防火墙设置完成之后,项目依赖应该也已经完成了。

    项目运行

    我们是 CPU 服务器,需要提供 web 在线服务。

    所以我们可以直接用命令行命令,如果是腾讯云的 GPU 服务器,在初始化的时候会自动安装 cuda ,运行命令也只需要加上--use-cuda就可以了

    python -m manga_translator --verbose --mode web
    python -m manga_translator --verbose --mode web --use-cuda
    

    这时候你可以直接在宝塔面板设置反向代理就可以通过域名访问了

    如果你不需要域名,要直接通过 IP:端口来访问,还需要给命令指定 host 才行,否则无法访问公网 IP:端口,内网 IP 可在服务器控制台查看,也可以通过ifconfig命令查看一般都是 eth0 的 ip

    python -m manga_translator --verbose --mode web --host 内网 IP
    # python -m manga_translator --verbose --mode web --host 10.0.4.14
    

    这样就可以直接在公网通过公网 ip:5003 来访问 web 服务了。

    我个人偏向于使用离线翻译节约成本,需要其他翻译器的可以查看官方文档添加 api key 。

    翻译器列表:

    我用的是 m2m100_big 。

    首次运行会下载对应翻译模型,OCR 包等大文件

    你可以下载对应文件然后上传到对应目录,也可以先看一下是需要下哪些文件,可以提前下好

    下载文件都是 github 文件,所以都可以通过加速链接下载源文件到指定文件夹

    加速下载方式:

    wget https://ghproxy.com/+github-url -P 文件夹
    # wget https://ghproxy.com/https://github.com/zyddnys/manga-image-translator/releases/download/beta-0.3/inpainting_lama_mpe.ckpt -P /home/lighthouse/manga-image-translator/models/inpainting
    

    然后就可以看到项目运行了

    整个工作流流程大概分为以下几个:

    上传图片——ocr 提取原文——翻译——重新绘图——返回图片

    其中可能涉及到分辨率放大处理之类的

    下面是我的测试效果:

    原图

    完成图

    我对这个效果还是很满意的。

    批量翻译

    批量翻译只支持命令行翻译

    命令行翻译单一图片

    # 如果机器有支持 CUDA 的 NVIDIA GPU ,可以添加 `--use-cuda` 参数
    # 使用 `--use-cuda-limited` 将需要使用大量显存的翻译交由 CPU 执行,这样可以减少显存占用
    # 使用 `--translator=<翻译器名称>` 来指定翻译器
    # 使用 `--target-lang=<语言代码>` 来指定目标语言
    # 将 <图片文件路径> 替换为图片的路径
    # 如果你要翻译的图片比较小或者模糊,可以使用 upscaler 提升图像大小与质量,从而提升检测翻译效果
    python -m manga_translator --verbose --use-cuda --translator=google --target-lang=CHS -i <path_to_image_file>
    # 结果会存放到 result 文件夹里
    

    批量翻译只要加上--mode batch就可以了

    # 其它参数如上
    # 使用 `--mode batch` 开启批量翻译模式
    # 将 <图片文件夹路径> 替换为图片文件夹的路径
    python -m manga_translator --verbose --mode batch --use-cuda --translator=google --target-lang=CHS -i <图片文件夹路径>
    # 结果会存放到 `<图片文件夹路径>-translated` 文件夹里
    

    web 服务持续运行

    这里推荐两种方法:screen 和 nohup

    1 、screen

    #安装 screen
    apt install screen -y
    # 创建一个 shell 窗口
    screen -R manga
    #然后在直接运行 web 服务命令即可。CTRL + A ,CTRL + D 让这个 shell 窗口挂载运行。
    下次需要进入这个窗口可以再次输入`screen -R manga`进入
    

    2 、nohup

    nohup python -m manga_translator --verbose --mode web > output.log 2>&1 &
    

    这个命令作用是把所有日志都输出到 output.log 中,最后的&表示让这个命令在后台运行

    其他

    项目地址: https://github.com/zyddnys/manga-image-translator

    项目官方演示站: https://touhou.ai/imgtrans/

    项目其他前端: https://github.com/VoileLabs/cotrans

    目前在线翻译上用油猴脚本配合CORS插件可以实现最小可用了。 脚本有需要的可以在我的博客找到

    23 条回复    2024-10-30 16:26:31 +08:00
    diveIntoWork
        1
    diveIntoWork  
       2023-06-12 00:53:57 +08:00
    牛的牛的,用爱发电
    hs0000t
        2
    hs0000t  
       2023-06-12 01:08:02 +08:00 via Android
    W0RvZG8gRnVndXJpIChTaGluZG91KV0gU2FpbWluIFNoaW5idW4=
    b1t
        3
    b1t  
       2023-06-12 01:58:08 +08:00
    牛哇
    ChrisCyler
        4
    ChrisCyler  
       2023-06-12 06:29:00 +08:00 via Android
    🐮啊
    LxExExl
        5
    LxExExl  
       2023-06-12 07:45:22 +08:00
    效果真好,给楼主点个赞!
    4lieS
        6
    4lieS  
       2023-06-12 08:59:10 +08:00
    我心危强推!
    fengjianxinghun
        7
    fengjianxinghun  
       2023-06-12 10:17:23 +08:00
    不错,看起来很实用。gpt 真的让巴别塔坍塌了。
    onetown
        8
    onetown  
       2023-06-12 10:26:51 +08:00
    厉害厉害, 先 star 一下。
    Huelse
        9
    Huelse  
       2023-06-12 10:42:09 +08:00
    难得的高质量贴
    leeg810312
        10
    leeg810312  
       2023-06-12 11:07:32 +08:00
    很强啊。自用频率不高的话,用 Saas 服务比较便宜方便,即用即付
    tsutomu
        11
    tsutomu  
       2023-06-12 11:40:59 +08:00
    很担心会被 e 站广告毒瘤拿去用啊
    haha512
        12
    haha512  
       2023-06-12 12:00:25 +08:00
    这个一直在关注,确实不错,只可惜现在更新越来越慢了,issue 和 pull 解决也慢了,大概是用爱发电快走不动了
    dayudayupao
        13
    dayudayupao  
       2023-06-12 15:10:53 +08:00
    已阅,可以删了
    FakerLeung
        14
    FakerLeung  
       2023-06-12 16:03:17 +08:00
    有没有油猴插件?我最近在看一些 [不方便透露] 的漫画,也是日文的,但是看不懂剧情,想翻译一下
    fengjianxinghun
        15
    fengjianxinghun  
       2023-06-12 16:08:48 +08:00
    @FakerLeung 老哥,给个地址,我去研究一下
    xinJang
        16
    xinJang  
       2023-06-12 16:21:22 +08:00
    @FakerLeung 战术 mark
    wei2629
        17
    wei2629  
       2023-06-12 16:31:31 +08:00
    nb 研究下
    kiduu
        18
    kiduu  
    OP
       2023-06-12 16:34:23 +08:00
    @FakerLeung 我博客 https://www.xuehaiwu.com/manga-image-translator/ 末尾有针对 nhentai 的油猴脚本,要额外装一个 CORS 的插件。不怕速度慢可以用我的搭建好的服务,manga.xuehaiwu.com 。我做了针对脚本的设置,所以没办法直接在网站上用,可以在油猴上用。这是使用界面 https://image.xuehaiwu.com/2023/06/12/chrome_t0h3kPyq0N.png
    对速度有需求的可以直接本地电脑用 cuda 启一个网页服务
    xiaojun1994
        19
    xiaojun1994  
       2023-06-12 16:55:58 +08:00
    牛逼
    FakerLeung
        20
    FakerLeung  
       2023-06-13 00:24:19 +08:00
    @kiduu 尴尬,图像 fetch 的时候跨域了。
    kiduu
        21
    kiduu  
    OP
       2023-06-13 00:29:32 +08:00
    @FakerLeung 文章末尾 CORS 那块有说明,得先装个插件
    FakerLeung
        22
    FakerLeung  
       2023-06-13 09:27:47 +08:00
    @kiduu
    就是 CORS 的问题,获取图片那里不行了。得再研究下怎么使用。
    qqqnnn
        23
    qqqnnn  
       23 天前
    @kiduu 搜不到了大佬
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   970 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 19:57 · PVG 03:57 · LAX 11:57 · JFK 14:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.