Spaces:
Sleeping
Sleeping
import cv2 | |
import io | |
import gradio as gr | |
from app import ocr | |
from app.constants import FONT_PATH | |
from numpy.typing import NDArray | |
from deep_translator import GoogleTranslator | |
from wand.color import Color | |
from wand.drawing import Drawing | |
from wand.image import Image | |
from wand.font import Font | |
from PIL import Image as PILImage | |
def handle_image(image: NDArray): | |
result = ocr(image) | |
ret, encoded_image = cv2.imencode(".png", image) | |
if not ret: | |
raise Exception("Unknown error.") | |
with Image(blob=encoded_image) as img: | |
texts: list[str] = [] | |
rects: list[tuple[int, int, int, int]] = [] | |
with Drawing() as draw: | |
draw.fill_color = Color("white") | |
for shape, text in result: | |
x, y, xmax, ymax = map(int, shape.bounds) | |
w = xmax - x | |
h = ymax - y | |
draw.rectangle(x, y, xmax, ymax) | |
rects.append((x, y, w, h)) | |
texts.append(text) | |
draw.draw(img) | |
font = Font(FONT_PATH) | |
translator = GoogleTranslator(source="auto", target="vi") | |
texts = translator.translate_batch(texts) | |
for (x, y, w, h), text in zip(rects, texts): | |
img.caption(text, x, y, w, h, font=font, gravity="center") | |
return PILImage.open(io.BytesIO(img.make_blob("png"))) | |
with gr.Blocks() as demo: | |
with gr.Column(): | |
image = gr.Image() | |
output = gr.Image() | |
image.upload(handle_image, inputs=image, outputs=output) | |
if __name__ == "__main__": | |
demo.launch(server_name='0.0.0.0') | |