Spaces:
Running
Running
File size: 2,926 Bytes
899c524 5910f04 b723189 0184aed b723189 0184aed 41b1b4e 5910f04 b723189 d3a5c74 b723189 0184aed b723189 0184aed b723189 ba05218 b723189 caa7434 b723189 899c524 b723189 2398e1d 899c524 0184aed ce805af 0184aed 2398e1d b723189 b5a31f2 0184aed ce805af b5a31f2 fc55db6 899c524 0184aed ce805af 899c524 b5a31f2 0184aed b5a31f2 94e7509 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
import json
import operator
import gradio as gr
import torchvision
from typing import Tuple, Dict
from facetorch import FaceAnalyzer
from facetorch.datastruct import ImageData
from omegaconf import OmegaConf
from torch.nn.functional import cosine_similarity
cfg = OmegaConf.load("config.merged.yml")
analyzer = FaceAnalyzer(cfg.analyzer)
def get_sim_dict_str(response: ImageData, pred_name: str = "verify", index: int = 0)-> str:
base_emb = response.faces[index].preds[pred_name].logits
sim_dict = {face.indx: cosine_similarity(base_emb, face.preds[pred_name].logits, dim=0).item() for face in response.faces}
sim_dict_sort = dict(sorted(sim_dict.items(), key=operator.itemgetter(1),reverse=True))
sim_dict_sort_str = str(sim_dict_sort)
return sim_dict_sort_str
def inference(path_image: str) -> Tuple:
response = analyzer.run(
path_image=path_image,
batch_size=cfg.batch_size,
fix_img_size=cfg.fix_img_size,
return_img_data=cfg.return_img_data,
include_tensors=cfg.include_tensors,
path_output=None,
)
pil_image = torchvision.transforms.functional.to_pil_image(response.img)
fer_dict_str = str({face.indx: face.preds["fer"].label for face in response.faces})
deepfake_dict_str = str({face.indx: face.preds["deepfake"].label for face in response.faces})
response_str = str(response)
sim_dict_str_embed = get_sim_dict_str(response, pred_name="embed", index=0)
sim_dict_str_verify = get_sim_dict_str(response, pred_name="verify", index=0)
out_tuple = (pil_image, fer_dict_str, deepfake_dict_str, sim_dict_str_embed, sim_dict_str_verify, response_str)
return out_tuple
title = "facetorch"
description = "Demo of facetorch, a Python library that can detect faces and analyze facial features using deep neural networks. The goal is to gather open-sourced face analysis models from the community and optimize them for performance using TorchScript. Try selecting one of the example images or upload your own."
article = "<p style='text-align: center'><a href='https://github.com/tomas-gajarsky/facetorch' target='_blank'>facetorch GitHub repository</a></p>"
demo=gr.Interface(
inference,
[gr.inputs.Image(label="Input", type="filepath")],
[gr.outputs.Image(type="pil", label="Output"),
gr.outputs.Textbox(label="Facial Expression Recognition"),
gr.outputs.Textbox(label="DeepFake Detection"),
gr.outputs.Textbox(label="Cosine similarity on Face Representation Embeddings"),
gr.outputs.Textbox(label="Cosine similarity on Face Verification Embeddings"),
gr.outputs.Textbox(label="Response")],
title=title,
description=description,
article=article,
examples=[["./test5.jpg"], ["./test.jpg"], ["./test4.jpg"], ["./test2.jpg"], ["./test8.jpg"], ["./test6.jpg"], ["./test3.jpg"]],
)
demo.launch(server_name="0.0.0.0", server_port=7860, debug=True)
|