Python中如何实现美漫自动汉化器?
Python + OpenCV 写的简易工具。 https://zhuanlan.zhihu.com/p/56145616
Python中如何实现美漫自动汉化器?
9 回复
赞一个~ 不过感觉可以再加上自动学习做到自动切框,毕竟对话框的特征还是比较明显的。
要实现一个美漫自动汉化器,核心是结合OCR(文字识别)和NLP(自然语言处理)技术。这里给你一个基于pytesseract和googletrans的简化版实现思路和关键代码。
核心步骤:
- 图片预处理:提高OCR识别准确率。
- 文字检测与识别:定位漫画中的文字区域并提取英文文本。
- 文本翻译:将英文翻译成中文。
- 文字渲染与替换:将翻译后的中文文本重新嵌入到原图片的对应位置。
关键代码示例:
import cv2
import pytesseract
from googletrans import Translator
from PIL import Image, ImageDraw, ImageFont
import numpy as np
def preprocess_image(image_path):
"""预处理:转灰度、二值化、去噪"""
img = cv2.imread(image_path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
denoised = cv2.medianBlur(binary, 3)
return denoised
def extract_and_translate_text(image):
"""提取文本并翻译"""
# 使用Tesseract进行OCR
custom_config = r'--oem 3 --psm 6'
text_data = pytesseract.image_to_data(image, output_type=pytesseract.Output.DICT, config=custom_config)
translator = Translator()
translated_texts = []
for i, text in enumerate(text_data['text']):
if text.strip():
try:
# 翻译文本(注意免费API有频率限制)
translated = translator.translate(text, src='en', dest='zh-cn').text
translated_texts.append({
'text': translated,
'left': text_data['left'][i],
'top': text_data['top'][i],
'width': text_data['width'][i],
'height': text_data['height'][i]
})
except Exception as e:
translated_texts.append({
'text': text,
'left': text_data['left'][i],
'top': text_data['top'][i],
'width': text_data['width'][i],
'height': text_data['height'][i]
})
return translated_texts
def render_text_on_image(original_path, text_blocks):
"""将翻译后的文本渲染到图片上"""
img_pil = Image.open(original_path).convert("RGB")
draw = ImageDraw.Draw(img_pil)
# 加载中文字体(确保字体文件存在)
try:
font = ImageFont.truetype("simhei.ttf", size=20)
except:
font = ImageFont.load_default()
for block in text_blocks:
# 在原文字区域绘制白色背景
draw.rectangle(
[block['left'], block['top'],
block['left'] + block['width'],
block['top'] + block['height']],
fill=(255, 255, 255)
)
# 绘制中文文本
draw.text((block['left'], block['top']),
block['text'],
font=font,
fill=(0, 0, 0))
return img_pil
# 主流程
def comic_translator(image_path, output_path):
processed_img = preprocess_image(image_path)
text_blocks = extract_and_translate_text(processed_img)
result_image = render_text_on_image(image_path, text_blocks)
result_image.save(output_path)
print(f"处理完成,结果保存至:{output_path}")
# 使用示例
comic_translator("input_comic.jpg", "output_comic.jpg")
需要安装的库:
pip install opencv-python pillow pytesseract googletrans==4.0.0rc1
# 还需要安装Tesseract OCR引擎:https://github.com/tesseract-ocr/tesseract
几个关键点:
- 字体处理:中文字体需要单独加载,确保
simhei.ttf字体文件存在或替换为其他中文字体。 - 文字区域检测:这里直接使用Tesseract的文本位置信息。对于复杂版面,可能需要先用目标检测(如YOLO)定位文字框。
- 翻译API限制:
googletrans是免费库但有频率限制。生产环境建议使用付费API(如Google Cloud Translation)。 - 文本渲染优化:中文排版可能需要调整字体大小和位置,特别是对于竖排或艺术字。
一句话建议: 对于复杂漫画版面,建议结合深度学习模型(如Mask R-CNN)进行更精确的文字区域检测。
很棒!赞一个
nice
牛 x
做了分水岭切割,细线就是机切。并不能每次都识别对,还会有多切和错切同样要手动调整。
牛 X er~
很有用感觉
厉害… 求源码学习一波。

