Update app.py
Browse files
app.py
CHANGED
@@ -89,6 +89,7 @@ import numpy as np
|
|
89 |
import cv2
|
90 |
import tempfile
|
91 |
import requests
|
|
|
92 |
import os
|
93 |
from PIL import Image
|
94 |
import tensorflow as tf
|
@@ -373,8 +374,8 @@ st.subheader("🎥 Deepfake Video Detection")
|
|
373 |
# Upload video file
|
374 |
uploaded_video = st.file_uploader("Upload a Video", type=["mp4", "avi", "mov"])
|
375 |
|
376 |
-
# URL Input for Video
|
377 |
-
video_url = st.text_input("Enter Video URL (MP4
|
378 |
|
379 |
# Function to detect deepfake in video
|
380 |
def detect_deepfake_video(video_path):
|
@@ -407,7 +408,7 @@ def detect_deepfake_video(video_path):
|
|
407 |
|
408 |
return {"label": final_label, "score": confidence}
|
409 |
|
410 |
-
# Download video from URL
|
411 |
def download_video(url):
|
412 |
try:
|
413 |
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".mp4")
|
@@ -422,6 +423,19 @@ def download_video(url):
|
|
422 |
except Exception as e:
|
423 |
return None
|
424 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
425 |
# Select Video Source
|
426 |
video_path = None
|
427 |
|
@@ -433,10 +447,14 @@ if uploaded_video is not None:
|
|
433 |
f.write(uploaded_video.read())
|
434 |
video_path = temp_file.name # Set video path for detection
|
435 |
|
436 |
-
# Process Video from URL
|
437 |
elif video_url:
|
438 |
-
|
439 |
-
|
|
|
|
|
|
|
|
|
440 |
|
441 |
# Ensure video_path is valid before analysis
|
442 |
if video_path and os.path.exists(video_path):
|
|
|
89 |
import cv2
|
90 |
import tempfile
|
91 |
import requests
|
92 |
+
from pytube import YouTube
|
93 |
import os
|
94 |
from PIL import Image
|
95 |
import tensorflow as tf
|
|
|
374 |
# Upload video file
|
375 |
uploaded_video = st.file_uploader("Upload a Video", type=["mp4", "avi", "mov"])
|
376 |
|
377 |
+
# URL Input for Video (MP4 Direct Link or YouTube URL)
|
378 |
+
video_url = st.text_input("Enter Video URL (YouTube or MP4 Link)")
|
379 |
|
380 |
# Function to detect deepfake in video
|
381 |
def detect_deepfake_video(video_path):
|
|
|
408 |
|
409 |
return {"label": final_label, "score": confidence}
|
410 |
|
411 |
+
# Download video from direct MP4 URL
|
412 |
def download_video(url):
|
413 |
try:
|
414 |
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".mp4")
|
|
|
423 |
except Exception as e:
|
424 |
return None
|
425 |
|
426 |
+
# Download YouTube video
|
427 |
+
def download_youtube_video(youtube_url):
|
428 |
+
try:
|
429 |
+
yt = YouTube(youtube_url)
|
430 |
+
video_stream = yt.streams.filter(file_extension="mp4", res="360p").first()
|
431 |
+
if not video_stream:
|
432 |
+
video_stream = yt.streams.get_lowest_resolution()
|
433 |
+
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".mp4")
|
434 |
+
video_stream.download(filename=temp_file.name)
|
435 |
+
return temp_file.name
|
436 |
+
except Exception as e:
|
437 |
+
return None
|
438 |
+
|
439 |
# Select Video Source
|
440 |
video_path = None
|
441 |
|
|
|
447 |
f.write(uploaded_video.read())
|
448 |
video_path = temp_file.name # Set video path for detection
|
449 |
|
450 |
+
# Process Video from URL (Check if YouTube or Direct Link)
|
451 |
elif video_url:
|
452 |
+
if "youtube.com" in video_url or "youtu.be" in video_url:
|
453 |
+
st.video(video_url) # Show YouTube video
|
454 |
+
video_path = download_youtube_video(video_url) # Download YouTube video
|
455 |
+
else:
|
456 |
+
st.video(video_url) # Show direct MP4 video
|
457 |
+
video_path = download_video(video_url) # Download direct MP4 video
|
458 |
|
459 |
# Ensure video_path is valid before analysis
|
460 |
if video_path and os.path.exists(video_path):
|