import gradio as gr from PIL import Image def build_video_to_camvideo(CAM_METHODS, ALL_CLASSES, gradcam_video): with gr.Row(): with gr.Column(): gr.Markdown("### Video to GradCAM-Video") gr.Markdown("Here you can upload a video and visualize the GradCAM.") gr.Markdown("Please note that this can take a while. Also currently only a maximum of 60 frames can be processed. The video will be cut to 60 frames if it is longer. Furthermore, the video can only consist of a maximum of 1000.") gr.Markdown("The more frames and fps the video has, the longer it takes to process and the result will be more choppy.") video_cam_method = gr.Radio( ["GradCAM", "GradCAM++"], label="GradCAM Method", value="GradCAM", interactive=True, scale=2, ) video_cam_method.description = "Here you can choose the GradCAM method." video_cam_method.description_place = "left" video_alpha = gr.Slider( minimum=.1, maximum=.9, value=0.5, interactive=True, step=.1, label="Alpha", scale=1, ) video_alpha.description = "Here you can choose the alpha value." video_alpha.description_place = "left" video_layer = gr.Radio( ["layer1", "layer2", "layer3", "layer4", "all"], label="Layer", value="layer4", interactive=True, scale=2, ) video_layer.description = "Here you can choose the layer to visualize." video_layer.description_place = "left" video_animal_to_explain = gr.Dropdown( choices=["Predicted Class"] + ALL_CLASSES, label="Animal", value="Predicted Class", interactive=True, scale=2, ) video_animal_to_explain.description = "Here you can choose the animal to explain. If you choose 'Predicted Class' the method will explain the predicted class." video_animal_to_explain.description_place = "center" with gr.Column(): with gr.Column(): video_in = gr.Video(autoplay=True, include_audio=False) video_out = gr.Video(autoplay=True, include_audio=False) gif_cam_mode_button = gr.Button(value="Show GradCAM-Video", label="GradCAM", scale=1) gif_cam_mode_button.click(fn=gradcam_video, inputs=[video_in, video_alpha, video_cam_method, video_layer, video_animal_to_explain], outputs=[video_out], queue=True)