File size: 3,364 Bytes
abd7b7e
 
 
 
 
 
 
 
a712711
 
 
61eb35d
 
 
 
abd7b7e
9045369
 
352aacf
abd7b7e
9045369
352aacf
c8f1002
 
abd7b7e
9045369
760f875
352aacf
abd7b7e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0c0568f
abd7b7e
0c0568f
abd7b7e
0c0568f
352aacf
abd7b7e
 
9045369
0c0568f
abd7b7e
9045369
abd7b7e
 
 
9f22e7d
 
b90432c
f3783b1
 
2130612
 
9045369
9a445a2
 
 
 
 
35794e6
9a445a2
 
 
 
 
9045369
f2bbbf2
 
56892c1
9045369
db39723
 
 
 
abd7b7e
9045369
c185b5a
 
b753d9c
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
import gradio as gr

import cv2
from mtcnn.mtcnn import MTCNN
import tensorflow as tf
import tensorflow_addons
import numpy as np

import os
import zipfile

local_zip = "FINAL-EFFICIENTNETV2-B0.zip"
zip_ref = zipfile.ZipFile(local_zip, 'r')
zip_ref.extractall('FINAL-EFFICIENTNETV2-B0')
zip_ref.close()

model = tf.keras.models.load_model("FINAL-EFFICIENTNETV2-B0")

detector = MTCNN()

def deepfakespredict(input_img ):

    labels = ['real', 'fake']
    pred = [0, 0]
    text =""
    text2 =""
    
    face = detector.detect_faces(input_img)

    if len(face) > 0:
        x, y, width, height = face[0]['box']
        x2, y2 = x + width, y + height

        cv2.rectangle(input_img, (x, y), (x2, y2), (0, 255, 0), 2)

        face_image = input_img[y:y2, x:x2]
        face_image2 = cv2.cvtColor(face_image, cv2.COLOR_BGR2RGB)
        face_image3 = cv2.resize(face_image2, (224, 224))
        face_image4 = face_image3/255

        pred = model.predict(np.expand_dims(face_image4, axis=0))[0]

        if pred[1] >= 0.6:
            text = "The image is FAKE."
        elif pred[0] >= 0.6:
            text = "The image is REAL."
        else:
            text = "The image may be REAL or FAKE."
            
    else:
        text = "Face is not detected in the image."
    
    text2 = "REAL: " + str(np.round(pred[0]*100, 2)) + "%, FAKE: " + str(np.round(pred[1]*100, 2)) + "%"

    return input_img, text, text2, {labels[i]: float(pred[i]) for i in range(2)}


title="EfficientNetV2 Deepfakes Image Detector"
description="This is a demo implementation of EfficientNetV2 Deepfakes Image Detector. \

            To use it, simply upload your image, or click one of the examples to load them.  \

            This demo and model represent the Final Year Project of a CS undergraduate Lee Sheng Yeh, the project is titled \"Achieving Face Swapped Deepfakes Detection Using EfficientNetV2\".  \

            The examples were extracted from Celeb-DF(V2)(Li et al, 2020) and FaceForensics++(Rossler et al., 2019). Full reference details is available in \"references.txt.\" \

            The examples are used under fair use to demo the working of the model only. If any copyright is infringed, please contact the researcher via this email: tp054565@mail.apu.edu.my, the researcher will immediately take down the examples used.\

            "
            
examples = [
                ['Fake-1.png'],
                ['Fake-2.png'],
                ['Fake-3.png'],
                ['Fake-4.png'],
                ['Fake-5.png'],
  
                ['Real-1.png'],
                ['Real-2.png'],
                ['Real-3.png'],
                ['Real-4.png'],
                ['Real-5.png']
                
           ]
            
gr.Interface(deepfakespredict,
                     inputs = ["image"],
                     outputs=[gr.outputs.Image(type="pil", label="Detected face"), 
                         "text", 
                         "text", 
                         gr.outputs.Label(num_top_classes=None, type="auto", label="Confidence")],                     
                     title=title,
                     description=description,
                     examples = examples, 
                     examples_per_page = 5
                     ).launch()