|
import streamlit as st |
|
import numpy as np |
|
import os |
|
os.system("pip install opencv-python-headless") |
|
import cv2 |
|
import tempfile |
|
import os |
|
from PIL import Image |
|
import tensorflow as tf |
|
from transformers import pipeline |
|
from tensorflow.keras.applications import Xception, EfficientNetB7 |
|
from tensorflow.keras.models import Model |
|
from tensorflow.keras.layers import Dense, GlobalAveragePooling2D |
|
from tensorflow.keras.preprocessing.image import load_img, img_to_array |
|
|
|
|
|
st.set_page_config(page_title="Fake & Deepfake Detection", layout="wide") |
|
|
|
st.title("\U0001F4F0 Fake News & Deepfake Detection Tool") |
|
st.write("\U0001F680 Detect Fake News, Deepfake Images, and Videos using AI") |
|
|
|
|
|
fake_news_detector = pipeline("text-classification", model="microsoft/deberta-v3-base") |
|
|
|
|
|
base_model_image = Xception(weights="imagenet", include_top=False) |
|
base_model_image.trainable = False |
|
x = GlobalAveragePooling2D()(base_model_image.output) |
|
x = Dense(1024, activation="relu")(x) |
|
x = Dense(1, activation="sigmoid")(x) |
|
deepfake_image_model = Model(inputs=base_model_image.input, outputs=x) |
|
|
|
base_model_video = EfficientNetB7(weights="imagenet", include_top=False) |
|
base_model_video.trainable = False |
|
x = GlobalAveragePooling2D()(base_model_video.output) |
|
x = Dense(1024, activation="relu")(x) |
|
x = Dense(1, activation="sigmoid")(x) |
|
deepfake_video_model = Model(inputs=base_model_video.input, outputs=x) |
|
|
|
|
|
def preprocess_image(image_path): |
|
img = load_img(image_path, target_size=(299, 299)) |
|
img = img_to_array(img) |
|
img = np.expand_dims(img, axis=0) |
|
img /= 255.0 |
|
return img |
|
|
|
|
|
def detect_deepfake_image(image_path): |
|
image = preprocess_image(image_path) |
|
prediction = deepfake_image_model.predict(image)[0][0] |
|
confidence = round(float(prediction), 2) |
|
label = "FAKE" if confidence > 0.5 else "REAL" |
|
return {"label": label, "score": confidence} |
|
|
|
|
|
st.subheader("\U0001F4DD Fake News Detection") |
|
news_input = st.text_area("Enter News Text:", placeholder="Type here...") |
|
|
|
if st.button("Check News"): |
|
st.write("\U0001F50D Processing...") |
|
prediction = fake_news_detector(news_input) |
|
label = prediction[0]['label'] |
|
confidence = prediction[0]['score'] |
|
|
|
if label == "FAKE": |
|
st.error(f"⚠️ Result: This news is FAKE. (Confidence: {confidence:.2f})") |
|
else: |
|
st.success("✅ Result: This news appears legitimate.") |
|
|
|
|
|
st.subheader("\U0001F4F8 Deepfake Image Detection") |
|
uploaded_image = st.file_uploader("Upload an Image", type=["jpg", "png", "jpeg"]) |
|
|
|
if uploaded_image is not None: |
|
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".jpg") |
|
img = Image.open(uploaded_image).convert("RGB") |
|
img.save(temp_file.name, "JPEG") |
|
st.image(temp_file.name, caption="\U0001F5BC️ Uploaded Image", use_column_width=True) |
|
|
|
if st.button("Analyze Image"): |
|
st.write("\U0001F50D Processing...") |
|
result = detect_deepfake_image(temp_file.name) |
|
|
|
if result["label"] == "FAKE": |
|
st.error(f"⚠️ Result: This image is a Deepfake. (Confidence: {result['score']:.2f})") |
|
else: |
|
st.success(f"✅ Result: This image is Real. (Confidence: {1 - result['score']:.2f})") |
|
|
|
|
|
st.subheader("\U0001F3A5 Deepfake Video Detection") |
|
uploaded_video = st.file_uploader("Upload a Video", type=["mp4", "avi", "mov"]) |
|
|
|
def detect_deepfake_video(video_path): |
|
cap = cv2.VideoCapture(video_path) |
|
frame_scores = [] |
|
|
|
while cap.isOpened(): |
|
ret, frame = cap.read() |
|
if not ret: |
|
break |
|
|
|
frame_path = "temp_frame.jpg" |
|
cv2.imwrite(frame_path, frame) |
|
result = detect_deepfake_image(frame_path) |
|
frame_scores.append(result["score"]) |
|
os.remove(frame_path) |
|
|
|
cap.release() |
|
avg_score = np.mean(frame_scores) |
|
final_label = "FAKE" if avg_score > 0.5 else "REAL" |
|
return {"label": final_label, "score": round(float(avg_score), 2)} |
|
|
|
if uploaded_video is not None: |
|
st.video(uploaded_video) |
|
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".mp4") |
|
with open(temp_file.name, "wb") as f: |
|
f.write(uploaded_video.read()) |
|
|
|
if st.button("Analyze Video"): |
|
st.write("\U0001F50D Processing...") |
|
result = detect_deepfake_video(temp_file.name) |
|
|
|
if result["label"] == "FAKE": |
|
st.warning(f"⚠️ Result: This video contains Deepfake elements. (Confidence: {result['score']:.2f})") |
|
else: |
|
st.success(f"✅ Result: This video is Real. (Confidence: {1 - result['score']:.2f})") |
|
|
|
st.markdown("\U0001F4A1 **Developed for Fake News & Deepfake Detection Hackathon**") |
|
|