File size: 3,476 Bytes
1569310 3c57165 1569310 3878fb6 1569310 2d7b88a c82795d 697613a 1569310 93fe459 9e79a73 1569310 9e79a73 1569310 f7b982e 1569310 f7b982e 1569310 f7b982e 1569310 f7b982e 98c7b0e 1569310 f7b982e c0ff73d f7b982e 13ef7e9 c8cfd54 ecdecda 1569310 411ef09 c10e31c 1569310 8439022 c10e31c 65c7e25 c10e31c 1569310 e44ba7c fadc162 |
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 |
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
"""
Paddle OCR
"""
def ocr_with_paddle(img):
finaltext = ''
ocr = PaddleOCR(lang='en') # Không hỗ trợ đa ngôn ngữ kiểu 'vi|en', phải chạy 2 lần
result_en = ocr.ocr(img)
ocr_vi = PaddleOCR(lang='vi')
result_vi = ocr_vi.ocr(img)
def extract_text(result):
return ' '.join([line[1][0] for line in result[0]])
en_text = extract_text(result_en)
vi_text = extract_text(result_vi)
finaltext = f"[EN]: {en_text}\n[VI]: {vi_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)
for text, box in predictions[0]:
output_text += ' ' + text
return "[Detected]: " + 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(['vi', 'en']) # Hỗ trợ tiếng Việt và tiếng Anh
bounds = reader.readtext('image.png', paragraph=False, detail=0)
result_text = '\n'.join(bounds)
return result_text
"""
Generate OCR
"""
def generate_ocr(Method, img):
if img is None or not (img).any():
raise gr.Error("Please upload an image!")
text_output = ''
print("Method selected:", Method)
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)
try:
flag(Method, text_output, img)
except Exception as e:
print("Flag error:", e)
return text_output
# 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(show_error=True)
|