File size: 2,739 Bytes
0320019
 
 
 
 
 
 
 
 
 
 
 
 
1569310
0168e15
853d071
429de26
dcc2b56
 
 
9412479
429de26
 
0320019
 
 
 
 
429de26
 
0320019
 
 
 
 
 
 
 
 
 
 
 
 
429de26
 
0320019
 
 
429de26
 
93a77dc
0320019
 
 
 
 
 
429de26
 
0320019
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0ef6c93
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
import gradio as gr
import tensorflow as tf
import requests
import os
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 datasets
from datasets import load_dataset, Image
from PIL import Image
from paddleocr import PaddleOCR
from doctr.io import DocumentFile


os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
os.environ["TF_FORCE_GPU_ALLOW_GROWTH"] = "true"

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, use_gpu=False)
    # 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

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 == '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"], 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(share=True)