import gradio as gr from keras.preprocessing import image from keras.applications.vgg16 import preprocess_input import numpy as np from keras.models import load_model import cv2 as cv # Load the trained model model = load_model('FaceAuthenticator.keras') # Load the pre-trained face detection model with error handling face_cascade = cv.CascadeClassifier('hass_face.xml') # Define a function to preprocess the input image def preprocess_image(image_path): img = cv.imread(image_path) img = cv.resize(img, (224, 224)) img = cv.cvtColor(img, cv.COLOR_BGR2RGB) img_array = np.expand_dims(img, axis=0) img_array = preprocess_input(img_array) return img_array # Define a function to classify the input image def classify_image(image_data): try: # Save the uploaded image temporarily temp_image_path = "temp_image.jpg" image_data.save(temp_image_path) # Preprocess the image img_array = preprocess_image(temp_image_path) # Convert the image to grayscale gray_image = cv.cvtColor(cv.imread(temp_image_path), cv.COLOR_BGR2GRAY) # Detect faces in the image faces = face_cascade.detectMultiScale(gray_image, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30)) # Check if any faces were detected if len(faces) == 0: return "No faces detected in the input image." else: # Make predictions prediction = model.predict(img_array) # Return the prediction if prediction[0][0] > 0.5: return "The image is classified as real." else: return "The image is classified as fake." except Exception as e: return f"An error occurred: {str(e)}" # Create the Gradio interface demo = gr.Interface( fn=classify_image, inputs=gr.Image(type="pil", label="Upload Image"), outputs=gr.Textbox(label="Prediction"), title="DeepFake Detection for Facial images", description="Upload an Facial image and the model will classify it as real or fake.", theme="default", ) # Launch the Gradio app demo.launch()