Spaces:
Sleeping
Sleeping
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()
|