import gradio as gr import os import subprocess if os.getenv('SYSTEM') == 'spaces': subprocess.call('pip install -U openmim'.split()) subprocess.call('pip install torch==1.11.0 torchvision==0.12.0'.split()) subprocess.call('mim install mmcv>=2.0.0'.split()) subprocess.call('mim install mmengine'.split()) subprocess.call('mim install mmdet'.split()) subprocess.call('pip install opencv-python-headless==4.5.5.64'.split()) subprocess.call('pip install git+https://github.com/cocodataset/panopticapi.git'.split()) import cv2 import numpy as np import gradio as gr from inference import inference_frame import os def analize_video(x): cap = cv2.VideoCapture(x) path = '/tmp/test/' os.makedirs(path, exist_ok=True) videos = len(os.listdir(path)) path = f'{path}{videos}' os.makedirs(path, exist_ok=True) outname = f'{path}_processed.mp4' #out = cv2.VideoWriter(outname,cv2.VideoWriter_fourcc(*'h264'), 20.0, (640,480)) counter = 0 while(cap.isOpened()): ret, frame = cap.read() if ret==True: name = os.path.join(path,f'{counter:05d}.png') frame = inference_frame(frame) # write the flipped frame cv2.imwrite(name, frame) counter +=1 else: break # Release everything if job is finished print(path) os.system(f'''ffmpeg -framerate 20 -pattern_type glob -i '{path}/*.png' -c:v libx264 -pix_fmt yuv420p {outname}''') return outname with gr.Blocks(title='Shark Patrol',theme=gr.themes.Soft(),live=True,) as demo: gr.Markdown("Initial DEMO.") with gr.Tab("Shark Detector"): with gr.Row(): video_input = gr.Video(source='upload',include_audio=False) #video_input.style(witdh='50%',height='50%') video_output = gr.Video() #video_output.style(witdh='50%',height='50%') video_button = gr.Button("Analyze") with gr.Accordion("Open for More!"): gr.Markdown("Place holder for detection") video_button.click(analize_video, inputs=video_input, outputs=video_output) demo.queue() demo.launch(share=True,width='40%',auth=(os.environ.get('SHARK_USERNAME'), os.environ.get('SHARK_PASSWORD')))