zyddnys / manga-image-translator

Translate manga/image 一键翻译各类图片内文字 https://cotrans.touhou.ai/
https://cotrans.touhou.ai/
GNU General Public License v3.0
4.59k stars 473 forks source link

[Bug]: 使用非标准翻译API翻译时,可能会导致输出图片文字空白 #616

Open Hyouka0510 opened 2 months ago

Hyouka0510 commented 2 months ago

Issue

系统环境:window11 CURD11.8 python3.9.x 运行命令:python -m manga_translator --verbose --format=png --save-text --ocr=48px_ctc --use-gpu --translator=gpt3.5 --target-lang=CHS -i test/10.rawkuma.com.png 问题描述:使用非标准翻译API(主要是指GPT)翻译时,因为API结果返回的格式不符合格式,所以文本翻译匹配不上导致输出图片文字空白。API全部都请求成功了 而且也有结果返回了的。 大概就是请求文本如下 <|1|> translation content 然后返回的结果可能是 <|1>| 翻译内容
返回格式不正确,然后就匹配不上返回空值。 尝试使用了原生GPT API和中转的API ,结果图片有些空白有些正常 。 十几张图可能有一张出问题。翻译内容问题不是概率问题 如果是用Google,papago,youdao等都是正常的

示例图片: 10 rawkuma com

翻译结果: 10 rawkuma com-translated

建议: 增加失败机制或备用翻译,使用非标准API翻译或主选翻译失败时,切换到备用翻译。备用翻译建议只能使用有格式标准的翻译选项

Command Line Arguments

python -m manga_translator --verbose --format=png --save-text --ocr=48px_ctc --use-gpu --translator=gpt3.5 --target-lang=CHS -i test/10.rawkuma.com.png

Console logs

(python39) D:\Users\Desktop\manga-image-translator>
python -m manga_translator --verbose --format=png --save-text --ocr=48px_ctc --use-gpu --translator=gpt3.5 --target-lang=CHS -i test/10.rawkuma.com.png

