Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -501,56 +501,66 @@ async def list_videos():
|
|
501 |
except Exception as e:
|
502 |
raise HTTPException(status_code=500, detail=f"Failed to fetch videos: {str(e)}")
|
503 |
|
|
|
504 |
@app.get("/get-video-frames/")
|
505 |
-
async def get_video_frames(file_name: str) ->
|
506 |
try:
|
507 |
-
#
|
508 |
-
|
509 |
-
video_url = f"https://huggingface.co/datasets/{DATASET_REPO}/blob/main/dataset/{file_name}"
|
510 |
|
511 |
# Télécharger la vidéo
|
512 |
headers = {"Authorization": f"Bearer {HF_TOKEN}"}
|
513 |
response = requests.get(video_url, headers=headers)
|
514 |
-
|
515 |
if response.status_code != 200:
|
516 |
-
raise HTTPException(status_code=404, detail="
|
517 |
-
|
518 |
-
# Charger la vidéo
|
519 |
video_bytes = io.BytesIO(response.content)
|
520 |
-
|
521 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
522 |
# Liste pour stocker les frames extraites
|
523 |
frames = []
|
|
|
524 |
|
525 |
# Extraire les 8 premières frames
|
526 |
for i in range(8):
|
527 |
ret, frame = cap.read()
|
528 |
if not ret:
|
529 |
-
break
|
530 |
-
|
531 |
-
# Convertir
|
532 |
frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
|
533 |
-
|
534 |
-
|
535 |
-
|
|
|
|
|
536 |
img_byte_arr = io.BytesIO()
|
537 |
img.save(img_byte_arr, format="PNG")
|
538 |
img_byte_arr.seek(0)
|
539 |
-
|
540 |
-
#
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
}
|
545 |
-
frames.append(frame_data)
|
546 |
|
547 |
cap.release()
|
548 |
|
549 |
-
# Retourner les frames extraites
|
550 |
return {"status": "success", "frames": frames}
|
551 |
|
552 |
except Exception as e:
|
553 |
-
raise HTTPException(status_code=500, detail=f"
|
554 |
-
|
555 |
-
|
556 |
|
|
|
501 |
except Exception as e:
|
502 |
raise HTTPException(status_code=500, detail=f"Failed to fetch videos: {str(e)}")
|
503 |
|
504 |
+
|
505 |
@app.get("/get-video-frames/")
|
506 |
+
async def get_video_frames(file_name: str) -> dict:
|
507 |
try:
|
508 |
+
# URL du fichier vidéo dans le dataset
|
509 |
+
video_url = f"https://huggingface.co/datasets/{DATASET_REPO}/resolve/main/dataset/{file_name}"
|
|
|
510 |
|
511 |
# Télécharger la vidéo
|
512 |
headers = {"Authorization": f"Bearer {HF_TOKEN}"}
|
513 |
response = requests.get(video_url, headers=headers)
|
514 |
+
|
515 |
if response.status_code != 200:
|
516 |
+
raise HTTPException(status_code=404, detail="Vidéo introuvable dans le dataset")
|
517 |
+
|
518 |
+
# Charger la vidéo en mémoire
|
519 |
video_bytes = io.BytesIO(response.content)
|
520 |
+
|
521 |
+
# Écriture dans un fichier temporaire pour OpenCV (nécessaire car OpenCV ne lit pas directement depuis un buffer)
|
522 |
+
temp_video_path = "/tmp/temp_video.mp4"
|
523 |
+
with open(temp_video_path, "wb") as f:
|
524 |
+
f.write(video_bytes.getvalue())
|
525 |
+
|
526 |
+
# Ouvrir la vidéo avec OpenCV
|
527 |
+
cap = cv2.VideoCapture(temp_video_path)
|
528 |
+
|
529 |
+
# Vérifier si la vidéo a été chargée
|
530 |
+
if not cap.isOpened():
|
531 |
+
raise HTTPException(status_code=500, detail="Impossible de charger la vidéo")
|
532 |
+
|
533 |
# Liste pour stocker les frames extraites
|
534 |
frames = []
|
535 |
+
frame_size = (128, 128) # Nouvelle taille des images
|
536 |
|
537 |
# Extraire les 8 premières frames
|
538 |
for i in range(8):
|
539 |
ret, frame = cap.read()
|
540 |
if not ret:
|
541 |
+
break # Arrêter si on atteint la fin de la vidéo
|
542 |
+
|
543 |
+
# Convertir la frame BGR en RGB (pour compatibilité avec PIL)
|
544 |
frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
|
545 |
+
|
546 |
+
# Redimensionner la frame en 128x128 pixels
|
547 |
+
img = Image.fromarray(frame_rgb).resize(frame_size)
|
548 |
+
|
549 |
+
# Sauvegarder l'image dans un buffer
|
550 |
img_byte_arr = io.BytesIO()
|
551 |
img.save(img_byte_arr, format="PNG")
|
552 |
img_byte_arr.seek(0)
|
553 |
+
|
554 |
+
# Encoder l'image en base64
|
555 |
+
img_base64 = base64.b64encode(img_byte_arr.getvalue()).decode("utf-8")
|
556 |
+
|
557 |
+
# Ajouter l'image encodée à la liste des frames
|
558 |
+
frames.append({"frame_index": i, "image": img_base64})
|
|
|
559 |
|
560 |
cap.release()
|
561 |
|
|
|
562 |
return {"status": "success", "frames": frames}
|
563 |
|
564 |
except Exception as e:
|
565 |
+
raise HTTPException(status_code=500, detail=f"Erreur lors de l'extraction des frames : {str(e)}")
|
|
|
|
|
566 |
|