VidGuard / app.py
TruthLens's picture
Update app.py
0796fc7 verified
raw
history blame
2.05 kB
import streamlit as st
from transformers import pipeline
from pytube import YouTube
import tempfile
from moviepy.editor import VideoFileClip
from PIL import Image
import requests
from io import BytesIO
st.set_page_config(page_title="AI Media Verifier", layout="wide")
@st.cache_resource
def load_image_model():
return pipeline("image-classification", model="google/vit-base-patch16-224")
@st.cache_resource
def load_video_model():
return pipeline("zero-shot-classification", model="facebook/bart-large-mnli")
def detect_image(image):
model = load_image_model()
return model(image)
def detect_video(video_url):
yt = YouTube(video_url)
stream = yt.streams.filter(file_extension='mp4', progressive=True).order_by('resolution').desc().first()
with tempfile.NamedTemporaryFile(delete=False, suffix=".mp4") as tmp:
stream.download(filename=tmp.name)
clip = VideoFileClip(tmp.name).subclip(0, min(10, yt.length))
frame = clip.get_frame(clip.duration / 2)
image = Image.fromarray(frame)
return detect_image(image)
st.title("AI Media Verifier: Image & Video Authenticity")
option = st.radio("Choose input type:", ("Image", "Video"))
if option == "Image":
uploaded_image = st.file_uploader("Upload an Image", type=["jpg", "jpeg", "png"])
if uploaded_image:
image = Image.open(uploaded_image)
st.image(image, caption="Uploaded Image", use_container_width=True)
with st.spinner("Analyzing image..."):
results = detect_image(uploaded_image)
st.success("Analysis Complete")
for res in results:
st.write(f"**{res['label']}**: {res['score']*100:.2f}%")
elif option == "Video":
video_url = st.text_input("Enter YouTube Video Link")
if video_url:
st.video(video_url)
with st.spinner("Analyzing video..."):
results = detect_video(video_url)
st.success("Video Analysis Complete")
for res in results:
st.write(f"**{res['label']}**: {res['score']*100:.2f}%")