2nzi's picture
update app
16c970a verified
raw
history blame
2.87 kB
import os
import tempfile
from fastapi import HTTPException
from scenedetect import detect, ContentDetector, SceneManager, open_video, scene_manager
class SceneDetector:
def __init__(self, min_scene_duration: float = 1.5, threshold: int = 30):
self.min_scene_duration = min_scene_duration
self.threshold = threshold
def detect_scenes(self, video_path: str) -> dict:
"""Pipeline complet de détection et de filtrage des scènes."""
print(f"\n[DEBUG] Starting scene detection on video: {video_path}")
print(f"[DEBUG] Video file exists: {os.path.exists(video_path)}")
try:
# Ouvrir la vidéo
video = open_video(video_path)
# Configurer le détecteur de scènes
scene_manager = SceneManager()
scene_manager.add_detector(
ContentDetector(threshold=self.threshold)
)
# Détecter les scènes
scene_manager.detect_scenes(video)
scenes = scene_manager.get_scene_list()
# Formater les scènes
formatted_scenes = []
for scene in scenes:
start_time = scene[0].get_timecode()
end_time = scene[1].get_timecode()
duration = scene[1].get_seconds() - scene[0].get_seconds()
if duration >= self.min_scene_duration:
formatted_scenes.append({
"start": str(start_time),
"end": str(end_time),
"recognized_sport": "", # Sera rempli par le classificateur
"confidence": None # Sera rempli par le classificateur
})
result = {
"total_scenes": len(formatted_scenes),
"scenes": formatted_scenes
}
# Debug logs
print("\n[DEBUG] Scene Detection Results:")
print(f"Total scenes detected: {result['total_scenes']}")
if result['scenes']:
print("\nFirst 3 scenes details:")
for i, scene in enumerate(result['scenes'][:3]):
print(f"\nScene {i+1}:")
print(f" Start: {scene['start']}")
print(f" End: {scene['end']}")
print(f" Sport: {scene['recognized_sport']}")
print(f" Confidence: {scene['confidence']}")
else:
print("No scenes detected!")
print("\n")
return result
except Exception as e:
print(f"[ERROR] Scene detection failed: {str(e)}")
raise HTTPException(status_code=500, detail=f"Scene detection failed: {str(e)}")