EL GHAFRAOUI AYOUB
C
f33a600
@app.post("/upload/video")
async def upload_video(video: UploadFile = File(...)):
# Ensure the directory exists, create it if it doesn't
VIDEO_UPLOAD_DIR.mkdir(parents=True, exist_ok=True)
# Define the path where the video will be saved
video_path = VIDEO_UPLOAD_DIR / video.filename
# Open the video file in binary write mode and write the video data
with open(video_path, "wb") as buffer:
buffer.write(await video.read())
results = onnx_model(video_path)
# Process tracking results
processed_results = []
unique_class_ids = set() # Set to store unique class IDs encountered
for result in results:
# Check if track method outputs are available and then process each detection
if hasattr(result, 'boxes') and len(result.boxes):
tracked_detections = result.boxes # Get the detections with tracking
for det in tracked_detections:
cls_id = int(det.cls) # Extract class ID
# Check if the class ID is already in the set
if cls_id not in unique_class_ids:
unique_class_ids.add(cls_id) # Add the class ID to the set
conf = float(det.conf) # Extract confidence score
xyxy = det.xyxy[0].tolist() # Extract bounding box coordinates
# Placeholder depth estimation using basic geometric principles
# Here, we assume the depth is inversely proportional to the area of the bounding box
# You can replace this with a more accurate depth estimation method if available
width = xyxy[2] - xyxy[0]
height = xyxy[3] - xyxy[1]
depth = 1000 / (width * height) # Placeholder depth calculation
# Get the class name from model.names
class_name = result.names[cls_id]
# Add extracted information to the processed results
processed_results.append({
"class_id": cls_id,
"class_name": class_name,
"confidence": conf,
# "track_id": track_id,
"bounding_box": xyxy
})
# Return the tracking results as JSON
return {"message": processed_results}