File size: 3,573 Bytes
1569310
 
 
3c57165
1569310
 
3878fb6
1569310
2d7b88a
c82795d
697613a
1569310
 
 
93fe459
9e79a73
1569310
 
9e79a73
e55ec6f
6d9f1bd
 
e55ec6f
a33c6a8
1569310
 
 
e55ec6f
1569310
 
fbc90f8
1569310
 
 
 
 
 
 
 
54b93d3
1569310
 
 
66e7217
e55ec6f
1569310
66e7217
8c1efc2
fbf7563
8c1efc2
54fa052
8c1efc2
 
 
1569310
 
 
 
 
 
 
 
 
 
 
 
a6fc706
e55ec6f
1569310
 
 
 
 
 
 
 
98c7b0e
1569310
 
 
 
c0ff73d
 
23df7db
c8cfd54
 
 
 
 
 
 
 
 
f0ccfe1
 
 
663b172
f0ccfe1
304f47e
c8cfd54
 
13ef7e9
c8cfd54
 
 
 
ecdecda
1569310
 
 
 
 
411ef09
 
c10e31c
1569310
 
 
 
 
 
 
8439022
c10e31c
65c7e25
c10e31c
 
 
1569310
e44ba7c
 
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
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 save_data import flag
import spaces
import pytesseract
from PIL import Image
import torch
 
"""
Paddle OCR
"""
@spaces.GPU
def ocr_with_paddle(img):
    finaltext = ''
    ocr = PaddleOCR(use_gpu=True,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
"""
print("\n\n Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))
@spaces.GPU
def ocr_with_keras(img):
    print("\n\n inside Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))
    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]

@spaces.GPU
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
        
"""
Generate OCR
"""
def generate_ocr(Method,img):
    
    text_output = ''
    if img.any() or (img).any():
        add_csv = []
        image_id = 1
        print("Method___________________",Method)
        if Method == 'EasyOCR':
            text_output = ocr_with_easy(img)
        if Method == 'KerasOCR':
            text_output = ocr_with_keras(img)
        if Method == 'PaddleOCR':
            text_output = ocr_with_paddle(img)
       
        try:
            flag(Method,text_output,img)
        except Exception as e:
            print(e)
        return text_output
    else:
        raise gr.Error("Please upload an image!!!!")
    
    # except Exception as e:
    #     print("Error in ocr generation ==>",e)
    #     text_output = "Something went wrong"
    # return text_output
    

"""
Create user interface for OCR demo
"""

# image = gr.Image(shape=(300, 300))
image = gr.Image()
method = gr.Radio(["PaddleOCR","EasyOCR", "KerasOCR"],value="PaddleOCR")
output = gr.Textbox(label="Output")

demo = gr.Interface(
    generate_ocr,
    [method,image],
    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:letstalk@pragnakalp.com" target="_blank">letstalk@pragnakalp.com</a> 
                    <p style='text-align: center;'>Developed by: <a href="https://www.pragnakalp.com" target="_blank">Pragnakalp Techlabs</a></p>"""
    

)
# demo.launch(enable_queue = False)
demo.launch()