File size: 2,934 Bytes
abd7b7e
 
 
 
 
 
 
 
a712711
 
 
bd20c9a
61eb35d
 
 
 
abd7b7e
cac49a7
 
 
 
 
35794e6
9045369
 
352aacf
 
abd7b7e
 
9045369
352aacf
c8f1002
 
 
352aacf
abd7b7e
9045369
352aacf
abd7b7e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
352aacf
abd7b7e
 
9045369
 
abd7b7e
9045369
abd7b7e
 
 
 
9045369
f2bbbf2
 
 
 
35794e6
 
f2bbbf2
 
 
 
35794e6
9045369
f2bbbf2
 
56892c1
9045369
 
abd7b7e
9045369
 
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()

local_zip = "deepfakes-test-images.zip"
zip_ref = zipfile.ZipFile(local_zip, 'r')
zip_ref.extractall('deepfakes-test-images')
zip_ref.close()


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


detector = MTCNN()


def deepfakespredict(input_img ):

    model = []
    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 might 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."
examples = [
                ['deepfakes-test-images/Fake-1.jpg'],
                ['deepfakes-test-images/Fake-2.jpg'],
                ['deepfakes-test-images/Fake-3.jpg'],
                ['deepfakes-test-images/Fake-4.jpg'],
                ['deepfakes-test-images/Fake-5.jpg'],
  
                ['deepfakes-test-images/Real-1.jpg'],
                ['deepfakes-test-images/Real-2.jpg'],
                ['deepfakes-test-images/Real-3.jpg'],
                ['deepfakes-test-images/Real-4.jpg'],
                ['deepfakes-test-images/Real-5.jpg']
                
           ]
            
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
                     ).launch()