Genzo1010 commited on
Commit
0168e15
·
verified ·
1 Parent(s): dadc526

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +45 -108
app.py CHANGED
@@ -1,120 +1,57 @@
1
- import gradio as gr
2
- import tensorflow as tf
3
- import keras_ocr
4
- import requests
5
- import cv2
6
- import os
7
- import csv
8
  import numpy as np
9
- import pandas as pd
10
- import huggingface_hub
11
- from huggingface_hub import Repository
12
- from datetime import datetime
13
- import scipy.ndimage.interpolation as inter
14
- import easyocr
15
- import datasets
16
- from datasets import load_dataset, Image
17
  from PIL import Image
18
  from paddleocr import PaddleOCR
19
- from save_data import flag
20
-
21
- """
22
- Paddle OCR
23
- """
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  def ocr_with_paddle(img):
25
  finaltext = ''
26
- ocr = PaddleOCR(lang='en', use_angle_cls=True)
27
- # img_path = 'exp.jpeg'
28
- result = ocr.ocr(img)
29
-
30
  for i in range(len(result[0])):
31
  text = result[0][i][1][0]
32
- finaltext += ' '+ text
33
  return finaltext
34
 
35
- """
36
- Keras OCR
37
- """
38
- def ocr_with_keras(img):
39
- output_text = ''
40
- pipeline=keras_ocr.pipeline.Pipeline()
41
- images=[keras_ocr.tools.read(img)]
42
- predictions=pipeline.recognize(images)
43
- first=predictions[0]
44
- for text,box in first:
45
- output_text += ' '+ text
46
- return output_text
47
 
48
- """
49
- easy OCR
50
- """
51
- # gray scale image
52
- def get_grayscale(image):
53
- return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
54
-
55
- # Thresholding or Binarization
56
- def thresholding(src):
57
- return cv2.threshold(src,127,255, cv2.THRESH_TOZERO)[1]
58
- def ocr_with_easy(img):
59
- gray_scale_image=get_grayscale(img)
60
- thresholding(gray_scale_image)
61
- cv2.imwrite('image.png',gray_scale_image)
62
- reader = easyocr.Reader(['th','en'])
63
- bounds = reader.readtext('image.png',paragraph="False",detail = 0)
64
- bounds = ''.join(bounds)
65
- return bounds
66
-
67
- """
68
- Generate OCR
69
- """
70
- def generate_ocr(Method,img):
71
-
72
- text_output = ''
73
- if (img).any():
74
- add_csv = []
75
- image_id = 1
76
- print("Method___________________",Method)
77
- if Method == 'EasyOCR':
78
- text_output = ocr_with_easy(img)
79
- if Method == 'KerasOCR':
80
- text_output = ocr_with_keras(img)
81
- if Method == 'PaddleOCR':
82
- text_output = ocr_with_paddle(img)
83
-
84
- try:
85
- flag(Method,text_output,img)
86
- except Exception as e:
87
- print(e)
88
- return text_output
89
  else:
90
- raise gr.Error("Please upload an image!!!!")
91
-
92
- # except Exception as e:
93
- # print("Error in ocr generation ==>",e)
94
- # text_output = "Something went wrong"
95
- # return text_output
96
-
97
-
98
- """
99
- Create user interface for OCR demo
100
- """
101
 
102
- # image = gr.Image(shape=(300, 300))
103
- image = gr.Image()
104
- method = gr.Radio(["PaddleOCR","EasyOCR", "KerasOCR"],value="PaddleOCR")
105
- output = gr.Textbox(label="Output")
106
-
107
- demo = gr.Interface(
108
- generate_ocr,
109
- [method,image],
110
- output,
111
- title="Optical Character Recognition",
112
- css=".gradio-container {background-color: lightgray} #radio_div {background-color: #FFD8B4; font-size: 40px;}",
113
- article = """<p style='text-align: center;'>Feel free to give us your thoughts on this demo and please contact us at
114
- <a href="mailto:[email protected]" target="_blank">[email protected]</a>
115
- <p style='text-align: center;'>Developed by: <a href="https://www.pragnakalp.com" target="_blank">Pragnakalp Techlabs</a></p>"""
116
-
117
-
118
- )
119
- # demo.launch(enable_queue = False)
120
- demo.launch(show_error=True)
 
1
+ from fastapi import FastAPI, File, UploadFile
2
+ from fastapi.middleware.cors import CORSMiddleware
3
+ from fastapi.middleware.gzip import GZipMiddleware
 
 
 
 
4
  import numpy as np
 
 
 
 
 
 
 
 
5
  from PIL import Image
6
  from paddleocr import PaddleOCR
7
+ from doctr.io import DocumentFile
8
+ from doctr.models import ocr_predictor
9
+ import io
10
+
11
+ app = FastAPI()
12
+ app.add_middleware(
13
+ CORSMiddleware,
14
+ allow_origins=["*"],
15
+ allow_credentials=True,
16
+ allow_methods=["*"],
17
+ allow_headers=["*"]
18
+ )
19
+
20
+ # Initialize models once at startup
21
+ ocr_model = ocr_predictor(pretrained=True)
22
+ paddle_ocr = PaddleOCR(lang='en', use_angle_cls=True)
23
+
24
+ def ocr_with_doctr(file):
25
+ text_output = ''
26
+ doc = DocumentFile.from_pdf(file)
27
+ result = ocr_model(doc)
28
+ for page in result.pages:
29
+ for block in page.blocks:
30
+ for line in block.lines:
31
+ text_output += " ".join([word.value for word in line.words]) + "\n"
32
+ return text_output
33
+
34
  def ocr_with_paddle(img):
35
  finaltext = ''
36
+ result = paddle_ocr.ocr(img)
 
 
 
37
  for i in range(len(result[0])):
38
  text = result[0][i][1][0]
39
+ finaltext += ' ' + text
40
  return finaltext
41
 
42
+ def generate_text_from_image(img):
43
+ return ocr_with_paddle(img)
 
 
 
 
 
 
 
 
 
 
44
 
45
+ @app.post("/ocr/")
46
+ async def perform_ocr(file: UploadFile = File(...)):
47
+ file_bytes = await file.read()
48
+ if file.filename.endswith('.pdf'):
49
+ text_output = ocr_with_doctr(io.BytesIO(file_bytes))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
  else:
51
+ img = np.array(Image.open(io.BytesIO(file_bytes)))
52
+ text_output = generate_text_from_image(img)
53
+ return {"ocr_text": text_output}
 
 
 
 
 
 
 
 
54
 
55
+ @app.get("/test/")
56
+ async def test_call():
57
+ return {"message": "Hi. I'm running"}