ocr_example / app.py
rkaushik95's picture
Adds files
ff33835
import cv2
import numpy as np
import gradio as gr
import pytesseract
def text_read_tesseract(img):
'''
To read wriiten texts on images
Required:
pip install pytesseract
sudo apt install tesseract-ocr
sudo apt install libtesseract-dev
API: https://pypi.org/project/pytesseract/
'''
pytesseract.pytesseract.tesseract_cmd='/usr/bin/tesseract'
imgWords = img.copy()
imgDigits = img.copy()
imgRGB = cv2.cvtColor(src=img, code=cv2.COLOR_BGR2RGB)
# Character detection
texts = pytesseract.image_to_string(imgRGB)
boxes = pytesseract.image_to_boxes(imgRGB)
# print(boxes)
himg, wimg, _ = img.shape
for b in boxes.splitlines():
b = b.split(' ')
if b[0] != '~':
x1, y1, x2, y2 = int(b[1]), int(b[2]), int(b[3]), int(b[4])
cv2.rectangle(img, pt1=(x1, himg-y1), pt2=(x2, himg-y2), color=(0,0,255), thickness=1)
# cv2.imshow("Image char", img)
# cv2.waitKey(0)
# cv2.destroyAllWindows()
return texts, img
import easyocr
def text_read_easyocr(img, text_threshold):
# [[189, 75], [469, 75], [469, 165], [189, 165]]
easyocr_reader = easyocr.Reader(lang_list=['en'], gpu=False)
result = easyocr_reader.readtext(img, text_threshold=text_threshold)
himg, wimg, _ = img.shape
text = ""
for box, word, confidence in result:
text += word + "\n"
# x2, y2, x1, y1 = box[0][0], box[0][1], box[2][0], box[2][1]
# cv2.rectangle(img, pt1=(x1, himg-y1), pt2=(x2, himg-y2), color=(0,0,255), thickness=1)
tl, tr, br, bl = box
tl = (int(tl[0]), int(tl[1]))
tr = (int(tr[0]), int(tr[1]))
br = (int(br[0]), int(br[1]))
bl = (int(bl[0]), int(bl[1]))
cv2.rectangle(img, tl, br, (0, 255, 0), 2)
# print(text)
# cv2.imshow("Image char", img)
# cv2.waitKey(0)
return text, img
def read_text(img, choice,text_threshold):
if choice == 0:
return text_read_tesseract(img)
if choice == 1:
return text_read_easyocr(img, text_threshold)
# img = cv2.imread("../images/license.jpeg")
# text_read_tesseract(img)
# text_read_easyocr(img)
# demo = gr.Interface(fn=text_read_tesseract, inputs="image", outputs=[gr.Textbox(lines=2, placeholder="Detected txts here..."), "image"])
# demo = gr.Interface(fn=text_read_easyocr, inputs="image", outputs=[gr.Textbox(lines=2, placeholder="Detected txts here..."), "image"])
demo = gr.Interface(fn=read_text,
title="Optical character recognition",
description="Author: Rituraj Kaushik",
examples=[["images/bill.png", "Easy OCR", 0.6],
["images/passport.jpg", "Easy OCR", 0.6]],
inputs=[gr.Image(label="Input image"),
gr.Radio(choices=["Tesseract", "Easy OCR"],
value= "Easy OCR",
type="index"),
gr.Slider(minimum=0, maximum=1, label="Text confidence threshold", value=0.6, step=0.01)
],
outputs=[gr.Textbox(lines=2, placeholder="Detected txts here..."), "image"],
allow_flagging="never")
demo.launch()