saakshigupta commited on
Commit
188aa2f
·
verified ·
1 Parent(s): 4690e29

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +52 -20
app.py CHANGED
@@ -1,9 +1,15 @@
1
  import streamlit as st
 
 
 
 
 
 
 
2
  import torch
3
  import torch.nn as nn
4
  from torch.utils.data import DataLoader
5
  from torchvision import transforms
6
- from transformers import BlipProcessor, BlipForConditionalGeneration
7
  from PIL import Image
8
  import numpy as np
9
  import io
@@ -11,10 +17,6 @@ import base64
11
  import cv2
12
  import matplotlib.pyplot as plt
13
  from peft import PeftModel
14
- from unsloth import FastVisionModel
15
- import os
16
- import tempfile
17
- import warnings
18
  from gradcam_xception import load_xception_model, generate_smoothgrad_visualizations_xception
19
  warnings.filterwarnings("ignore", category=UserWarning)
20
 
@@ -466,6 +468,39 @@ def preprocess_image_xception(image):
466
  input_tensor = transform(image).unsqueeze(0)
467
  return input_tensor, image, None
468
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
469
  # Main app
470
  def main():
471
  # Initialize session state variables
@@ -578,23 +613,20 @@ def main():
578
  st.error(f"Error loading image from URL: {str(e)}")
579
 
580
  with upload_tab3:
581
- sample_images = {
582
- "Real face sample": "https://raw.githubusercontent.com/deepfakes/faceswap/master/docs/full_guide/images/test_face.jpg",
583
- "Likely deepfake sample": "https://storage.googleapis.com/deepfake-detection/example_deepfake.jpg",
584
- "Neutral face sample": "https://t4.ftcdn.net/jpg/02/19/63/31/360_F_219633151_BW6TD8D1EA9OqZu4JgdmeJGg4JBaiAHj.jpg",
585
- }
586
- selected_sample = st.selectbox("Select a sample image:", list(sample_images.keys()))
 
587
  if st.button("Load Sample"):
588
- try:
589
- import requests
590
- response = requests.get(sample_images[selected_sample], stream=True)
591
- if response.status_code == 200:
592
- uploaded_image = Image.open(io.BytesIO(response.content)).convert("RGB")
593
  st.session_state.upload_method = "sample"
594
- else:
595
- st.error(f"Failed to load sample image: Status code {response.status_code}")
596
- except Exception as e:
597
- st.error(f"Error loading sample image: {str(e)}")
598
 
599
  # If we have an uploaded image, process it
600
  if uploaded_image is not None:
 
1
  import streamlit as st
2
+ import warnings
3
+ import os
4
+ import tempfile
5
+ # First load unsloth
6
+ from unsloth import FastVisionModel
7
+ # Then transformers
8
+ from transformers import BlipProcessor, BlipForConditionalGeneration
9
  import torch
10
  import torch.nn as nn
11
  from torch.utils.data import DataLoader
12
  from torchvision import transforms
 
13
  from PIL import Image
14
  import numpy as np
15
  import io
 
17
  import cv2
18
  import matplotlib.pyplot as plt
19
  from peft import PeftModel
 
 
 
 
20
  from gradcam_xception import load_xception_model, generate_smoothgrad_visualizations_xception
21
  warnings.filterwarnings("ignore", category=UserWarning)
22
 
 
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
 
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: