SanyaAhmed's picture
Upload 7 files
b1fc48a verified
import streamlit as st
import torch
import torchvision.transforms as transforms
# from torch import nn
# import cv2
# import numpy as np
# import torch
# import torchvision
# from torchvision import models, transforms
# from torch.utils.data import DataLoader
# from torch.utils.data.dataset import Dataset
# import os
# import matplotlib.pyplot as plt
# import face_recognition
# import sys
# import time
# from torch.autograd import Variable
from function import Model, validation_dataset, predict
# Set Streamlit page config
st.set_page_config(
page_title="DeepFake Detection",
layout="centered",
page_icon=":mask:"
)
# Load the pre-trained model
@st.cache_resource
def load_model():
model = Model(num_classes=2).cuda()
model_path = "model.pt" # Update with actual model path
model.load_state_dict(torch.load(model_path))
model.eval()
return model
model = load_model()
st.title("DeepFake Detection App")
st.divider()
st.sidebar.header("Upload Video")
uploaded_video = st.sidebar.file_uploader("Choose a video file", type=["mp4", "avi", "mov"])
if uploaded_video:
st.sidebar.write("Video uploaded successfully!")
# Save the uploaded video locally for processing
with open("uploaded_video.mp4", "wb") as f:
f.write(uploaded_video.getbuffer())
st.video("uploaded_video.mp4")
# Preprocess and analyze the video
with st.spinner("Processing video..."):
try:
# Validation dataset
video_dataset = validation_dataset(
video_names=["uploaded_video.mp4"],
sequence_length=20,
transform=transforms.Compose([
transforms.ToPILImage(),
transforms.Resize((112, 112)),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
)
video_frames = video_dataset[0] # Extract frames from video
if video_frames is not None:
prediction = predict(model, video_frames)
st.subheader("Prediction: ")
st.write(f"{'REAL' if prediction[0] == 1 else 'FAKE'}")
st.subheader("Confidence: ")
st.write(f"{prediction[1]:.2f}%")
else:
st.error("No faces detected in the video.")
except Exception as e:
st.error(f"An error occurred during processing: {e}")
else:
st.sidebar.write("Upload a video file.")