EasyOCR / app.py
ken4's picture
Update app.py
2c11630 verified
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("# **EasyOCR**")
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()