OCR / app.py
elevow's picture
Update app.py
57d00a1 verified
Raw
History Blame Contribute Delete
2.92 kB
import pandas as pd
import PIL
from PIL import Image
from PIL import ImageDraw
import gradio as gr
import torch
import easyocr
# Download examples
urls = {
"english.png": "https://github.com/JaidedAI/EasyOCR/raw/master/examples/english.png",
"thai.jpg": "https://github.com/JaidedAI/EasyOCR/raw/master/examples/thai.jpg",
"french.jpg": "https://github.com/JaidedAI/EasyOCR/raw/master/examples/french.jpg",
"chinese.jpg": "https://github.com/JaidedAI/EasyOCR/raw/master/examples/chinese.jpg",
"japanese.jpg": "https://github.com/JaidedAI/EasyOCR/raw/master/examples/japanese.jpg",
"korean.png": "https://github.com/JaidedAI/EasyOCR/raw/master/examples/korean.png",
"Hindi.jpeg": "https://i.imgur.com/mwQFd7G.jpeg"
}
for filename, url in urls.items():
torch.hub.download_url_to_file(url, filename)
def draw_boxes(image, bounds, color='yellow', width=2):
draw = ImageDraw.Draw(image)
for bound in bounds:
p0, p1, p2, p3 = bound[0]
draw.line([*p0, *p1, *p2, *p3, *p0], fill=color, width=width)
return image
def inference(img_path, lang):
reader = easyocr.Reader(lang)
bounds = reader.readtext(img_path)
im = PIL.Image.open(img_path)
draw_boxes(im, bounds)
im.save("result.jpg")
df = pd.DataFrame(bounds)[[1, 2]]
df.columns = ["text", "confidence"]
return "result.jpg", df
choices = [
"abq","ady","af","ang","ar","as","ava","az","be","bg","bh","bho","bn","bs","ch_sim","ch_tra",
"che","cs","cy","da","dar","de","en","es","et","fa","fr","ga","gom","hi","hr","hu","id","inh","is",
"it","ja","kbd","kn","ko","ku","la","lbe","lez","lt","lv","mah","mai","mi","mn","mr","ms","mt","ne",
"new","nl","no","oc","pi","pl","pt","ro","ru","rs_cyrillic","rs_latin","sck","sk","sl","sq","sv","sw",
"ta","tab","te","th","tjk","tl","tr","ug","uk","ur","uz","vi"
]
examples = [
["english.png", ["en"]],
["thai.jpg", ["th"]],
["french.jpg", ["fr", "en"]],
["chinese.jpg", ["ch_sim", "en"]],
["japanese.jpg", ["ja", "en"]],
["korean.png", ["ko", "en"]],
["Hindi.jpeg", ["hi", "en"]]
]
with gr.Blocks(css=".output_image, .input_image {height: 40rem; width: 100%;}") as demo:
gr.Markdown("# **Aligned AI OCR**")
gr.Markdown("Upload an image and select languages to extract text.")
with gr.Row():
image_input = gr.Image(type="filepath", label="Input Image")
lang_input = gr.CheckboxGroup(choices=choices, value=["en"], label="Language")
run_btn = gr.Button("Run OCR")
with gr.Row():
output_img = gr.Image(label="Output")
output_df = gr.Dataframe(headers=["text", "confidence"], label="Detected Text")
gr.Examples(examples, [image_input, lang_input], [output_img, output_df], fn=inference)
run_btn.click(
inference,
inputs=[image_input, lang_input],
outputs=[output_img, output_df]
)
demo.launch()