Spaces:
Sleeping
Sleeping
File size: 3,690 Bytes
1569310 3c57165 1569310 3878fb6 1569310 2d7b88a c82795d 697613a 1569310 93fe459 9e79a73 1569310 81f2edf 1569310 b613d69 c0ff73d b613d69 81f2edf c8cfd54 b613d69 ecdecda b613d69 1569310 b613d69 1569310 b613d69 1569310 b613d69 1569310 8439022 b613d69 1569310 b613d69 1ae8ebd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
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="""<p style='text-align: center;'>Feel free to give us your thoughts on this demo and please contact us at
<a href="mailto:[email protected]" target="_blank">[email protected]</a>
<p style='text-align: center;'>Developed by: <a href="https://www.pragnakalp.com" target="_blank">Pragnakalp Techlabs</a></p>"""
)
demo.launch(show_error=True)
|