Update app.py
Browse files
app.py
CHANGED
@@ -468,39 +468,6 @@ def preprocess_image_xception(image):
|
|
468 |
input_tensor = transform(image).unsqueeze(0)
|
469 |
return input_tensor, image, None
|
470 |
|
471 |
-
# After the get_xception_transform function, add this function to use embedded sample images
|
472 |
-
|
473 |
-
def get_embedded_sample_image(sample_name):
|
474 |
-
"""Return a sample image embedded in the code to avoid URL issues"""
|
475 |
-
import base64
|
476 |
-
from PIL import Image
|
477 |
-
import io
|
478 |
-
|
479 |
-
# These are base64 encoded small sample images to avoid URL fetching
|
480 |
-
sample_images = {
|
481 |
-
"Real face sample": "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
|
482 |
-
",
|
483 |
-
"Likely deepfake sample": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCACAAIABAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/APZc0UlFITUckyRjLMBVCfWbaLOXyfTNZtx4jt1/5aAj2zXO6p4wS3VmEm0Dr81cDrXxM1DcY7WMOw6qG
|
484 |
-
",
|
485 |
-
"Neutral face sample": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxEQEhUQEhIVFRUXFxgWGBcVGBcXGBgYGBcYFhgXFRcYHSggGBolGxUVITEhJSkrLi4uFx8zODMtNygtLisBCgoKDg0OGxAQGy0mICUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLf/AABEIAQEAxAMBIgACEQEDEQH/
|
486 |
-
"
|
487 |
-
}
|
488 |
-
|
489 |
-
if sample_name in sample_images:
|
490 |
-
try:
|
491 |
-
# Decode the base64 image
|
492 |
-
image_bytes = base64.b64decode(sample_images[sample_name])
|
493 |
-
# Create a PIL image from the bytes
|
494 |
-
return Image.open(io.BytesIO(image_bytes))
|
495 |
-
except Exception as e:
|
496 |
-
st.error(f"Error loading embedded sample image: {e}")
|
497 |
-
import traceback
|
498 |
-
st.error(traceback.format_exc())
|
499 |
-
else:
|
500 |
-
st.error(f"Unknown sample image: {sample_name}")
|
501 |
-
|
502 |
-
return None
|
503 |
-
|
504 |
# Main app
|
505 |
def main():
|
506 |
# Initialize session state variables
|
@@ -583,7 +550,7 @@ def main():
|
|
583 |
st.subheader("Upload an Image")
|
584 |
|
585 |
# Add alternative upload methods
|
586 |
-
upload_tab1, upload_tab2
|
587 |
|
588 |
uploaded_image = None
|
589 |
|
@@ -612,22 +579,6 @@ def main():
|
|
612 |
except Exception as e:
|
613 |
st.error(f"Error loading image from URL: {str(e)}")
|
614 |
|
615 |
-
with upload_tab3:
|
616 |
-
sample_options = [
|
617 |
-
"Real face sample",
|
618 |
-
"Likely deepfake sample",
|
619 |
-
"Neutral face sample"
|
620 |
-
]
|
621 |
-
selected_sample = st.selectbox("Select a sample image:", sample_options)
|
622 |
-
|
623 |
-
if st.button("Load Sample"):
|
624 |
-
with st.spinner(f"Loading sample image: {selected_sample}"):
|
625 |
-
# Use the embedded sample function instead of URL fetching
|
626 |
-
uploaded_image = get_embedded_sample_image(selected_sample)
|
627 |
-
if uploaded_image is not None:
|
628 |
-
st.session_state.upload_method = "sample"
|
629 |
-
st.success("Sample image loaded successfully!")
|
630 |
-
|
631 |
# If we have an uploaded image, process it
|
632 |
if uploaded_image is not None:
|
633 |
# Display the image
|
|
|
468 |
input_tensor = transform(image).unsqueeze(0)
|
469 |
return input_tensor, image, None
|
470 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
471 |
# Main app
|
472 |
def main():
|
473 |
# Initialize session state variables
|
|
|
550 |
st.subheader("Upload an Image")
|
551 |
|
552 |
# Add alternative upload methods
|
553 |
+
upload_tab1, upload_tab2 = st.tabs(["File Upload", "URL Input"])
|
554 |
|
555 |
uploaded_image = None
|
556 |
|
|
|
579 |
except Exception as e:
|
580 |
st.error(f"Error loading image from URL: {str(e)}")
|
581 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
582 |
# If we have an uploaded image, process it
|
583 |
if uploaded_image is not None:
|
584 |
# Display the image
|