|
import streamlit as st |
|
import numpy as np |
|
import cv2 |
|
import tempfile |
|
import os |
|
from PIL import Image |
|
|
|
|
|
st.set_page_config(page_title="Fake & Deepfake Detection", layout="wide") |
|
|
|
st.title("π° Fake News & Deepfake Detection Tool") |
|
st.write("π Detect Fake News, Deepfake Images, and Videos using AI") |
|
|
|
|
|
st.subheader("π Fake News Detection") |
|
news_input = st.text_area("Enter News Text:", "Type here...") |
|
|
|
if st.button("Check News"): |
|
st.write("π Processing...") |
|
st.success("β
Result: This news is FAKE.") |
|
|
|
|
|
st.subheader("πΈ Deepfake Image Detection") |
|
uploaded_image = st.file_uploader("Upload an Image", type=["jpg", "png", "jpeg"]) |
|
|
|
def compress_image(image, quality=50, max_size=(100, 100)): |
|
img = Image.open(image).convert("RGB") |
|
img.thumbnail(max_size) |
|
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".jpg") |
|
img.save(temp_file.name, "JPEG", quality=quality) |
|
return temp_file.name |
|
|
|
if uploaded_image is not None: |
|
compressed_image_path = compress_image(uploaded_image) |
|
st.image(compressed_image_path, caption="πΌοΈ Compressed Image", use_column_width=True) |
|
if st.button("Analyze Image"): |
|
st.write("π Processing...") |
|
st.error("β οΈ Result: This image is a Deepfake.") |
|
|
|
|
|
st.subheader("π₯ Deepfake Video Detection") |
|
uploaded_video = st.file_uploader("Upload a Video", type=["mp4", "avi", "mov"]) |
|
|
|
def compress_video(video): |
|
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".mp4") |
|
|
|
with tempfile.NamedTemporaryFile(delete=False, suffix=".mp4") as temp_video: |
|
temp_video.write(video.read()) |
|
video_path = temp_video.name |
|
|
|
cap = cv2.VideoCapture(video_path) |
|
|
|
if not cap.isOpened(): |
|
st.error("β Error: Unable to read video!") |
|
return None |
|
|
|
fourcc = cv2.VideoWriter_fourcc(*'mp4v') |
|
|
|
|
|
frame_width = 200 |
|
frame_height = 120 |
|
out = cv2.VideoWriter(temp_file.name, fourcc, 12.0, (frame_width, frame_height)) |
|
|
|
while cap.isOpened(): |
|
ret, frame = cap.read() |
|
if not ret: |
|
break |
|
frame = cv2.resize(frame, (frame_width, frame_height)) |
|
out.write(frame) |
|
|
|
cap.release() |
|
out.release() |
|
|
|
return temp_file.name |
|
|
|
if uploaded_video is not None: |
|
compressed_video_path = compress_video(uploaded_video) |
|
if compressed_video_path: |
|
st.video(compressed_video_path) |
|
if st.button("Analyze Video"): |
|
st.write("π Processing...") |
|
st.warning("β οΈ Result: This video contains Deepfake elements.") |
|
|
|
st.markdown("πΉ **Developed for Fake News & Deepfake Detection Hackathon**") |