File size: 3,941 Bytes
40f9579
 
 
 
 
 
 
 
 
 
 
23bec3d
61e7b4a
5c42f99
 
811ca3c
5c42f99
61e7b4a
41712a7
23bec3d
40f9579
 
 
 
23bec3d
a5015e9
40f9579
23bec3d
577935d
 
 
40f9579
 
23bec3d
40f9579
 
 
 
 
 
 
577935d
40f9579
 
 
 
23bec3d
40f9579
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23bec3d
40f9579
23bec3d
40f9579
 
 
23bec3d
40f9579
 
 
 
 
577935d
23bec3d
40f9579
 
 
 
577935d
23bec3d
 
40f9579
23bec3d
40f9579
41712a7
61e7b4a
40f9579
23bec3d
 
 
 
41712a7
 
 
 
 
 
40f9579
23bec3d
 
40f9579
23bec3d
 
41712a7
23bec3d
41712a7
23bec3d
40f9579
811ca3c
40f9579
23bec3d
41712a7
40f9579
23bec3d
41712a7
 
23bec3d
41712a7
 
61e7b4a
23bec3d
40f9579
 
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
import gradio as gr
import sqlite3
import re
import bcrypt
import numpy as np
import cv2
from PIL import Image
import tensorflow as tf
import os
import warnings

# Import pages (make sure each page has layout() function defined)

from pages import about
from pages import community

from pages import user_guide


# Suppress logs and warnings
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
warnings.filterwarnings("ignore")
np.seterr(all='ignore')

# Load TensorFlow deepfake model
deepfake_model = tf.keras.models.load_model("model_15_64.h5")

# Setup SQLite database
db_path = os.path.abspath("users.db")
print(f"βœ… Using database at: {db_path}")
conn = sqlite3.connect(db_path, check_same_thread=False)
cursor = conn.cursor()

# Create table if it doesn't exist
cursor.execute('''
CREATE TABLE IF NOT EXISTS user_details (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    NAME TEXT,
    PHONE TEXT,
    EMAIL TEXT UNIQUE,
    GENDER TEXT,
    PASSWORD BLOB
)
''')
conn.commit()

# Utilities
def is_valid_email(email):
    return re.match(r"[^@]+@[^@]+\.[^@]+", email)

def is_valid_phone(phone):
    return re.match(r"^[0-9]{10}$", phone)

def preprocess_image(image):
    image = np.array(image)
    image = cv2.resize(image, (128, 128))
    image = image.astype(np.float32) / 255.0
    return np.expand_dims(image, axis=0)

def predict_image(image):
    preprocessed = preprocess_image(image)
    prediction = deepfake_model.predict(preprocessed)[0][0]
    return "βœ… Real Image" if prediction >= 0.5 else "⚠️ Fake Image"

def register_user(name, phone, email, password):
    if not is_valid_email(email):
        return "❌ Invalid email"
    if not is_valid_phone(phone):
        return "❌ Phone must be 10 digits"

    cursor.execute("SELECT * FROM user_details WHERE EMAIL = ?", (email,))
    if cursor.fetchone():
        return "⚠️ Email already registered"

    hashed_pw = bcrypt.hashpw(password.encode(), bcrypt.gensalt())
    cursor.execute("INSERT INTO user_details (NAME, PHONE, EMAIL, GENDER, PASSWORD) VALUES (?, ?, ?, ?, ?)",
                   (name, phone, email, "U", hashed_pw))
    conn.commit()
    print(f"βœ… Registered new user: {email}")
    return "βœ… Registration successful! Please log in."

def login_user(email, password):
    cursor.execute("SELECT PASSWORD FROM user_details WHERE EMAIL = ?", (email,))
    result = cursor.fetchone()
    if result and bcrypt.checkpw(password.encode(), result[0] if isinstance(result[0], bytes) else result[0].encode()):
        return "βœ… Login successful!"
    return "❌ Invalid credentials"

# Gradio App
with gr.Blocks() as demo:
    with gr.Tabs():
        

        with gr.Tab("πŸ” Login"):
            gr.Markdown("### Login or Sign Up")

            status = gr.Textbox(label="Status", interactive=False)
            name = gr.Textbox(label="Name (Sign Up Only)")
            phone = gr.Textbox(label="Phone (Sign Up Only)")
            email = gr.Textbox(label="Email")
            password = gr.Textbox(label="Password", type="password")
            login_btn = gr.Button("Login")
            signup_btn = gr.Button("Sign Up")

            login_btn.click(fn=login_user, inputs=[email, password], outputs=status)
            signup_btn.click(fn=register_user, inputs=[name, phone, email, password], outputs=status)

        with gr.Tab("πŸ§ͺ Detect Deepfake"):
            gr.Markdown("### Upload an Image to Detect Deepfake")
            image_input = gr.Image(type="pil")
            result = gr.Textbox(label="Prediction Result")
            predict_btn = gr.Button("Predict")
            predict_btn.click(fn=predict_image, inputs=image_input, outputs=result)

        

        with gr.Tab("ℹ️ About"):
            about.layout()

        with gr.Tab("🌐 Community"):
            community.layout()

        with gr.Tab("πŸ“˜ User Guide"):
            user_guide.layout()

        
# Launch App
if __name__ == "__main__":
    demo.launch()