|
import os
|
|
import gradio as gr
|
|
import requests
|
|
import json
|
|
import io
|
|
import base64
|
|
import cv2
|
|
import numpy as np
|
|
from gradio.components import Image
|
|
|
|
screenReplayThreshold = 0.5
|
|
portraitReplaceThreshold = 0.5
|
|
printedCopyThreshold = 0.5
|
|
|
|
def proc_output(result):
|
|
if result.ok:
|
|
json_result = result.json()
|
|
if json_result.get("resultCode") == "Error":
|
|
return {"status": "error", "result": "failed to process image"}
|
|
|
|
process_results = json_result.get("result")
|
|
status = process_results.get("status")
|
|
if status == "Ok":
|
|
screenReply = process_results.get("screenReply")
|
|
portraitReplace = process_results.get("portraitReplace")
|
|
printedCopy = process_results.get("printedCopy")
|
|
detResult = "genuine"
|
|
|
|
|
|
if screenReply < screenReplayThreshold or portraitReplace < portraitReplaceThreshold or printedCopy < printedCopyThreshold:
|
|
detResult = "spoof"
|
|
|
|
|
|
return {"status": "ok", "data": {"result": detResult, "screenreplay_integrity_score": screenReply, "portraitreplace_integrity_score": portraitReplace, "printedcutout_integrity_score": printedCopy}}
|
|
|
|
return {"status": "error", "result": "document not found!"}
|
|
else:
|
|
return {"status": "error", "result": result.text}
|
|
|
|
def id_liveness(path):
|
|
|
|
img_bytes = io.BytesIO()
|
|
path.save(img_bytes, format="JPEG")
|
|
img_bytes.seek(0)
|
|
|
|
url = "http://127.0.0.1:9000/process_image"
|
|
files = {'image': img_bytes}
|
|
result = requests.post(url=url, files=files)
|
|
return proc_output(result)
|
|
|
|
with gr.Blocks() as demo:
|
|
gr.Markdown(
|
|
"""
|
|
# ID Document Liveness Detection
|
|
Contact us at https://faceonlive.com for issues and support.<br/><br/>
|
|
** For security and privacy, kindly refrain from uploading real ID card or credit card information on this platform.
|
|
"""
|
|
)
|
|
with gr.Row():
|
|
with gr.Column():
|
|
image_input = gr.Image(type='pil')
|
|
gr.Examples(['examples/1.jpg', 'examples/2.jpg', 'examples/3.jpg'],
|
|
inputs=image_input)
|
|
process_button = gr.Button("ID Liveness Detection")
|
|
|
|
with gr.Column():
|
|
json_output = gr.JSON()
|
|
|
|
process_button.click(id_liveness, inputs=image_input, outputs=[json_output])
|
|
|
|
demo.launch(server_name="0.0.0.0") |