| | 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("# **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() |
| |
|