Spaces:
Running
Running
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 | |
# Custom page modules (ensure these files exist) | |
import home | |
import about | |
import examples | |
import community | |
import user_guide | |
import install | |
# Suppress all warnings and unnecessary logs | |
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' | |
warnings.filterwarnings("ignore") | |
np.seterr(all='ignore') | |
# Load the deepfake model | |
deepfake_model = tf.keras.models.load_model("model_15_64.h5") | |
# Setup SQLite connection | |
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 user_details table if not exists | |
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() | |
# Email validation | |
def is_valid_email(email): | |
return re.match(r"[^@]+@[^@]+\.[^@]+", email) | |
# Phone validation | |
def is_valid_phone(phone): | |
return re.match(r"^[0-9]{10}$", phone) | |
# Image preprocessing | |
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) | |
# Predict deepfake | |
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" | |
# Register new user | |
def register_user(name, phone, email, password): | |
if not is_valid_email(email): | |
return "β Invalid email", False | |
if not is_valid_phone(phone): | |
return "β Phone must be 10 digits", False | |
cursor.execute("SELECT * FROM user_details WHERE EMAIL = ?", (email,)) | |
if cursor.fetchone(): | |
return "β οΈ Email already registered", False | |
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.", True | |
# Login existing user | |
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!", True | |
return "β Invalid credentials", False | |
# Gradio interface | |
with gr.Blocks() as demo: | |
session = gr.State({}) | |
with gr.Tabs(): | |
with gr.Tab("Home"): | |
home.layout() | |
with gr.Tab("Login"): | |
status = gr.Textbox(label="", 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") | |
def handle_login(e, p): | |
msg, ok = login_user(e, p) | |
return msg | |
def handle_signup(n, ph, e, p): | |
msg, ok = register_user(n, ph, e, p) | |
return msg | |
login_btn.click(handle_login, [email, password], status) | |
signup_btn.click(handle_signup, [name, phone, email, password], status) | |
with gr.Tab("Detect Deepfake"): | |
gr.Markdown("### Upload an Image to Detect") | |
image_input = gr.Image(type="pil") | |
result = gr.Textbox(label="Result") | |
predict_btn = gr.Button("Predict") | |
predict_btn.click(predict_image, inputs=image_input, outputs=result) | |
with gr.Tab("Examples"): | |
examples.layout() | |
with gr.Tab("About"): | |
about.layout() | |
with gr.Tab("Community"): | |
community.layout() | |
with gr.Tab("User Guide"): | |
user_guide.layout() | |
with gr.Tab("Install"): | |
install.layout() | |
# Run the app | |
if __name__ == "__main__": | |
demo.launch() | |