FAS-demo / app.py
sanjay7178's picture
Update app.py
92b2265
import aiohttp
import gradio as gr
import numba
import requests
import base64
from PIL import Image
import io
import json
from numba import jit
import matplotlib.pyplot as plt
import os
examples = ["examples/0002_01_00_01_55.jpg",
"examples/0-spoof.jpg",
"examples/0.jpg",
"examples/3.jpg",
"examples/6-mask.jpg",
"examples/AGL752VM_id147_s0_150.png",
"examples/FT720P_G780_REDMI4X_id0_s0_105.png",
"examples/7.jpg"]
async def spoof_trigger(b64):
url = os.getenv('url')
payload = {"img": b64}
headers = {
'x-functions-key': os.getenv('token'),
'Content-Type': 'text/plain'
}
async with aiohttp.ClientSession() as session:
async with session.post(url, json=payload, headers=headers) as response:
response_text = await response.text()
return response_text
# @jit
async def predict_image(img):
# Convert NumPy array to PIL Image
img = Image.fromarray(img.astype('uint8'))
# Create a BytesIO object
buffer = io.BytesIO()
# Save the PIL Image to the BytesIO object
img.save(buffer, format='JPEG')
# Get the base64 representation
img_base64 = base64.b64encode(buffer.getvalue()).decode()
print(len(img_base64))
res = await spoof_trigger(img_base64)
# print(json.loads(res))
spoof_res = json.loads(res)['spoof_res']
annotated_image = json.loads(res)['annotated_image']
conf_score = float( json.loads(spoof_res)['confidence_score'])
# img_base64 to plot
img = Image.open(io.BytesIO(base64.b64decode(annotated_image)))
confidences = {'Real': conf_score, 'Fake': 1-conf_score}
return (confidences,img)
with gr.Blocks(title="Spoof-Demo", css="#custom_header {min-height: 3rem; text-align: center} #custom_title {min-height: 3rem; text-align: center}") as demo :
gr.Markdown("# Face Antispoof-Demo", elem_id="custom_title")
gr.Markdown("## Gradio Demo for Face Antispoofing Detection using DeepPairNet based on ResNet50", elem_id="custom_header")
gr.Markdown("## πŸ‘¨β€πŸ’» Only for research preview Intended" ,elem_id="custom_header")
with gr.Row():
with gr.Column():
with gr.Box():
gr.Markdown("### Input")
image = gr.Image(source="webcam",label="Input Image",invert_color=False,image_mode="RGB")
image.style(height=240)
btn = gr.Button(text="Submit")
btn.style(full_width=True)
with gr.Column():
with gr.Box():
gr.Markdown("### Output")
output_image = gr.Image(label="Output Image")
output_image.style(height=240)
label_probs = gr.outputs.Label()
btn.click(predict_image, image , outputs=[label_probs,output_image ],api_name="Face Antispoofing")
gr.Examples(
examples=examples,
inputs=image,
outputs = output_image,
fn=predict_image,
cache_examples=False,
)
if __name__ == "__main__":
demo.launch(debug=True)