gh-rgupta
Add Git LFS configuration and update test files for Mac CPU compatibility
94421ed
"""
Streamlit Demo: AI-Generated Image Detector
Simple web interface for detecting AI-generated images using ARNIQA model.
python3 -m streamlit run app.py --server.port=25000 --server.address=0.0.0.0
"""
import streamlit as st
from PIL import Image
import inference
# Page configuration
st.set_page_config(
page_title="Real vs Fake - AI Image Detector",
page_icon="🔍",
layout="centered"
)
# Title and description
st.title("Real vs Fake")
st.markdown("### Detect AI-Generated Images")
st.markdown("---")
# Load model (cached to avoid reloading)
@st.cache_resource
def load_models():
"""Load ARNIQA feature extractor and classifier"""
with st.spinner("Loading AI detection model..."):
feature_extractor, classifier = inference.load_model(device='cpu')
return feature_extractor, classifier
try:
feature_extractor, classifier = load_models()
model_loaded = True
except Exception as e:
st.error("Error loading detection model. Please contact support.")
model_loaded = False
# File uploader
if model_loaded:
uploaded_file = st.file_uploader(
"Choose an image...",
type=['png', 'jpg', 'jpeg', 'PNG', 'JPG', 'JPEG'],
help="Upload an image in PNG or JPEG format"
)
if uploaded_file is not None:
try:
# Load and display image
image = Image.open(uploaded_file)
# Display image
col1, col2 = st.columns([1, 1])
with col1:
st.image(image, caption="Uploaded Image", use_container_width=True)
# Run prediction
with col2:
with st.spinner("Analyzing image..."):
prediction, confidence, (prob_real, prob_fake) = inference.predict(
image, feature_extractor, classifier, device='cpu'
)
# Display results
st.subheader("Results")
if prediction == "Real":
st.success(f"**Real**")
st.metric("Confidence", f"{confidence:.1f}%")
else:
st.error(f"**Fake**")
st.metric("Confidence", f"{confidence:.1f}%")
# Show probability breakdown
st.markdown("---")
st.write("**Probability Breakdown:**")
st.write(f"- Real: **{prob_real:.1f}%**")
st.write(f"- Fake: **{prob_fake:.1f}%**")
except Exception as e:
st.error(f"Error processing image: {str(e)}")
st.write("Please try uploading a different image.")