import os
import gradio as gr
import requests
import json
import io
from gradio.components import Image
from PIL import Image as PILImage, ImageDraw, ImageFont # This import may be needed if you're processing images
from PIL import Image
def process_image(image1, image2):
try:
img_bytes1 = io.BytesIO()
image1.save(img_bytes1, format="JPEG")
img_bytes1.seek(0)
except:
return ["Failed to open image", {"resultCode": "Error", "result": "Failed to open image"}]
try:
img_bytes2 = io.BytesIO()
image2.save(img_bytes2, format="JPEG")
img_bytes2.seek(0)
except:
pass
url = "http://127.0.0.1:9000/process_image"
files = {'image1': img_bytes1, 'image2': img_bytes2}
result = requests.post(url=url, files=files)
if result.ok:
json_result = result.json()
if json_result.get("resultCode") == "Error":
return ["Failed to process image", {"resultCode": "Error", "result": "Failed to process image"}]
html = None
images = None
mrz = None
barcode = None
r = json_result.get("result", {})
table_value = ""
if r.get('MRZ') is not None:
mrz = r.get('MRZ')
if r.get('Barcode') is not None:
barcode = r.get('Barcode')
for key, value in r.items():
if key == 'Images' or key == 'MRZ' 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 = ("
"
"| {key} | "
"{value} | "
"{mrz_value} | "
"{barcode_value} | "
"
".format(key=key, value=value, mrz_value=mrz_value, barcode_value=barcode_value))
elif mrz is not None:
row_value = (""
"| {key} | "
"{value} | "
"{mrz_value} | "
"
".format(key=key, value=value, mrz_value=mrz_value))
elif barcode is not None:
row_value = (""
"| {key} | "
"{value} | "
"{barcode_value} | "
"
".format(key=key, value=value, barcode_value=barcode_value))
else:
row_value = (""
"| {key} | "
"{value} | "
"
".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(',', '')
row_value = ("
"
"| {key} | "
"{value} | "
"{mrz_value} | "
" | "
"
".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(',', '')
row_value = ("
"
"| {key} | "
"{value} | "
" | "
"{barcode_value} | "
"
".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(',', '')
row_value = ("
"
"| {key} | "
"{value} | "
"{mrz_value} | "
"
".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(',', '')
row_value = ("
"
"| {key} | "
"{value} | "
"{barcode_value} | "
"
".format(key=key, value='', barcode_value=value))
table_value = table_value + row_value
if mrz is not None and barcode is not None:
html = (""
""
"| Field | "
"OCR | "
"MRZ | "
"Barcode | "
"
"
"{table_value}"
"
".format(table_value=table_value))
elif mrz is not None:
html = (""
""
"| Field | "
"OCR | "
"MRZ | "
"
"
"{table_value}"
"
".format(table_value=table_value))
elif barcode is not None:
html = (""
""
"| Field | "
"OCR | "
"Barcode | "
"
"
"{table_value}"
"
".format(table_value=table_value))
else:
html = (""
""
"| Field | "
"OCR | "
"
"
"{table_value}"
"
".format(table_value=table_value))
table_value = ""
for key, value in r.items():
if key == 'Images':
for image_key, image_value in value.items():
row_value = (""
"| {key} | "
"![]() | "
"
".format(key=image_key, base64_image=image_value))
table_value = table_value + row_value
images = (""
""
"| Field | "
"Image | "
"
"
"{table_value}"
"
".format(table_value=table_value))
return [html + "
" + images, json_result]
else:
return [result.text, {"resultCode": "Error", "result": result.text}]
with gr.Blocks() as demo:
gr.Markdown(
"""
ID Document Recognition
We offer on-premises OCR and liveness check solutions available with a perpetual license.
## 🤝 Talk to us
"""
)
with gr.Row():
with gr.Column():
image_input1 = gr.Image(type='pil', label='Front')
image_input2 = gr.Image(type='pil', label='Back')
gr.Examples(['examples/1.jpg', 'examples/2.jpg', 'examples/3.jpg'],
inputs=image_input1)
process_button = gr.Button("Process")
with gr.Column():
with gr.TabItem("Output"):
html_output = gr.HTML()
with gr.TabItem("JSON"):
json_output = gr.JSON()
process_button.click(process_image, inputs=[image_input1, image_input2], outputs=[html_output, json_output])
gr.HTML('
')
demo.launch(server_name="0.0.0.0", server_port=7860)