OCR / deploy.py
ShahzainHaider's picture
Upload folder using huggingface_hub
8ce5e48
import gradio as gr
from app.NER.NER import name_entity_recognizer
from app.extract_country.country_dictionary import find_country
from app.extract_dates.date_engine import date_extractor
from app.extract_gender.gender_extractor import gender_extract
from app.extract_identity_number.doc_number_extractor import doc_number
import cv2
from app.functions import get_index, get_latest_value_from_csv, image_enhacement
import json
def ocr(card_type_input, image_input, webcam_input):
global dictionary
dictionary = {
"NAME": "",
"DOB": "",
"COUNTRY": "",
"GENDER": "",
"DOCUMENT NUMBER": "",
}
file_path = "app/images/idcards/input.jpg"
if image_input is not None and image_input.any():
print("In input image")
cv2.imwrite(file_path, image_input)
else:
print("In webcam")
cv2.imwrite(file_path, cv2.flip(webcam_input, 1))
image_enhacement(file_path)
# print("file_path", file_path)
dictionary, NER_check, result = name_entity_recognizer(file_path, dictionary)
extract_text = []
extract_text = [line[1][0] for res in result for line in res]
extract_text = " ".join(extract_text)
print("extract_text", extract_text)
if "" in list(dictionary.values()):
print("Missing value found in Dic")
if len(dictionary["GENDER"]) == 0:
print("Gender Missing")
gender_found, gender, ocr_list = gender_extract(extract_text)
dictionary["GENDER"] = gender if gender_found else None
if len(dictionary["DOB"]) == 0:
print("Dob Missing")
dob_found, dob, ocr_list = date_extractor(extract_text)
dictionary["DOB"] = dob if dob_found else None
if len(dictionary["COUNTRY"]) == 0:
print("Country Missing")
country_found, country, ocr_list = find_country(extract_text)
dictionary["country"] = country if country_found else None
if len(dictionary["DOCUMENT NUMBER"]) == 0:
print("document Number missing")
document_number_found, document_number, ocr_list = doc_number(extract_text)
dictionary["DOCUMENT NUMBER"] = (
document_number if document_number_found else None
)
# bool_check , training_data = get_latest_value_from_csv(extract_text)
# print(training_data)
print("Updated Dict ", dictionary)
response = {"Status": 200, "OCR": dictionary}
return response, extract_text
def save_traning_data(
name_input, dob_input, country_input, gender_input, doc_num_input,string_output
):
print(name_input, dob_input, country_input, gender_input, doc_num_input)
print("Saving data")
# print(string_output)
entities_list = []
if name_input:
entry = []
start_index, end_index = get_index(string_output, name_input)
entry.append(start_index)
entry.append(end_index)
entry.append("NAME")
entities_list.append(entry)
if dob_input:
entry = []
start_index, end_index = get_index(string_output, dob_input)
entry.append(start_index)
entry.append(end_index)
entry.append("DOB")
entities_list.append(entry)
if country_input:
entry = []
start_index, end_index = get_index(string_output, country_input)
entry.append(start_index)
entry.append(end_index)
entry.append("COUNTRY")
entities_list.append(entry)
if gender_input:
entry = []
start_index, end_index = get_index(string_output, gender_input)
entry.append(start_index)
entry.append(end_index)
entry.append("GENDER")
entities_list.append(entry)
if doc_num_input:
entry = []
start_index, end_index = get_index(string_output, doc_num_input)
entry.append(start_index)
entry.append(end_index)
entry.append("DOCUMENT NUMBER")
entities_list.append(entry)
print("entities_list" , entities_list)
with open("app/training_data/annotated_data.json") as f:
data = json.load(f)
new_list = [
string_output,
{
"entities": entities_list
}
]
annotations = data["annotations"]
annotations.append(new_list)
with open('app/training_data/annotated_data.json', 'w') as file:
json.dump(data, file)
# text = "PAKISTAN Nationalldentity Card ISLAMIC REPUBLIC OF PAKISTAN Name Muhammad Owais Siddiqui Father Name Zia Ud Din Siddiqui Country of Stay Gender M Pakistan Identity Number Date of Birth 42201-1177064-3 11.08.2001 Date of Expiry Date of Issue 24.09.2019 24.09.2029 Holder's Signature"
# save_traning_data(
# "Muhammad Owais Siddiqui", "Card", "REPUBLIC", "PAKISTAN", "Nationalldentity",text
# )
with gr.Blocks() as interface:
with gr.Row():
with gr.Column():
card_type_input = gr.inputs.Dropdown(
["passport", "id_card"], label="Card Type", default="id_card"
)
image_input = gr.inputs.Image(label="Upload Image")
webcam_input = gr.inputs.Image(label="Webcam", source="webcam")
with gr.Column():
# Define the output components
json_output = gr.outputs.JSON(label="JSON Output")
string_output = gr.outputs.Textbox(label="OCR Extracted Text")
ocr_btn = gr.Button("Process OCR")
name_input = gr.inputs.Textbox(label="NAME", optional=True, type="text")
dob_input = gr.inputs.Textbox(label="DOB", optional=True, type="text")
country_input = gr.inputs.Textbox(
label="COUNTRY", optional=True, type="text"
)
gender_input = gr.inputs.Textbox(label="GENDER", optional=True, type="text")
doc_num_input = gr.inputs.Textbox(
label="DOCUMENT NUMBER", optional=True, type="text"
)
save_btn = gr.Button("Save Data")
ocr_btn.click(
fn=ocr,
inputs=[card_type_input, image_input, webcam_input],
outputs=[json_output, string_output],
)
save_btn.click(
fn=save_traning_data,
inputs=[name_input, dob_input, country_input, gender_input, doc_num_input,string_output],
)
interface.launch(share=True, show_tips=True, debug=True)