|
import base64 |
|
import io |
|
import os |
|
|
|
import gradio as gr |
|
import requests |
|
from PIL import Image |
|
|
|
API_URL = "https://t7nd0cf3u89ck4bf.aistudio-hub.baidu.com/ocr" |
|
TOKEN = os.getenv("API_TOKEN", "") |
|
|
|
|
|
def inference(img): |
|
with io.BytesIO() as buffer: |
|
img.save(buffer, format="png") |
|
img_base64 = base64.b64encode(buffer.getvalue()).decode("ascii") |
|
|
|
headers = { |
|
"Authorization": f"token {TOKEN}", |
|
"Content-Type": "application/json", |
|
} |
|
|
|
response = requests.post( |
|
API_URL, |
|
json={ |
|
"file": img_base64, |
|
"fileType": 1, |
|
"useDocOrientationClassify": False, |
|
"useDocUnwarping": False, |
|
"useTextlineOrientation": False, |
|
}, |
|
headers=headers, |
|
timeout=1000, |
|
) |
|
response.raise_for_status() |
|
|
|
result = response.json() |
|
ocr_img_url = result["result"]["ocrResults"][0]["ocrImage"] |
|
|
|
response = requests.get(ocr_img_url, timeout=10) |
|
response.raise_for_status() |
|
ocr_img_base64 = Image.open(io.BytesIO(response.content)) |
|
|
|
return ocr_img_base64, result["result"]["ocrResults"][0]["prunedResult"] |
|
|
|
|
|
title = "PP-OCRv5 Online Demo" |
|
description = """ |
|
- PP-OCRv5 is the latest generation of the PP-OCR series model, designed to handle a wide range of scene and text types. |
|
- It supports five major text types: Simplified Chinese, Traditional Chinese, Pinyin annotation, English, and Japanese. |
|
- PP-OCRv5 has enhanced recognition capabilities for challenging use cases, including complex handwritten Chinese and English, vertical text, and rare characters. |
|
- To use it, simply upload your image, or click one of the examples to load them. Read more at the links below. |
|
- [Docs](https://paddlepaddle.github.io/PaddleOCR/), [Github Repository](https://github.com/PaddlePaddle/PaddleOCR). |
|
""" |
|
|
|
examples = [ |
|
["examples/ancient_demo.png"], |
|
["examples/handwrite_ch_demo.png"], |
|
["examples/handwrite_en_demo.png"], |
|
["examples/japan_demo.png"], |
|
["examples/magazine.png"], |
|
["examples/pinyin_demo.png"], |
|
["examples/research.png"], |
|
["examples/tech.png"], |
|
] |
|
|
|
css = """ |
|
.output_image, .input_image {height: 40rem !important; width: 100% !important;} |
|
h1 {text-align: center !important;} |
|
""" |
|
|
|
gr.Interface( |
|
inference, |
|
gr.Image(type="pil", label="Input Image"), |
|
[gr.Image(type="pil", label="Output Image"), gr.JSON(label="Output JSON", show_label=True)], |
|
title=title, |
|
description=description, |
|
examples=examples, |
|
cache_examples=False, |
|
css=css, |
|
).launch(debug=False) |
|
|