import base64 import json import os, shutil import re import time import uuid import cv2 import numpy as np import streamlit as st from PIL import Image # from extract_video import extract_method_single_video from utils import st_file_selector, img2base64 from main import FaceFakePipelineImage, FaceFakePipelineVideo import os DEBUG = True def main(): st.markdown("###") uploaded_file = st.file_uploader('Upload a picture', type=['mp4', 'jpg', 'jpeg', 'png'], accept_multiple_files=False) with st.spinner(f'Loading samples...'): while not os.path.isdir("sample_files"): time.sleep(1) st.markdown("### or") selected_file = st_file_selector(st, path='sample_files', key = 'selected', label = 'Choose a sample image/video') if uploaded_file: random_id = uuid.uuid1() base_folder = "temps" filename = "{}.{}".format(random_id, uploaded_file.type.split("/")[-1]) file_type = uploaded_file.type.split("/")[0] filepath = f"{base_folder}/{filename}" faces_folder = f"{base_folder}/images/{random_id}" st.write(filepath) if uploaded_file.type == 'video/mp4': with open(f"temps/{filename}", mode='wb') as f: f.write(uploaded_file.read()) video_path = filepath st.video(uploaded_file) else: img = Image.open(uploaded_file).convert('RGB') ext = uploaded_file.type.split("/")[-1] st.image(img) elif selected_file: base_folder = "sample_files" file_type = selected_file.split(".")[-1] filename = selected_file.split("/")[-1] filepath = f"{base_folder}/{selected_file}" if file_type == 'mp4': video_file = open(filepath, 'rb') video_bytes = video_file.read() st.video(video_bytes) video_path = filepath else: img = Image.open(filepath).convert('RGB') st.image(img) else: return with st.spinner(f'Analyzing {file_type}...'): if file_type == 'video' or file_type == 'mp4': result = video_pipeline(video_path, config_payload=config_payload) else: result = image_pipeline({'images': [img2base64(np.array(img))]}, config_payload=config_payload) if 'Real' in result['message']: st.success(result['message'], icon="✅") else: st.error(result['message'], icon="🚨") st.divider() st.write('## Response JSON') st.write(result) def setup(): if not os.path.isdir("temps"): os.makedirs("temps") if __name__ == "__main__": image_pipeline = FaceFakePipelineImage() video_pipeline = FaceFakePipelineVideo() with st.sidebar: config_payload = { 'face_detection_threshold': 0.997, 'deformation_detection_threshold': 0.6, 'deepfake_detection_threshold': 0.65, 'frame_sampling_interval': st.slider('frame_sampling_interval', 0, 300, 60, step=5), 'frame_sampling_max': st.slider('frame_sampling_max', 0, 120, 50), } st.title("Face Fake Detection") setup() main()