|
import streamlit as st |
|
from transformers import pipeline |
|
from PIL import Image |
|
import requests |
|
from urllib.parse import urlparse, parse_qs |
|
from io import BytesIO |
|
|
|
|
|
@st.cache_resource |
|
def load_model(): |
|
return pipeline("image-classification", model="Wvolf/ViT_Deepfake_Detection") |
|
|
|
model = load_model() |
|
|
|
def get_thumbnail_url(video_url): |
|
""" |
|
Extracts the YouTube video ID and returns the thumbnail URL. |
|
""" |
|
parsed_url = urlparse(video_url) |
|
video_id = None |
|
if 'youtube' in parsed_url.netloc: |
|
query_params = parse_qs(parsed_url.query) |
|
video_id = query_params.get('v', [None])[0] |
|
elif 'youtu.be' in parsed_url.netloc: |
|
video_id = parsed_url.path.lstrip('/') |
|
|
|
if video_id: |
|
return f"https://img.youtube.com/vi/{video_id}/maxresdefault.jpg" |
|
return None |
|
|
|
def analyze_thumbnail(thumbnail_url): |
|
""" |
|
Downloads the thumbnail image and analyzes it using the deepfake detection model. |
|
""" |
|
response = requests.get(thumbnail_url) |
|
if response.status_code == 200: |
|
image = Image.open(BytesIO(response.content)).convert("RGB") |
|
results = model(image) |
|
return results, image |
|
else: |
|
st.error("Failed to retrieve the thumbnail image.") |
|
return None, None |
|
|
|
|
|
st.title("Deepfake Detection from YouTube Thumbnails") |
|
video_url = st.text_input("Enter YouTube Video URL:") |
|
if st.button("Analyze"): |
|
if video_url: |
|
thumbnail_url = get_thumbnail_url(video_url) |
|
if thumbnail_url: |
|
results, image = analyze_thumbnail(thumbnail_url) |
|
if results and image: |
|
st.image(image, caption="YouTube Video Thumbnail", use_column_width=True) |
|
st.subheader("Detection Results:") |
|
for result in results: |
|
label = result['label'] |
|
confidence = result['score'] * 100 |
|
st.write(f"**{label}**: {confidence:.2f}%") |
|
else: |
|
st.error("Could not analyze the thumbnail.") |
|
else: |
|
st.error("Invalid YouTube URL. Please enter a valid URL.") |
|
else: |
|
st.warning("Please enter a YouTube video URL.") |
|
|