Spaces:
Running
Running
import gradio as gr | |
import requests | |
import datadog_api_client | |
from PIL import Image | |
def idcard_recognition(frame1, frame2): | |
if frame1 is None: | |
return ["Front Image Empty", None] | |
url = "http://127.0.0.1:8080/idcard_recognition_multi_page" | |
if frame2 is None: | |
files = {'file1': open(frame1, 'rb')} | |
else: | |
files = {'file1': open(frame1, 'rb'), 'file2': open(frame2, 'rb')} | |
r = requests.post(url=url, files=files) | |
html = None | |
images = None | |
mrz = None | |
barcode = None | |
status = r.json().get('Status') | |
table_value = "" | |
if r.json().get('MRZ') is not None: | |
mrz = r.json().get('MRZ') | |
if r.json().get('Barcode') is not None: | |
barcode = r.json().get('Barcode') | |
for key, value in r.json().items(): | |
if key == 'Status' or key == 'Images' or key == 'MRZ' or key == 'Position' or key == 'Barcode': | |
continue | |
mrz_value = '' | |
if mrz is not None and mrz.get(key) is not None: | |
mrz_value = mrz[key] | |
del mrz[key] | |
barcode_value = '' | |
if barcode is not None and barcode.get(key) is not None: | |
barcode_value = barcode[key] | |
del barcode[key] | |
if mrz is not None and barcode is not None: | |
row_value = ("<tr>" | |
"<td>{key}</td>" | |
"<td>{value}</td>" | |
"<td>{mrz_value}</td>" | |
"<td>{barcode_value}</td>" | |
"</tr>".format(key=key, value=value, mrz_value=mrz_value, barcode_value=barcode_value)) | |
elif mrz is not None: | |
row_value = ("<tr>" | |
"<td>{key}</td>" | |
"<td>{value}</td>" | |
"<td>{mrz_value}</td>" | |
"</tr>".format(key=key, value=value, mrz_value=mrz_value)) | |
elif barcode is not None: | |
row_value = ("<tr>" | |
"<td>{key}</td>" | |
"<td>{value}</td>" | |
"<td>{barcode_value}</td>" | |
"</tr>".format(key=key, value=value, barcode_value=barcode_value)) | |
else: | |
row_value = ("<tr>" | |
"<td>{key}</td>" | |
"<td>{value}</td>" | |
"</tr>".format(key=key, value=value)) | |
table_value = table_value + row_value | |
if mrz is not None and barcode is not None: | |
for key, value in mrz.items(): | |
if key == 'MRZ': | |
value = value.replace('<', '<') | |
value = value.replace(',', '<p>') | |
row_value = ("<tr>" | |
"<td>{key}</td>" | |
"<td>{value}</td>" | |
"<td>{mrz_value}</td>" | |
"<td></td>" | |
"</tr>".format(key=key, value='', mrz_value=value)) | |
table_value = table_value + row_value | |
for key, value in barcode.items(): | |
if key == 'Barcode': | |
value = value.replace('<', '<') | |
value = value.replace(',', '<p>') | |
row_value = ("<tr>" | |
"<td>{key}</td>" | |
"<td>{value}</td>" | |
"<td></td>" | |
"<td>{barcode_value}</td>" | |
"</tr>".format(key=key, value='', barcode_value=value)) | |
table_value = table_value + row_value | |
elif mrz is not None: | |
for key, value in mrz.items(): | |
if key == 'MRZ': | |
value = value.replace('<', '<') | |
value = value.replace(',', '<p>') | |
row_value = ("<tr>" | |
"<td>{key}</td>" | |
"<td>{value}</td>" | |
"<td>{mrz_value}</td>" | |
"</tr>".format(key=key, value='', mrz_value=value)) | |
table_value = table_value + row_value | |
elif barcode is not None: | |
for key, value in barcode.items(): | |
if key == 'Barcode': | |
value = value.replace('<', '<') | |
value = value.replace(',', '<p>') | |
row_value = ("<tr>" | |
"<td>{key}</td>" | |
"<td>{value}</td>" | |
"<td>{barcode_value}</td>" | |
"</tr>".format(key=key, value='', barcode_value=value)) | |
table_value = table_value + row_value | |
if mrz is not None and barcode is not None: | |
html = ("<table>" | |
"<tr>" | |
"<th>Field</th>" | |
"<th>OCR</th>" | |
"<th>MRZ</th>" | |
"<th>Barcode</th>" | |
"</tr>" | |
"{table_value}" | |
"</table>".format(table_value=table_value)) | |
elif mrz is not None: | |
html = ("<table>" | |
"<tr>" | |
"<th style=""width:20%"">Field</th>" | |
"<th style=""width:40%"">OCR</th>" | |
"<th style=""width:40%"">MRZ</th>" | |
"</tr>" | |
"{table_value}" | |
"</table>".format(table_value=table_value)) | |
elif barcode is not None: | |
html = ("<table>" | |
"<tr>" | |
"<th style=""width:20%"">Field</th>" | |
"<th style=""width:40%"">OCR</th>" | |
"<th style=""width:40%"">Barcode</th>" | |
"</tr>" | |
"{table_value}" | |
"</table>".format(table_value=table_value)) | |
else: | |
html = ("<table>" | |
"<tr>" | |
"<th>Field</th>" | |
"<th>OCR</th>" | |
"</tr>" | |
"{table_value}" | |
"</table>".format(table_value=table_value)) | |
table_value = "" | |
for key, value in r.json().items(): | |
if key == 'Images': | |
for image_key, image_value in value.items(): | |
row_value = ("<tr>" | |
"<td>{key}</td>" | |
"<td><img src=""data:image/png;base64,{base64_image} width = '200' height= '100' /></td>" | |
"</tr>".format(key=image_key, base64_image=image_value)) | |
table_value = table_value + row_value | |
images = ("<table>" | |
"<tr>" | |
"<th>Field</th>" | |
"<th>Image</th>" | |
"</tr>" | |
"{table_value}" | |
"</table>".format(table_value=table_value)) | |
return [html, images] | |
with gr.Blocks() as demo: | |
with gr.Row(): | |
with gr.Column(scale=3): | |
id_image_input1 = gr.Image(type='filepath', label='Front') | |
id_image_input2 = gr.Image(type='filepath', label='Back') | |
gr.Examples(['idcard_examples/1.jpg', 'idcard_examples/2.jpg', 'idcard_examples/3.jpg'], | |
inputs=id_image_input1) | |
id_recognition_button = gr.Button("ID Card Recognition", variant="primary", size="lg") | |
with gr.Column(scale=5): | |
id_result_output = gr.HTML() | |
with gr.Column(scale=2): | |
image_result_output = gr.HTML() | |
id_recognition_button.click(idcard_recognition, inputs=[id_image_input1, id_image_input2], outputs=[id_result_output, image_result_output]) | |
demo.launch(server_name="0.0.0.0", server_port=7860) |