[batch] Namespace(mode='batch', input=['test/10.rawkuma.com.png'], dest='', target_lang='CHS', verbose=True, format='png', attempts=0, ignore_errors=False, overwrite=False, skip_no_text=False, model_dir=None, use_gpu=True, use_gpu_limited=False, detector='default', ocr='48px_ctc', use_mocr_merge=False, inpainter='lama_large', upscaler='esrgan', upscale_ratio=None, colorizer=None, translator='gpt3.5', translator_chain=None, selective_translation=None, revert_upscaling=False, detection_size=1536, det_rotate=False, det_auto_rotate=False, det_invert=False, det_gamma_correct=False, unclip_ratio=2.3, box_threshold=0.7, text_threshold=0.5, min_text_length=0, no_text_lang_skip=False, inpainting_size=2048, inpainting_precision='fp32', colorization_size=576, denoise_sigma=30, mask_dilation_offset=0, font_size=None, font_size_offset=0, font_size_minimum=-1, font_color=None, line_spacing=None, force_horizontal=False, force_vertical=False, align_left=False, align_center=False, align_right=False, uppercase=False, lowercase=False, no_hyphenation=False, manga2eng=False, gpt_config=None, use_mtpe=False, save_text=True, save_text_file='', filter_text=None, prep_manual=False, font_path='', gimp_font='Sans-serif', host='127.0.0.1', port=5003, nonce='', ws_url='ws://localhost:5000', save_quality=100, ignore_bubble=0, kernel_size=3)
[batch] Running in batch mode
[batch] Translating: "D:\Users\Desktop\manga-image-translator\test\10.rawkuma.com.png"
[batch] Loading models
[batch] Running text detection
[DefaultDetector] Detection resolution: 1280x1536
[batch] Running ocr
[Model48pxCTCOCR] prob: 0.9999746492580732 さすが fg: (3, 4, 4) bg: (3, 4, 4)
[Model48pxCTCOCR] prob: 0.9992336571568087 つまり fg: (241, 234, 239) bg: (236, 229, 233)
[Model48pxCTCOCR] prob: 0.9999940395848174 しかも fg: (1, 0, 0) bg: (1, 0, 0)
[Model48pxCTCOCR] prob: 0.9892254938416188 くすくす fg: (1, 1, 2) bg: (1, 2, 2)
[Model48pxCTCOCR] prob: 0.9999376913743027 でもまぁ fg: (0, 0, 0) bg: (1, 0, 0)
[Model48pxCTCOCR] prob: 0.9997689093578358 最強四歳児 fg: (1, 0, 1) bg: (2, 1, 1)
[Model48pxCTCOCR] prob: 0.9999979337115911 もしかしたら fg: (0, 0, 0) bg: (0, 0, 0)
[Model48pxCTCOCR] prob: 0.9997843731659936 【魔力操作】が fg: (1, 1, 2) bg: (2, 3, 2)
[Model48pxCTCOCR] prob: 0.974027958135109 二倍あるのが fg: (1, 1, 2) bg: (1, 1, 1)
[Model48pxCTCOCR] prob: 0.9999617023913769 まだまだ伸び代 fg: (1, 2, 3) bg: (2, 1, 2)
[Model48pxCTCOCR] prob: 0.9999512471688512 できるわけで fg: (0, 0, 0) bg: (0, 1, 1)
[Model48pxCTCOCR] prob: 0.9999918087367587 普通なのかもね fg: (0, 0, 0) bg: (0, 0, 0)
[Model48pxCTCOCR] prob: 0.9895284110836777 げーむより つよい fg: (252, 247, 250) bg: (252, 248, 250)
[Model48pxCTCOCR] prob: 0.9997953202060369 なんかのバグで fg: (2, 1, 2) bg: (3, 2, 2)
[Model48pxCTCOCR] prob: 0.9998711168303033 上限超えの魔力値 fg: (1, 1, 0) bg: (1, 1, 0)
[Model48pxCTCOCR] prob: 0.9995052742782901 最高潮なのでは? fg: (1, 0, 0) bg: (3, 1, 1)
[Model48pxCTCOCR] prob: 0.8748026449843717 最大値はMP:9999 fg: (2, 2, 2) bg: (3, 3, 2)
[Model48pxCTCOCR] prob: 0.9991624322482491 ゲーム内にはなかった fg: (2, 0, 1) bg: (7, 7, 5)
[Model48pxCTCOCR] prob: 0.9920276812633542 もはや私のポテンシャルは fg: (0, 0, 0) bg: (0, 0, 0)
[Model48pxCTCOCR] prob: 0.9996967261304126 表記になっているだけで fg: (2, 1, 1) bg: (4, 2, 1)
[Model48pxCTCOCR] prob: 0.9942692620222676 【宝玉】とともにいるあいだは fg: (0, 0, 0) bg: (3, 2, 2)
[batch] Running text translation
[GPT35TurboTranslator] Translating into Chinese (Simplified)
[GPT35TurboTranslator] Temperature: 0.5, TopP: 1
[GPT35TurboTranslator] -- GPT Prompt --
System:
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 Simplified Chinese.
User:
<|1|>恥ずかしい… 目立ちたくない… 私が消えたい…
<|2|>きみ… 大丈夫⁉
<|3|>なんだこいつ 空気読めて ないのか…?
Assistant:
<|1|>好尴尬…我不想引人注目…我想消失…
<|2|>你…没事吧⁉
<|3|>这家伙怎么看不懂气氛的…?
User:
<|1|>つまり
<|2|>でもまぁもしかしたらなんかのバグで最大値はMP:9999表記になっているだけで
<|3|>【宝玉】とともにいるあいだは二倍あるのが普通なのかもね
<|4|>げーむより つよい
<|5|>上限超えの魔力値しかもゲーム内にはなかった【魔力操作】ができるわけでもはや私のポテンシャルは最高潮なのでは?
<|6|>さすが最強四歳児まだまだ伸び代
<|7|>くすくす
[GPT35TurboTranslator] -- GPT Response --
<|1|>也就是说
<|2|>不过也有可能是因为某个 bug,导致最大值显示为 MP:9999
<|3>【宝玉】在身边的时候,魔力值通常会翻倍
<|4|>比游戏里还强
<|5>魔力值不仅突破了上限,而且还拥有游戏里没有的【魔力操作】能力,我的潜力是不是已经达到了顶峰?
<|6>不愧是最强的四岁儿童,还有很大的成长空间
<|7>呵呵呵
[GPT35TurboTranslator] []
[GPT35TurboTranslator] Used 606 tokens (Total: 606)
WARNING: [GPT35TurboTranslator] Repeating because of invalid translation. Attempt: 2
[GPT35TurboTranslator] Temperature: 0.5, TopP: 1
[GPT35TurboTranslator] -- GPT Prompt --
System:
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 Simplified Chinese.
User:
<|1|>恥ずかしい… 目立ちたくない… 私が消えたい…
<|2|>きみ… 大丈夫⁉
<|3|>なんだこいつ 空気読めて ないのか…?
Assistant:
<|1|>好尴尬…我不想引人注目…我想消失…
<|2|>你…没事吧⁉
<|3|>这家伙怎么看不懂气氛的…?
User:
<|1|>つまり
<|2|>でもまぁもしかしたらなんかのバグで最大値はMP:9999表記になっているだけで
<|3|>【宝玉】とともにいるあいだは二倍あるのが普通なのかもね
<|4|>げーむより つよい
<|5|>上限超えの魔力値しかもゲーム内にはなかった【魔力操作】ができるわけでもはや私のポテンシャルは最高潮なのでは?
<|6|>さすが最強四歳児まだまだ伸び代
<|7|>くすくす
[GPT35TurboTranslator] -- GPT Response --
<|1|>也就是说
<|2|>不过嘛说不定有什么bug,最大值只是显示为MP:9999
<|3>【宝玉】在身边的时候,平常都是双倍吧
<|4|>比游戏里还强
<|5>|魔力值突破上限,而且游戏里没有的【魔力操作】也可以使用,我的潜力是不是已经达到顶峰了?
<|6>|不愧是最强四岁儿,还有很大的成长空间
<|7>|呵呵呵
[GPT35TurboTranslator] []
[GPT35TurboTranslator] Used 593 tokens (Total: 1199)
WARNING: [GPT35TurboTranslator] Repeating because of invalid translation. Attempt: 3
[GPT35TurboTranslator] Temperature: 0.5, TopP: 1
[GPT35TurboTranslator] -- GPT Prompt --
System:
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 Simplified Chinese.
User:
<|1|>恥ずかしい… 目立ちたくない… 私が消えたい…
<|2|>きみ… 大丈夫⁉
<|3|>なんだこいつ 空気読めて ないのか…?
Assistant:
<|1|>好尴尬…我不想引人注目…我想消失…
<|2|>你…没事吧⁉
<|3|>这家伙怎么看不懂气氛的…?
User:
<|1|>つまり
<|2|>でもまぁもしかしたらなんかのバグで最大値はMP:9999表記になっているだけで
<|3|>【宝玉】とともにいるあいだは二倍あるのが普通なのかもね
<|4|>げーむより つよい
<|5|>上限超えの魔力値しかもゲーム内にはなかった【魔力操作】ができるわけでもはや私のポテンシャルは最高潮なのでは?
<|6|>さすが最強四歳児まだまだ伸び代
<|7|>くすくす
[GPT35TurboTranslator] -- GPT Response --
<|1|>也就是说
<|2|>不过也有可能是因为某种bug,最大值才显示为MP:9999
<|3>|【宝玉】在身边的时候,通常是两倍吧
<|4|>比游戏还强
<|5>|魔力值超过上限,而且还能使用游戏里没有的【魔力操作】,我的潜力是不是已经达到顶峰了?
<|6>|不愧是最强的四岁小孩,还有很大的成长空间
<|7>|呵呵
[GPT35TurboTranslator] []
[GPT35TurboTranslator] Used 585 tokens (Total: 1784)
[GPT35TurboTranslator] 0: つまり =>
[GPT35TurboTranslator] 1: でもまぁもしかしたらなんかのバグで最大値はMP:9999表記になっているだけで =>
[GPT35TurboTranslator] 2: 【宝玉】とともにいるあいだは二倍あるのが普通なのかもね =>
[GPT35TurboTranslator] 3: げーむより つよい =>
[GPT35TurboTranslator] 4: 上限超えの魔力値しかもゲーム内にはなかった【魔力操作】ができるわけでもはや私のポテンシャルは最高潮なのでは? =>
[GPT35TurboTranslator] 5: さすが最強四歳児まだまだ伸び代 =>
[GPT35TurboTranslator] 6: くすくす =>
[batch] Running mask refinement
[mask]: 100%|█████████████████████████████████████████████████████████████████████████| 21/21 [00:00<00:00, 174.80it/s]
[LamaLargeInpainter] Inpainting resolution: 840x1200
[batch] Running rendering
[render] font_size_minimum 10
[render]: 0it [00:00, ?it/s]
[batch] Saving "D:\Users\Desktop\manga-image-translator\test\10.rawkuma.com-translated.png"
847361092 commented 1 month ago

我也遇到了,就很奇怪,有道和谷歌都正常,gpt就出问题了

PiDanShouRouZhouXD commented 1 month ago

https://github.com/zyddnys/manga-image-translator/blob/b5f91d98bce1afe240c83913f429f7302ad44a36/manga_translator/translators/sakura.py#L371 请参考sakura翻译器的这个函数。GPT类模型可能会不完全按照Prompt指定的格式回复,因此要解决这个问题需要增加错误检查以及重新翻译机制。 如果有人愿意修改的话,要求返回json格式而不是当前这样的格式会更加稳定。