| import pandas as pd |
| import PIL |
| from PIL import Image |
| from PIL import ImageDraw |
| import gradio as gr |
| import torch |
| import easyocr |
|
|
| |
| 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() |
|
|