用 AI 翻译漫画,把中文放回气泡没那么简单
我试着把漫画里的日文识别出来,再翻成中文,放回原来的文字区域。读的时候不用去另一处找译文。不过,字换成了中文,读起来还不一定顺。
漫画里的字也是图片的一部分,不能像网页文字那样直接复制。得先找到它,再把图里的字认出来,才能交给翻译。这一步叫 OCR。
先圈出一块,再读里面的字
日文漫画常有竖排、手写字,周围还混着人物和线条。当前的日文识别路径用两个工具配合:comic-text-detector (opens in a new tab) 找文字区域,程序把这一块裁出来,再交给 manga-ocr-2025 的 ONNX 模型 (opens in a new tab) 读字。找位置和认字是接着做的两步。
裁出来的图决定了识别器能看到什么。只圈到半句话,它收到的就只有半句话;混进旁边的人物线条,也可能多认出奇怪的字。所以译文不对时,先看识别器收到的那块图,比直接换翻译提示词更有用。
把中文放回原来的位置
认完字,还要保留这块区域的位置和大小。这里找到的是文字的矩形框,不是气泡的完整轮廓。这里记录的是它占原图的比例:一个框从页面宽度的四分之一处开始,图片缩小以后,还是从四分之一处开始,译文就能跟着气泡走。
每段台词另外编上号,交给 DeepSeek 翻成中文。返回的译文带着对应编号,程序按编号找回原来的框,不靠返回顺序猜位置。
编号用来对应同一个气泡。图是原理示意,不是 OCR 实测结果。
识别在本机完成,翻译请求只发送认出来的文字,不上传整页图片,需要联网和自己的 API Key。这也让翻译少了一部分上下文:模型看不到人物的表情和动作,省略了主语的对白,光看台词未必知道在说谁。
中文意思奇怪时,可以先把 OCR 结果和日文原图对一遍。原文认错了,问题在翻译之前;原文没问题,再查译文。
「孩子」被拆到了两列
下面是当时在 Mac 上测试的同一页局部,不代表所有页面的效果。红色细框标出文字区域,点图可以放大。
右侧已经换成中文,但「孩子」被拆到了两列,字偏粗,省略号也散成几颗点。看得懂,还是别扭。
当前的排字会先按框的大小试一个字号,估算需要几列;列宽加起来放不下,就缩小字号再试。竖排的列从右往左走,文字块在框内横向居中,部分标点旋转后再画。
这里算的是字能不能放下,没有按词语决定在哪儿换列。“孩子”两个字都没越界,却被拆开读,就是这套办法还处理不好的地方。
盖住原文也有类似的问题。现在从图片里取一种近似的底色,盖上去,再画中文。白色气泡比较容易;遇到纹理或人物线条,一块底色补不回被盖掉的画面。
评论