KillD00zer's picture
Update app.py
4c13dea verified
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()