Spaces:
Sleeping
Sleeping
import gradio as gr | |
import os | |
# No longer need tempfile or time here, Gradio manages the input temp file | |
from Fight_detec_func import fight_detec | |
from objec_detect_yolo import detection | |
import traceback # For better error logging | |
def analyze_video(video_filepath): # RENAMED parameter to reflect it's a string path | |
if video_filepath is None: | |
return {"Error": "No video file uploaded."} | |
# video_filepath *is* the path to the temporary file created by Gradio | |
print(f"Processing video: {video_filepath}") | |
try: | |
# Directly use the filepath provided by Gradio for analysis | |
# No need to copy the file again. | |
fight_status, _ = fight_detec(video_filepath, debug=False) | |
detected_objects_set, annotated_video_path = detection(video_filepath) # This function saves its own output | |
# Format results | |
detected_objects_list = sorted(list(detected_objects_set)) | |
print(f"Fight Status: {fight_status}") | |
print(f"Detected Objects: {detected_objects_list}") | |
# annotated_video_path points to the video saved by detection(), | |
# but we are not returning it to the user via JSON here. | |
# It exists within the Space's filesystem in the 'results' folder. | |
results = { | |
"Fight Detection": fight_status, | |
"Detected Objects": detected_objects_list | |
} | |
except Exception as e: | |
print(f"Error during processing video: {video_filepath}") | |
print(f"Error type: {type(e).__name__}") | |
print(f"Error message: {e}") | |
print("Traceback:") | |
traceback.print_exc() # Print detailed traceback to Space logs | |
results = {"Error": f"Processing failed. Check Space logs for details. Error: {str(e)}"} | |
# No explicit cleanup needed for video_filepath, Gradio handles its temporary input file. | |
# Cleanup for files created by detection() (like annotated_video_path) | |
# would ideally happen within that function or rely on the Space's ephemeral nature. | |
return results | |
# Interface Definition (remains the same) | |
iface = gr.Interface( | |
fn=analyze_video, | |
inputs=gr.Video(label="Upload Video"), | |
outputs=gr.JSON(label="Detection Results"), | |
title="Fight and Object Detection Analysis", | |
description="Upload a video (< 1 min recommended) to detect potential fights and specific objects (Fire, Gun, Knife, Smoke, License_Plate). Results appear as JSON.", | |
allow_flagging='never', | |
examples=[ | |
# Add paths to example videos if you upload them to the HF repo | |
# e.g., ["example_fight.mp4"], ["example_normal_gun.mp4"] | |
] | |
) | |
# Launch the interface | |
if __name__ == "__main__": | |
iface.launch() | |