app.py 1.7 KB
Newer Older
Z
zhoujun 已提交
1 2 3 4 5
import gradio as gr
import base64
from io import BytesIO
from PIL import Image

6 7
from paddlecv import PaddleCV
ocr = PaddleCV(task_name="PP-OCRv2")
Z
zhoujun 已提交
8 9 10 11 12 13 14 15 16 17 18 19 20


def image_to_base64(image):
    # 输入为PIL读取的图片,输出为base64格式
    byte_data = BytesIO()  # 创建一个字节流管道
    image.save(byte_data, format="JPEG")  # 将图片数据存入字节流管道
    byte_data = byte_data.getvalue()  # 从字节流管道中获取二进制
    base64_str = base64.b64encode(byte_data).decode("ascii")  # 二进制转base64
    return base64_str


# UGC: Define the inference fn() for your models
def model_inference(image):
21
    result = ocr(image)[0]
Z
zhoujun 已提交
22

23
    im_show = Image.open('output/tmp.jpg')
Z
zhoujun 已提交
24
    res = []
25 26 27 28 29 30
    for i in range(len(result['dt_polys'])):
        res.append(
            dict(
                boxes=result['dt_polys'][i],
                txt=result['rec_text'][i],
                score=result['rec_score'][i]))
Z
zhoujun 已提交
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
    json_out = {"base64": image_to_base64(im_show), "result": res}
    return im_show, json_out


def clear_all():
    return None, None, None


with gr.Blocks() as demo:
    gr.Markdown("PP-OCRv2")

    with gr.Column(scale=1, min_width=100):
        img_in = gr.Image(
            value="https://raw.githubusercontent.com/PaddlePaddle/PaddleOCR/dygraph/doc/imgs/11.jpg",
            label="Input")

        with gr.Row():
            btn1 = gr.Button("Clear")
            btn2 = gr.Button("Submit")
        img_out = gr.Image(label="Output").style(height=400)
        json_out = gr.JSON(label="jsonOutput")

    btn2.click(fn=model_inference, inputs=img_in, outputs=[img_out, json_out])
    btn1.click(fn=clear_all, inputs=None, outputs=[img_in, img_out, json_out])
    gr.Button.style(1)

demo.launch()