dfimgdetector / src /streamlit_app.py
mangalaparida's picture
Update src/streamlit_app.py
5e1bd6b verified
Raw
History Blame Contribute Delete
1.79 kB
import streamlit as st
from PIL import Image
from core.inference import load_deepfake_model
from ui.styles import apply_custom_styles
from ui.components import render_header, render_result, render_footer
# --- Page Config ---
st.set_page_config(
page_title="Deepfake Image Detector",
page_icon="πŸ•΅οΈ",
layout="centered",
initial_sidebar_state="collapsed",
)
# --- Apply UI ---
apply_custom_styles()
render_header()
# βœ… FIX 1: Use cache instead of session_state + spinner
@st.cache_resource
def get_model():
return load_deepfake_model()
classifier = get_model()
# --- Upload ---
st.markdown("### πŸ“€ Image Upload")
uploaded_file = st.file_uploader(
"Select or Drag & Drop an Image (JPG, JPEG, PNG)",
type=["jpg", "jpeg", "png"],
label_visibility="collapsed"
)
if uploaded_file is not None:
try:
image = Image.open(uploaded_file).convert("RGB")
except Exception as e:
st.error(f"Image loading error: {e}")
st.stop()
col1, col2, col3 = st.columns([1, 2, 1])
with col2:
st.image(image, caption="Uploaded Image", use_container_width=True)
# --- Analyze Button ---
if st.button("Analyze Image"):
try:
# βœ… FIX 2: Safe spinner (only during inference)
with st.spinner("Running Deepfake Detection..."):
results = classifier(image)
top_result = results[0]
label = top_result['label'].lower()
score = top_result['score']
is_fake = "fake" in label
confidence_percentage = round(score * 100, 2)
# --- Show Result ---
render_result(is_fake, confidence_percentage)
except Exception as e:
st.error(f"Error: {e}")
# --- Footer ---
render_footer()