|
import os |
|
import glob |
|
import gradio as gr |
|
from scripts.predict import parse_cheque_with_donut |
|
|
|
|
|
example_list = glob.glob("data/*") |
|
example_list = list(map(lambda el: [el], example_list)) |
|
|
|
demo = gr.Blocks() |
|
|
|
with demo: |
|
|
|
gr.Markdown("# **<p align='center'>ChequeEasy: Banking made easy </p>**") |
|
gr.Markdown( |
|
'ChequeEasy is a project that aims to simplify the process of approval of cheques and making it easier for both bank officials and customers. \ |
|
This project leverages Donut model proposed in the paper <a href="https://arxiv.org/abs/2111.15664/"> OCR-free Document Understanding Transformer </a> for the parsing of the required data from cheques.' |
|
'Donut is based on a very simple transformer encoder and decoder architecture. It\'s main USP is that it is an OCR-free approach to Visual Document Understanding (VDU) and can perform tasks like document classification, information extraction as well as VQA. \ |
|
OCR based techniques come with several limitations such as requiring use of additional downstream models, lack of understanding about document structure, requiring use of hand crafted rules for information extraction,etc. \ |
|
Donut helps you get rid of all of these OCR specific limitations. The model for the project has been trained using a subset of this <a href="https://www.kaggle.com/datasets/medali1992/cheque-images/"> kaggle dataset </a>. The original dataset contains images of cheques of 10 different banks.' |
|
) |
|
|
|
with gr.Tabs(): |
|
|
|
with gr.TabItem("Cheque Parser"): |
|
gr.Markdown( |
|
"This module is used to extract details filled by a bank customer from cheques. At present the model is trained to extract details like - Payee Name, Amount in words, Amount in Figures, Bank Name. \ |
|
This model can be further trained to parse additional details like MICR Code, Cheque Number, Account Number, etc." |
|
) |
|
with gr.Box(): |
|
gr.Markdown("**Upload Cheque**") |
|
input_image_parse = gr.Image(type="filepath", label="Input Cheque") |
|
with gr.Box(): |
|
gr.Markdown("**Parsed Cheque Data**") |
|
|
|
payee_name = gr.Textbox(label="Payee Name") |
|
amt_in_words = gr.Textbox(label="Legal Amount") |
|
amt_in_figures = gr.Textbox(label="Courtesy Amount") |
|
bank_name = gr.Textbox(label="Bank Name") |
|
|
|
with gr.Box(): |
|
gr.Markdown("**Predict**") |
|
with gr.Row(): |
|
parse_cheque = gr.Button("Call Donut π©") |
|
|
|
with gr.Column(): |
|
gr.Examples( |
|
example_list, |
|
[input_image_parse], |
|
[payee_name, amt_in_words, amt_in_figures, bank_name], |
|
parse_cheque_with_donut, |
|
cache_examples=False, |
|
) |
|
|
|
parse_cheque.click( |
|
parse_cheque_with_donut, |
|
inputs=input_image_parse, |
|
outputs=[payee_name, amt_in_words, amt_in_figures, bank_name], |
|
) |
|
|
|
gr.Markdown( |
|
'\n Solution built by: <a href="https://github.com/Nandhagopalan">Nandhagopalan Elangovan</a>' |
|
) |
|
|
|
demo.launch() |
|
|