Nimzi's picture
Update app.py
c8d1c47 verified
raw
history blame
4.82 kB
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"])