Spaces:
Runtime error
Runtime error
File size: 4,875 Bytes
c6185a5 02c225a c6185a5 84e01c4 48f240d d0a52cd c6185a5 f0a93ea c6185a5 248f463 c6185a5 817b56c c6185a5 02c225a c6185a5 02c225a d797fc2 02c225a c6185a5 02c225a c6185a5 53db291 bc231a4 d56c43b 987a239 53db291 9844682 84e01c4 53db291 c6185a5 28a8269 c6185a5 48f240d bc231a4 29e113e 121f483 1b19899 53db291 9844682 53db291 9844682 48f240d 53db291 1b19899 53db291 1b19899 |
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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
import gradio as gr
import torch
import torch.nn.functional as F
from facenet_pytorch import MTCNN, InceptionResnetV1
import os
import numpy as np
from PIL import Image
import zipfile
import cv2
from pytorch_grad_cam import GradCAM
from pytorch_grad_cam.utils.model_targets import ClassifierOutputTarget
from pytorch_grad_cam.utils.image import show_cam_on_image
#ai-pict-detect
from transformers import pipeline
pipe = pipeline("image-classification", "nightfury/AI-picture-detector")
def image_classifier(image):
outputs = pipe(image)
results = {}
for result in outputs:
results[result['label']] = result['score']
return results
#ai-pict-detect
#gr.themes.Soft()
#gr.themes.builder()
with zipfile.ZipFile("examples.zip","r") as zip_ref:
zip_ref.extractall(".")
DEVICE = 'cuda' if torch.cuda.is_available() else 'cpu'
'''cuda:0'''
mtcnn = MTCNN(
select_largest=False,
post_process=False,
device=DEVICE
).to(DEVICE).eval()
model = InceptionResnetV1(
pretrained="vggface2",
classify=True,
num_classes=1,
device=DEVICE
)
checkpoint = torch.load("resnetinceptionv1_epoch_32.pth", map_location=torch.device('cpu'))
model.load_state_dict(checkpoint['model_state_dict'])
model.to(DEVICE)
model.eval()
EXAMPLES_FOLDER = 'examples'
examples_names = os.listdir(EXAMPLES_FOLDER)
examples = []
for example_name in examples_names:
example_path = os.path.join(EXAMPLES_FOLDER, example_name)
label = example_name.split('_')[0]
example = {
'path': example_path,
'label': label
}
examples.append(example)
np.random.shuffle(examples) # shuffle
def predict(input_image:Image.Image, true_label:str):
"""Predict the label of the input_image"""
face = mtcnn(input_image)
if face is None:
raise Exception('No face detected')
return "No Photoreal face detected"
face = face.unsqueeze(0) # add the batch dimension
face = F.interpolate(face, size=(256, 256), mode='bilinear', align_corners=False)
# convert the face into a numpy array to be able to plot it
prev_face = face.squeeze(0).permute(1, 2, 0).cpu().detach().int().numpy()
prev_face = prev_face.astype('uint8')
face = face.to(DEVICE)
face = face.to(torch.float32)
face = face / 255.0
face_image_to_plot = face.squeeze(0).permute(1, 2, 0).cpu().detach().int().numpy()
target_layers=[model.block8.branch1[-1]]
use_cuda = True if torch.cuda.is_available() else False
#print ("Cuda :: ", use_cuda)
cam = GradCAM(model=model, target_layers=target_layers)
#, use_cuda=use_cuda)
targets = [ClassifierOutputTarget(0)]
grayscale_cam = cam(input_tensor=face, targets=targets, eigen_smooth=True)
grayscale_cam = grayscale_cam[0, :]
visualization = show_cam_on_image(face_image_to_plot, grayscale_cam, use_rgb=True)
face_with_mask = cv2.addWeighted(prev_face, 1, visualization, 0.5, 0)
with torch.no_grad():
output = torch.sigmoid(model(face).squeeze(0))
prediction = "real" if output.item() < 0.5 else "fake"
real_prediction = 1 - output.item()
fake_prediction = output.item()
confidences = {
'real': real_prediction,
'fake': fake_prediction
}
return confidences, true_label, face_with_mask
title = "Deepfake Image Detection"
description = "~ AI - ML implementation for fake and real image detection..."
article = "<p style='text-align: center'>...</p>"
demo = gr.Interface(fn=image_classifier, inputs=gr.Image(type="pil"), outputs="label", title=title, description=description)
#demo.launch(show_api=False)
#interface
interface = gr.Interface(
fn=predict,
inputs=[
gr.inputs.Image(label="Input Image", type="pil"),
"text"
],
outputs=[
gr.outputs.Label(label="Prediction Model - % of Fake or Real image detection"),
"text",
gr.outputs.Image(label="Face with Explainability", type="pil")
#ValueError: Invalid value for parameter `type`: auto. Please choose from one of: ['numpy', 'pil', 'filepath']
],
theme = gr.themes.Soft(),
title = title,
description = description,
article = article
#examples=[[examples[i]["path"], examples[i]["label"]] for i in range(10)]
)
'''
io2 = gr.Interface(
fn=image_classifier,
inputs=[
gr.inputs.Image(label="Input Image", type="pil"),
"text"
],
outputs=[
gr.outputs.Label(label="Is it Artificial or Human"),
"text",
#ValueError: Invalid value for parameter `type`: auto. Please choose from one of: ['numpy', 'pil', 'filepath']
],
theme = gr.themes.Soft(),
title = "AI Art Detector",
description = description,
)
'''
gr.TabbedInterface(
[interface, demo], ["Deepfake Image Detection", "AI ART Detection"]
).launch() #share=True) |