Spaces:
Runtime error
Runtime error
| 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 | |
| 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() |