漫画や画像のテキストを翻訳します。
中文说明 |変更ログ
discord に参加してください https://discord.gg/Ak8APNy4vb
一部の漫画や画像は決して翻訳されないため、このプロジェクトが生まれました。
サンプルは常に更新されるとは限らず、現在のメイン ブランチのバージョンを表していない可能性があることに注意してください。
オリジナル | 翻訳済み |
---|---|
(出典 @09ra_19ra) | (マスク) |
(出典 @VERTIGRIS_ART) | --detector ctd (マスク) |
(出典 @hiduki_yayoi) | --translator none (マスク) |
(出典 @rikak) | (マスク) |
公式デモ (by zyddnys): https://touhou.ai/imgtrans/
ブラウザ ユーザー スクリプト (QiroNT による): https://greasyfork.org/scripts/437569
MMDOCR-HighPerformance の後継。
これは趣味のプロジェクトですので、貢献することを歓迎します。
現在、これは単なる単純なデモであり、多くの不完全な点が存在します。このプロジェクトをより良くするためにあなたのサポートが必要です。
主に日本語テキストの翻訳用に設計されていますが、中国語、英語、韓国語もサポートしています。
インペイント、テキストレンダリング、カラー化をサポートします。
# First, you need to have Python(>=3.8) installed on your system
# The latest version often does not work with some pytorch libraries yet
$ python --version
Python 3.10.6
# Clone this repo
$ git clone https://github.com/zyddnys/manga-image-translator.git
# Create venv
$ python -m venv venv
# Activate venv
$ source venv/bin/activate
# For --use-gpu option go to https://pytorch.org/ and follow
# pytorch installation instructions. Add `--upgrade --force-reinstall`
# to the pip command to overwrite the currently installed pytorch version.
# Install the dependencies
$ pip install -r requirements.txt
モデルは実行時に./models
にダウンロードされます。
一部の pip 依存関係はこれなしではコンパイルできないため、pip のインストールを開始する前に、まず Microsoft C++ Build Tools (ダウンロード、手順) をインストールしてください。 (#114を参照)。
Windows で cuda を使用するには、https://pytorch.org/ の指示に従って正しい pytorch バージョンをインストールします。
要件:
demo/doc
フォルダー内のファイルを使用する場合はオプション)このプロジェクトはzyddnys/manga-image-translator:main
image で Docker をサポートしています。この Docker イメージには、プロジェクトに必要なすべての依存関係/モデルが含まれています。この画像はかなり大きい (約 15GB) ことに注意してください。
Web サーバーは、(CPU 用) を使用してホストできます。
docker run -p 5003:5003 -v result:/app/result --ipc=host --rm zyddnys/manga-image-translator:main -l ENG --manga2eng -v --mode web --host=0.0.0.0 --port=5003
または
docker-compose -f demo/doc/docker-compose-web-with-cpu.yml up
どちらを好むかに応じて。 Web サーバーはポート 5003 で起動し、画像は/result
フォルダーに置かれる必要があります。
CLI で docker を使用するには (つまり、バッチ モードで)
docker run -v < targetFolder > :/app/ < targetFolder > -v < targetFolder > -translated:/app/ < targetFolder > -translated --ipc=host --rm zyddnys/manga-image-translator:main --mode=batch -i=/app/ < targetFolder > < cli flags >
注:ホスト マシン上のファイルを参照する必要がある場合は、関連するファイルをコンテナ内の/app
フォルダーにボリュームとしてマウントする必要があります。 CLI のパスは、ホスト マシン上のパスではなく、内部 Docker パス/app/...
にする必要があります。
一部の翻訳サービスでは、API キーを環境変数として Docker コンテナに渡すように設定するために機能する必要があります。例えば:
docker run --env= " DEEPL_AUTH_KEY=xxx " --ipc=host --rm zyddnys/manga-image-translator:main < cli flags >
サポートされている GPU で使用するには、まず最初の
Docker
セクションをお読みください。使用する必要がある特別な依存関係がいくつかあります
次のフラグを設定してコンテナを実行するには:
docker run ... --gpus=all ... zyddnys/manga-image-translator:main ... --use-gpu
または (Web サーバー + GPU の場合)
docker-compose -f demo/doc/docker-compose-web-with-gpu.yml up
docker イメージをローカルでビルドするには、実行できます (マシン上で make が必要になります)。
make build-image
次に、ビルドされたイメージをテストするために実行します
make run-web-server
# use `--use-gpu` for speedup if you have a compatible NVIDIA GPU.
# use `--target-lang <language_code>` to specify a target language.
# use `--inpainter=none` to disable inpainting.
# use `--translator=none` if you only want to use inpainting (blank bubbles)
# replace <path> with the path to the image folder or file.
$ python -m manga_translator -v --translator=google -l ENG -i < path >
# results can be found under `<path_to_image_folder>-translated`.
# saves singular image into /result folder for demonstration purposes
# use `--mode demo` to enable demo translation.
# replace <path> with the path to the image file.
$ python -m manga_translator --mode demo -v --translator=google -l ENG -i < path >
# result can be found in `result/`.
# use `--mode web` to start a web server.
$ python -m manga_translator -v --mode web --use-gpu
# the demo will be serving on http://127.0.0.1:5003
# use `--mode web` to start a web server.
$ python -m manga_translator -v --mode api --use-gpu
# the demo will be serving on http://127.0.0.1:5003
GUI実装: BallonsTranslator
検出器:
--detector ctd
使用すると、検出されるテキスト行の量が増加する可能性がありますOCR:
翻訳者:
画家: ??
カラーライザー: mc2
--upscale-ratio 2
またはその他の値を指定してアップスケーラーを使用できます。--font-size-minimum 30
を指定するか、検出されたテキストバブルに適応しようとする--manga2eng
レンダラーを使用します。--font-path fonts/anime_ace_3.ttf
でフォントを指定します。 -h, --help show this help message and exit
-m, --mode {demo,batch,web,web_client,ws,api}
Run demo in single image demo mode (demo), batch
translation mode (batch), web service mode (web)
-i, --input INPUT [INPUT ...] Path to an image file if using demo mode, or path to an
image folder if using batch mode
-o, --dest DEST Path to the destination folder for translated images in
batch mode
-l, --target-lang {CHS,CHT,CSY,NLD,ENG,FRA,DEU,HUN,ITA,JPN,KOR,PLK,PTB,ROM,RUS,ESP,TRK,UKR,VIN,ARA,CNR,SRP,HRV,THA,IND,FIL}
Destination language
-v, --verbose Print debug info and save intermediate images in result
folder
-f, --format {png,webp,jpg,xcf,psd,pdf} Output format of the translation.
--attempts ATTEMPTS Retry attempts on encountered error. -1 means infinite
times.
--ignore-errors Skip image on encountered error.
--overwrite Overwrite already translated images in batch mode.
--skip-no-text Skip image without text (Will not be saved).
--model-dir MODEL_DIR Model directory (by default ./models in project root)
--use-gpu Turn on/off gpu
--use-gpu-limited Turn on/off gpu (excluding offline translator)
--detector {default,ctd,craft,none} Text detector used for creating a text mask from an
image, DO NOT use craft for manga, it's not designed
for it
--ocr {32px,48px,48px_ctc,mocr} Optical character recognition (OCR) model to use
--use-mocr-merge Use bbox merge when Manga OCR inference.
--inpainter {default,lama_large,lama_mpe,sd,none,original}
Inpainting model to use
--upscaler {waifu2x,esrgan,4xultrasharp} Upscaler to use. --upscale-ratio has to be set for it
to take effect
--upscale-ratio UPSCALE_RATIO Image upscale ratio applied before detection. Can
improve text detection.
--colorizer {mc2} Colorization model to use.
--translator {google,youdao,baidu,deepl,papago,caiyun,gpt3,gpt3.5,gpt4,none,original,offline,nllb,nllb_big,sugoi,jparacrawl,jparacrawl_big,m2m100,m2m100_big,sakura}
Language translator to use
--translator-chain TRANSLATOR_CHAIN Output of one translator goes in another. Example:
--translator-chain "google:JPN;sugoi:ENG".
--selective-translation SELECTIVE_TRANSLATION
Select a translator based on detected language in
image. Note the first translation service acts as
default if the language isn't defined. Example:
--translator-chain "google:JPN;sugoi:ENG".
--revert-upscaling Downscales the previously upscaled image after
translation back to original size (Use with --upscale-
ratio).
--detection-size DETECTION_SIZE Size of image used for detection
--det-rotate Rotate the image for detection. Might improve
detection.
--det-auto-rotate Rotate the image for detection to prefer vertical
textlines. Might improve detection.
--det-invert Invert the image colors for detection. Might improve
detection.
--det-gamma-correct Applies gamma correction for detection. Might improve
detection.
--unclip-ratio UNCLIP_RATIO How much to extend text skeleton to form bounding box
--box-threshold BOX_THRESHOLD Threshold for bbox generation
--text-threshold TEXT_THRESHOLD Threshold for text detection
--min-text-length MIN_TEXT_LENGTH Minimum text length of a text region
--no-text-lang-skip Dont skip text that is seemingly already in the target
language.
--inpainting-size INPAINTING_SIZE Size of image used for inpainting (too large will
result in OOM)
--inpainting-precision {fp32,fp16,bf16} Inpainting precision for lama, use bf16 while you can.
--colorization-size COLORIZATION_SIZE Size of image used for colorization. Set to -1 to use
full image size
--denoise-sigma DENOISE_SIGMA Used by colorizer and affects color strength, range
from 0 to 255 (default 30). -1 turns it off.
--mask-dilation-offset MASK_DILATION_OFFSET By how much to extend the text mask to remove left-over
text pixels of the original image.
--font-size FONT_SIZE Use fixed font size for rendering
--font-size-offset FONT_SIZE_OFFSET Offset font size by a given amount, positive number
increase font size and vice versa
--font-size-minimum FONT_SIZE_MINIMUM Minimum output font size. Default is
image_sides_sum/200
--font-color FONT_COLOR Overwrite the text fg/bg color detected by the OCR
model. Use hex string without the "#" such as FFFFFF
for a white foreground or FFFFFF:000000 to also have a
black background around the text.
--line-spacing LINE_SPACING Line spacing is font_size * this value. Default is 0.01
for horizontal text and 0.2 for vertical.
--force-horizontal Force text to be rendered horizontally
--force-vertical Force text to be rendered vertically
--align-left Align rendered text left
--align-center Align rendered text centered
--align-right Align rendered text right
--uppercase Change text to uppercase
--lowercase Change text to lowercase
--no-hyphenation If renderer should be splitting up words using a hyphen
character (-)
--manga2eng Render english text translated from manga with some
additional typesetting. Ignores some other argument
options
--gpt-config GPT_CONFIG Path to GPT config file, more info in README
--use-mtpe Turn on/off machine translation post editing (MTPE) on
the command line (works only on linux right now)
--save-text Save extracted text and translations into a text file.
--save-text-file SAVE_TEXT_FILE Like --save-text but with a specified file path.
--filter-text FILTER_TEXT Filter regions by their text with a regex. Example
usage: --text-filter ".*badtext.*"
--pre-dict FILe_PATH Path to the pre-translation dictionary file. One entry per line,
Comments can be added with `#` and `//`.
usage: //Example
dog cat #Example
abc def
abc
--post-dict FILE_PATH Path to the post-translation dictionary file. Same as above.
--skip-lang Skip translation if source image is one of the provide languages,
use comma to separate multiple languages. Example: JPN,ENG
--prep-manual Prepare for manual typesetting by outputting blank,
inpainted images, plus copies of the original for
reference
--font-path FONT_PATH Path to font file
--gimp-font GIMP_FONT Font family to use for gimp rendering.
--host HOST Used by web module to decide which host to attach to
--port PORT Used by web module to decide which port to attach to
--nonce NONCE Used by web module as secret for securing internal web
server communication
--ws-url WS_URL Server URL for WebSocket mode
--save-quality SAVE_QUALITY Quality of saved JPEG image, range from 0 to 100 with
100 being best
--ignore-bubble IGNORE_BUBBLE The threshold for ignoring text in non bubble areas,
with valid values ranging from 1 to 50, does not ignore
others. Recommendation 5 to 10. If it is too low,
normal bubble areas may be ignored, and if it is too
large, non bubble areas may be considered normal
bubbles
--target-lang
または-l
引数によって使用されます。
CHS : Chinese (Simplified)
CHT : Chinese (Traditional)
CSY : Czech
NLD : Dutch
ENG : English
FRA : French
DEU : German
HUN : Hungarian
ITA : Italian
JPN : Japanese
KOR : Korean
PLK : Polish
PTB : Portuguese (Brazil)
ROM : Romanian
RUS : Russian
ESP : Spanish
TRK : Turkish
UKR : Ukrainian
VIN : Vietnames
ARA : Arabic
SRP : Serbian
HRV : Croatian
THA : Thai
IND : Indonesian
FIL : Filipino (Tagalog)
名前 | APIキー | オフライン | 注記 |
---|---|---|---|
一時的に無効になります | |||
ようだお | ✔️ | YOUDAO_APP_KEY とYOUDAO_SECRET_KEY が必要です | |
百度 | ✔️ | BAIDU_APP_ID とBAIDU_SECRET_KEY が必要です | |
ディープル | ✔️ | DEEPL_AUTH_KEY が必要です | |
彩雲 | ✔️ | CAIYUN_TOKEN が必要です | |
gpt3 | ✔️ | text-davinci-003 を実装します。 OPENAI_API_KEY が必要です | |
gpt3.5 | ✔️ | gpt-3.5-turboを実装します。 OPENAI_API_KEY が必要です | |
gpt4 | ✔️ | gpt-4を実装します。 OPENAI_API_KEY が必要です | |
パパゴ | |||
さくら | SAKURA_API_BASE が必要です | ||
オフライン | ✔️ | 言語に最適なオフライン翻訳者を選択します | |
すごい | ✔️ | Sugoi V4.0モデル | |
m2m100 | ✔️ | あらゆる言語をサポート | |
m2m100_big | ✔️ | ||
なし | ✔️ | 空のテキストに翻訳する | |
オリジナル | ✔️ | 元のテキストを保存する |
OPENAI_API_KEY = sk-xxxxxxx...
DEEPL_AUTH_KEY = xxxxxxxx...
オフライン: トランスレーターをオフラインで使用できるかどうか。
Sugoi は mingshiba によって作成されました。https://www.patreon.com/mingshiba で彼をサポートしてください。
--gpt-config
引数で使用されます。
# The prompt being feed into GPT before the text to translate.
# Use {to_lang} to indicate where the target language name should be inserted.
# Note: ChatGPT models don't use this prompt.
prompt_template : >
Please help me to translate the following text from a manga to {to_lang}
(if it's already in {to_lang} or looks like gibberish you have to output it as it is instead):n
# What sampling temperature to use, between 0 and 2.
# Higher values like 0.8 will make the output more random,
# while lower values like 0.2 will make it more focused and deterministic.
temperature : 0.5
# An alternative to sampling with temperature, called nucleus sampling,
# where the model considers the results of the tokens with top_p probability mass.
# So 0.1 means only the tokens comprising the top 10% probability mass are considered.
top_p : 1
# The prompt being feed into ChatGPT before the text to translate.
# Use {to_lang} to indicate where the target language name should be inserted.
# Tokens used in this example: 57+
chat_system_template : >
You are a professional translation engine,
please translate the story into a colloquial,
elegant and fluent content,
without referencing machine translations.
You must only translate the story, never interpret it.
If there is any issue in the text, output it as is.
Translate to {to_lang}.
# Samples being feed into ChatGPT to show an example conversation.
# In a [prompt, response] format, keyed by the target language name.
#
# Generally, samples should include some examples of translation preferences, and ideally
# some names of characters it's likely to encounter.
#
# If you'd like to disable this feature, just set this to an empty list.
chat_sample :
Simplified Chinese : # Tokens used in this example: 88 + 84
- <|1|>恥ずかしい… 目立ちたくない… 私が消えたい…
<|2|>きみ… 大丈夫⁉
<|3|>なんだこいつ 空気読めて ないのか…?
- <|1|>好尴尬…我不想引人注目…我想消失…
<|2|>你…没事吧⁉
<|3|>这家伙怎么看不懂气氛的…?
# Overwrite configs for a specific model.
# For now the list is: gpt3, gpt35, gpt4
gpt35 :
temperature : 0.3
出力形式を { xcf
、 psd
、 pdf
} に設定すると、ファイルの生成に Gimp が使用されます。
Windows では、Gimp 2.x がC:Users<Username>AppDataLocalProgramsGimp 2
にインストールされていることを前提としています。
結果の.xcf
ファイルには、元のイメージが最下層のレイヤーとして含まれており、修復は別のレイヤーとして含まれています。翻訳されたテキストボックスには、元のテキストをレイヤー名として持つ独自のレイヤーがあり、簡単にアクセスできます。
制限事項:
.psd
ファイルを保存するときにテキスト レイヤーを通常の画像に変換します。--gimp-font
引数を使用して個別に制御されます。 # use `--mode api` to start a web server.
$ python -m manga_translator -v --mode api --use-gpu
# the api will be serving on http://127.0.0.1:5003
API は json(post) とマルチパートを受け入れます。
API エンドポイントは/colorize_translate
、 /inpaint_translate
、 /translate
、 /get_text
です。
API の有効な引数は次のとおりです。
// These are taken from args.py. For more info see README.md
detector: String
ocr: String
inpainter: String
upscaler: String
translator: String
target_language: String
upscale_ratio: Integer
translator_chain: String
selective_translation: String
attempts: Integer
detection_size: Integer // 1024 => 'S', 1536 => 'M', 2048 => 'L', 2560 => 'X'
text_threshold: Float
box_threshold: Float
unclip_ratio: Float
inpainting_size: Integer
det_rotate: Bool
det_auto_rotate: Bool
det_invert: Bool
det_gamma_correct: Bool
min_text_length: Integer
colorization_size: Integer
denoise_sigma: Integer
mask_dilation_offset: Integer
ignore_bubble: Integer
gpt_config: String
filter_text: String
overlay_type: String
// These are api specific args
direction: String // {'auto', 'h', 'v'}
base64Images: String //Image in base64 format
image: Multipart // image upload from multipart
url: String // an url string
手動翻訳は、機械翻訳を人間の翻訳者に置き換えます。 Web モードを使用する場合、基本的なマニュアル翻訳のデモは http://127.0.0.1:5003/manual で見つけることができます。
デモでは、同期モードと非同期モードの 2 つの翻訳サービス モードが提供されます。
同期モードでは、翻訳タスクが完了すると HTTP POST リクエストも終了します。
非同期モードでは、HTTP POST リクエストはすぐにtask_id
で応答します。このtask_id
を使用して、翻訳タスクの状態をポーリングできます。
file:<content-of-image>
を含むフォーム リクエストを http://127.0.0.1:5003/run に POST します。task_id
を使用して、 result/
ディレクトリ内の翻訳結果を見つけます。たとえば、Nginx を使用してresult/
公開します。 file:<content-of-image>
を含むフォーム リクエストを http://127.0.0.1:5003/submit に POST します。task_id
の取得{"taskid": <task-id>}
を http://127.0.0.1:5003/task-state に投稿して、翻訳タスクの状態をポーリングします。finished
、 error
、またはerror-lang
のいずれかになると終了します。result/
ディレクトリで翻訳結果を検索します。例: Nginx を使用してresult/
公開します。 フォーム データfile:<content-of-image>
を含むフォーム リクエストを http://127.0.0.1:5003/manual-translate に POST し、応答を待ちます。
次のような JSON 応答を取得します。
{
"task_id" : " 12c779c9431f954971cae720eb104499 " ,
"status" : " pending " ,
"trans_result" : [
{
"s" : " ☆上司来ちゃった…… " ,
"t" : " "
}
]
}
翻訳されたテキストを入力します。
{
"task_id" : " 12c779c9431f954971cae720eb104499 " ,
"status" : " pending " ,
"trans_result" : [
{
"s" : " ☆上司来ちゃった…… " ,
"t" : " ☆Boss is here... "
}
]
}
翻訳された JSON を http://127.0.0.1:5003/post-manual-result に投稿し、応答を待ちます。
次に、Nginx を使用してresult/
公開するなどして、 result/
ディレクトリで翻訳結果を見つけることができます。
次に行うべきことのリストです。ぜひご協力ください。
GPU サーバーは決して安いものではありませんので、ぜひ寄付をご検討ください。
Ko-fi: https://ko-fi.com/voilelabs
パトレオン: https://www.patreon.com/voilelabs
愛する电: https://afdian.net/@voilelabs