|
from add_text import add_text |
|
from detect_bubbles import detect_bubbles |
|
from process_bubble import process_bubble |
|
from translator import MangaTranslator |
|
from ultralytics import YOLO |
|
from manga_ocr import MangaOcr |
|
from PIL import Image |
|
import gradio as gr |
|
import numpy as np |
|
import cv2 |
|
|
|
|
|
MODEL = "model.pt" |
|
EXAMPLE_LIST = [["examples/0.png"], |
|
["examples/ex0.png"]] |
|
TITLE = "Manga Translator" |
|
DESCRIPTION = "Translate text in manga bubbles!" |
|
|
|
|
|
def predict(img, translation_method, font): |
|
if translation_method == None: |
|
translation_method = "google" |
|
if font == None: |
|
font = "fonts/animeace_i.ttf" |
|
|
|
results = detect_bubbles(MODEL, img) |
|
|
|
manga_translator = MangaTranslator() |
|
mocr = MangaOcr() |
|
|
|
image = np.array(img) |
|
|
|
for result in results: |
|
x1, y1, x2, y2, score, class_id = result |
|
|
|
detected_image = image[int(y1):int(y2), int(x1):int(x2)] |
|
|
|
im = Image.fromarray(np.uint8((detected_image)*255)) |
|
text = mocr(im) |
|
|
|
detected_image, cont = process_bubble(detected_image) |
|
|
|
text_translated = manga_translator.translate(text, |
|
method=translation_method) |
|
|
|
image_with_text = add_text(detected_image, text_translated, font, cont) |
|
|
|
return image |
|
|
|
demo = gr.Interface(fn=predict, |
|
inputs=["image", |
|
gr.Dropdown([("Google", "google"), |
|
("Helsinki-NLP's opus-mt-ja-en model", |
|
"hf"), |
|
("Baidu", "baidu"), |
|
("Bing", "bing")], |
|
label="Translation Method", |
|
value="google"), |
|
gr.Dropdown([("animeace_i", "fonts/animeace_i.ttf"), |
|
("mangati", "fonts/mangati.ttf"), |
|
("ariali", "fonts/ariali.ttf")], |
|
label="Text Font", |
|
value="fonts/animeace_i.ttf") |
|
], |
|
outputs=[gr.Image()], |
|
examples=EXAMPLE_LIST, |
|
title=TITLE, |
|
description=DESCRIPTION) |
|
|
|
|
|
demo.launch(debug=False, |
|
share=False) |
|
|