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 = ("" "" "" "" "" "" "" "{table_value}" "
FieldOCRMRZBarcode
".format(table_value=table_value)) elif mrz is not None: html = ("" "" "" "" "" "" "{table_value}" "
FieldOCRMRZ
".format(table_value=table_value)) elif barcode is not None: html = ("" "" "" "" "" "" "{table_value}" "
FieldOCRBarcode
".format(table_value=table_value)) else: html = ("" "" "" "" "" "{table_value}" "
FieldOCR
".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 = ("" "" "" "" "" "{table_value}" "
FieldImage
".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( """

Opulentyn Logo

ID Document Recognition

We offer on-premises OCR and liveness check solutions available with a perpetual license.

## 🤝 Talk to us
Website      Email      Slack
""" ) 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)