Spaces:
Sleeping
Sleeping
import streamlit as st | |
import requests | |
from transformers import pipeline | |
from deepface import DeepFace | |
from PIL import Image | |
import io | |
# Load Fake News Detection Model from Hugging Face | |
fake_news_pipeline = pipeline("text-classification", model="mrm8488/bert-tiny-finetuned-fake-news-detection") | |
def classify_text(news_text): | |
"""Classifies text as Fake or Real with accuracy.""" | |
result = fake_news_pipeline(news_text)[0] | |
label = result['label'].lower() | |
score = result['score'] * 100 # Convert to percentage | |
return ("Fake" if label == "fake" else "Real"), round(score, 2) | |
def analyze_image(image): | |
"""Analyzes image using DeepFace and provides a result.""" | |
try: | |
analysis = DeepFace.analyze(image, actions=['emotion']) | |
dominant_emotion = analysis[0]['dominant_emotion'] | |
return f"Analysis Complete - Dominant Emotion: {dominant_emotion}", 90.0 # Dummy Accuracy | |
except Exception as e: | |
return f"Error: {str(e)}", 0.0 | |
def verify_news(news_text): | |
"""Generates a Google search link for verification.""" | |
search_url = f"https://www.google.com/search?q={'+'.join(news_text.split())}" | |
return search_url | |
def check_video_fake_news(video_url): | |
"""Uses Google Fact-Check API for video verification.""" | |
api_url = f"https://factchecktools.googleapis.com/v1alpha1/claims:search?query={video_url}&key=YOUR_API_KEY" | |
response = requests.get(api_url) | |
if response.status_code == 200: | |
data = response.json() | |
if 'claims' in data: | |
return "Fake", 85.0 # Fake News Detected (Dummy Value) | |
else: | |
return "Real", 92.0 # Seems Real (Dummy Value) | |
return "Unknown", 0.0 # Could Not Verify | |
# Streamlit UI | |
st.set_page_config(page_title="Fake News Detector", layout="wide") | |
st.title("π° Fake News Detector") | |
# πΉ Sidebar for Input Selection | |
st.sidebar.title("Select Input Type") | |
option = st.sidebar.radio("Choose an option", ["Text", "Image", "Video Link"]) | |
# πΉ Ensure session state variables are initialized | |
for key in ["analyze_text", "result_text", "accuracy_text", "analyze_image", "analyze_video", "news_image", "video_url"]: | |
if key not in st.session_state: | |
st.session_state[key] = None | |
# πΉ Text Input Section | |
if option == "Text": | |
news_text = st.text_area("Enter the news content to check:", height=200) | |
if st.button("Analyze News"): | |
if not news_text.strip(): | |
st.warning("Please enter some text.") | |
else: | |
result, accuracy = classify_text(news_text) | |
st.session_state["result_text"] = result | |
st.session_state["accuracy_text"] = accuracy | |
# πΉ Image Upload Section | |
elif option == "Image": | |
uploaded_image = st.file_uploader("Upload a news image", type=["jpg", "png", "jpeg"]) | |
if uploaded_image and st.button("Analyze Image"): | |
image = Image.open(uploaded_image) | |
st.session_state["news_image"] = image | |
result, accuracy = analyze_image(image) | |
st.session_state["result_text"] = result | |
st.session_state["accuracy_text"] = accuracy | |
# πΉ Video Link Section | |
elif option == "Video Link": | |
video_url = st.text_input("Enter the video link:") | |
if st.button("Analyze Video"): | |
if not video_url.strip(): | |
st.warning("Please enter a valid video link.") | |
else: | |
st.session_state["video_url"] = video_url | |
result, accuracy = check_video_fake_news(video_url) | |
st.session_state["result_text"] = result | |
st.session_state["accuracy_text"] = accuracy | |
# πΉ Results Section | |
st.subheader("π Analysis Results") | |
if st.session_state["result_text"]: | |
result = st.session_state["result_text"] | |
accuracy = st.session_state["accuracy_text"] | |
if result == "Fake": | |
st.error(f"β This is likely **Fake News**! (Accuracy: {accuracy}%)", icon="β οΈ") | |
else: | |
st.success(f"β This is likely **Real News**! (Accuracy: {accuracy}%)", icon="β ") | |
# πΉ Verification Sources | |
st.subheader("π Verification & Trusted Sources") | |
sources = [ | |
"https://www.bbc.com/news", | |
"https://www.cnn.com", | |
"https://www.reuters.com", | |
"https://factcheck.org", | |
"https://www.snopes.com", | |
"https://www.politifact.com" | |
] | |
for link in sources: | |
st.markdown(f"[π {link}]({link})") | |
if option == "Text": | |
verification_link = verify_news(st.session_state["result_text"]) | |
st.markdown(f"[π Verify on Google]({verification_link})") | |
# πΉ Display Image if Uploaded | |
if st.session_state["news_image"]: | |
st.image(st.session_state["news_image"], caption="Uploaded Image", use_column_width=True) | |
# πΉ Display Video if Entered | |
if st.session_state["video_url"]: | |
st.video(st.session_state["video_url"]) | |