CoolFace
Apppublic

totallyturtle45/test2

sourceHugging Faceupdated 3y agoView on Hugging Face
0likes
app.py190 linesDownload Raw Back to root
1import tensorflow as tf2from tensorflow import keras3from keras import layers4import numpy as np5import tensorflow_addons as tf_addons6import matplotlib.pyplot as plt7import cv28import numpy as np9def convert(video):10    def videotoimg(video_path):11        import cv212        import numpy as np13 14        # Load the AVI video file15        cap = cv2.VideoCapture(video_path)16 17        # Check if the video file was opened successfully18        if not cap.isOpened():19            print("Error: Could not open video file.")20            exit()21 22        # Initialize a list to store frames as Numpy arrays23        video_frames = []24 25        # Read and process each frame of the video26        while True:27            ret, frame = cap.read()28 29            # Break the loop if the video has ended30            if not ret:31                break32 33            # Convert the frame to RGB format (OpenCV reads BGR by default)34            frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)35 36            # Resize the frame to (255, 255)37            resized_frame = cv2.resize(frame_rgb, (256, 256))38 39            # Append the resized frame to the list40            video_frames.append(resized_frame)41 42        # Release the video capture object43        cap.release()44 45        # Now you have a list of Numpy arrays representing the video frames with shape (255, 255, 3)46 47        return(video_frames)48 49        # Define the custom layer class50 51    class ReflectionPadding2D(layers.Layer):52        def __init__(self, padding=(1, 1), **kwargs):53            self.padding = tuple(padding)54            super(ReflectionPadding2D, self).__init__(**kwargs)55 56        def call(self, input_tensor, mask=None):57            padding_width, padding_height = self.padding58            padding_tensor = [59                [0, 0],60                [padding_height, padding_height],61                [padding_width, padding_width],62                [0, 0],63            ]64            return tf.pad(input_tensor, padding_tensor, mode="REFLECT")65 66        def get_config(self):67            config = super().get_config().copy()68            config.update({"padding": self.padding})69            return config70 71    # Register the custom layers72    keras.utils.get_custom_objects().update({73        "ReflectionPadding2D": ReflectionPadding2D,74        "InstanceNormalization": tf_addons.layers.InstanceNormalization75    })76 77    # Load the generator model78    loaded_gen_G = keras.models.load_model("saved_models_monet/ganF_monet.h5", custom_objects={79        "ReflectionPadding2D": ReflectionPadding2D,80        "InstanceNormalization": tf_addons.layers.InstanceNormalization81    }, compile=False)82 83    # Compile the loaded model manually84    loaded_gen_G.compile(loss='mean_squared_error', optimizer='adam')85 86    # Define a function to perform image transformation87    def transform_image(input_image):88        # Preprocess the input image89        input_image = input_image.astype(np.float32)90        input_image = input_image / 255.091 92        # Generate a prediction93        generated_image = loaded_gen_G.predict(np.expand_dims(input_image, axis=0))94        generated_image = (generated_image + 1.0) / 2.095 96        return np.squeeze(generated_image)97 98    # Load and preprocess the test image99    video_frames = videotoimg(video)100 101    print("Number of frames:", len(video_frames))102    # Initialize a list to store transformed frames103    transformed_frames = []104    progress_text = "Operation in progress. Please wait."105    my_bar = st.progress(0)106    point = 0107    progress_container = st.empty()108    for frame in video_frames:109        transformed_frame = transform_image(frame)110        transformed_frames.append(transformed_frame)111        point=point+1112        percent_complete = point / len(video_frames)113        my_bar.progress(percent_complete)114 115    # Display the transformed frames116    for transformed_frame in transformed_frames:117        plt.imshow(transformed_frame)118        plt.axis('off')119 120 121 122    # ... (your import statements)123 124    # Load and preprocess the test image125    video_frames = videotoimg(video)126 127    # Initialize a list to store transformed frames128    transformed_frames = []129 130    # Transform each frame and store the result131    for frame in video_frames:132        transformed_frame = transform_image(frame)133        transformed_frames.append(transformed_frame)134 135    # Get the shape of the frames to determine the video dimensions136    frame_height, frame_width, _ = transformed_frames[0].shape137 138    # Define the codec and create a VideoWriter object139    fourcc = cv2.VideoWriter_fourcc(*'mp4v')140    desktop_path = os.path.expanduser('~/Desktop')141 142    # Set the output video file path143    output_path = os.path.join(desktop_path, 'my_video.mp4')144 145    output_video = cv2.VideoWriter(output_path, fourcc, 30, (frame_width, frame_height))146    # Get the user's desktop directory147 148 149    # Convert and save each transformed frame to the output video150    for transformed_frame in transformed_frames:151        transformed_frame_uint8 = (transformed_frame * 255).astype(np.uint8)152        output_video.write(cv2.cvtColor(transformed_frame_uint8, cv2.COLOR_RGB2BGR))  # Convert to BGR format for saving153 154    # Release the VideoWriter155    output_video.release()156 157    print("Video saved as output_video.mp4")158 159 160import streamlit as st161import os162import streamlit as st163import os164 165def main():166    st.title("ai paint vid")167    st.write("video must be at 24 fps")168 169    uploaded_file = st.file_uploader("Choose a file...", type=["avi"])170 171    if uploaded_file is not None:172        destination_directory = "/Users/keller/Desktop/art_vid/video"173        if not os.path.exists(destination_directory):174            os.makedirs(destination_directory)175 176        st.write("Uploaded file:", uploaded_file.name)177 178        destination_path = os.path.join(destination_directory, uploaded_file.name)179        with open(destination_path, "wb") as destination_file:180            destination_file.write(uploaded_file.read())181 182        st.success("Started")183        convert("video/0001-0051.avi")184        st.success("done")185        186 187 188if __name__ == "__main__":189    main()190