import gradio as gr import tensorflow as tf import keras_ocr import requests import cv2 import os import csv import numpy as np import pandas as pd import huggingface_hub from huggingface_hub import Repository from datetime import datetime import scipy.ndimage.interpolation as inter import easyocr import datasets from datasets import load_dataset, Image from PIL import Image from paddleocr import PaddleOCR from doctr.io import DocumentFile from doctr.models import ocr_predictor ocr_model = ocr_predictor(pretrained=True) """ Perform OCR with doctr """ def ocr_with_doctr(file): text_output = '' # Load the document doc = DocumentFile.from_pdf(file) # Perform OCR result = ocr_model(doc) # Extract text from OCR result for page in result.pages: for block in page.blocks: for line in block.lines: text_output += " ".join([word.value for word in line.words]) + "\n" return text_output """ Paddle OCR """ def ocr_with_paddle(img): finaltext = '' ocr = PaddleOCR(lang='en', use_angle_cls=True) # img_path = 'exp.jpeg' result = ocr.ocr(img) for i in range(len(result[0])): text = result[0][i][1][0] finaltext += ' '+ text return finaltext """ Keras OCR """ def ocr_with_keras(img): output_text = '' pipeline=keras_ocr.pipeline.Pipeline() images=[keras_ocr.tools.read(img)] predictions=pipeline.recognize(images) first=predictions[0] for text,box in first: output_text += ' '+ text return output_text """ easy OCR """ # gray scale image def get_grayscale(image): return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # Thresholding or Binarization def thresholding(src): return cv2.threshold(src,127,255, cv2.THRESH_TOZERO)[1] def ocr_with_easy(img): gray_scale_image=get_grayscale(img) thresholding(gray_scale_image) cv2.imwrite('image.png',gray_scale_image) reader = easyocr.Reader(['th','en']) bounds = reader.readtext('image.png',paragraph="False",detail = 0) bounds = ''.join(bounds) return bounds def generate_ocr(Method, file): text_output = '' if isinstance(file, bytes): # Handle file uploaded as bytes file = io.BytesIO(file) if file.name.endswith('.pdf'): # Perform OCR on the PDF using doctr text_output = ocr_with_doctr(file) else: # Handle image file img_np = np.array(Image.open(file)) text_output = generate_text_from_image(Method, img_np) return text_output def generate_text_from_image(Method, img): text_output = '' if Method == 'EasyOCR': text_output = ocr_with_easy(img) elif Method == 'KerasOCR': text_output = ocr_with_keras(img) elif Method == 'PaddleOCR': text_output = ocr_with_paddle(img) return text_output import gradio as gr image_or_pdf = gr.File(label="Upload an image or PDF") method = gr.Radio(["PaddleOCR", "EasyOCR", "KerasOCR"], value="PaddleOCR") output = gr.Textbox(label="Output") demo = gr.Interface( generate_ocr, [method, image_or_pdf], output, title="Optical Character Recognition", css=".gradio-container {background-color: lightgray} #radio_div {background-color: #FFD8B4; font-size: 40px;}", article="""

Feel free to give us your thoughts on this demo and please contact us at letstalk@pragnakalp.com

Developed by: Pragnakalp Techlabs

""" ) demo.launch(show_error=True)