Spaces:
Build error
Build error
| 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 | |
| # ---- Page Configuration ---- | |
| 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") | |
| # Load Fake News Detector | |
| fake_news_detector = pipeline("text-classification", model="microsoft/deberta-v3-base") | |
| # Load Deepfake Detection Models | |
| 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) | |
| # Function to Preprocess Image | |
| 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 | |
| # Function to Detect Deepfake Image | |
| 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} | |
| # ---- Fake News Detection Section ---- | |
| 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.") | |
| # ---- Deepfake Image Detection Section ---- | |
| 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})") | |
| # ---- Deepfake Video Detection Section ---- | |
| 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**") | |