Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -500,7 +500,55 @@ async def list_videos():
|
|
500 |
except Exception as e:
|
501 |
raise HTTPException(status_code=500, detail=f"Failed to fetch videos: {str(e)}")
|
502 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
503 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
504 |
|
505 |
|
506 |
|
|
|
500 |
except Exception as e:
|
501 |
raise HTTPException(status_code=500, detail=f"Failed to fetch videos: {str(e)}")
|
502 |
|
503 |
+
@app.get("/get-video-frames/{file_name}/")
|
504 |
+
async def get_video_frames(file_name: str) -> List[dict]:
|
505 |
+
try:
|
506 |
+
# Récupérer l'URL du fichier vidéo dans le dataset
|
507 |
+
video_url = f"https://huggingface.co/datasets/{DATASET_REPO}/blob/main/{file_name}"
|
508 |
+
|
509 |
+
# Télécharger la vidéo
|
510 |
+
headers = {"Authorization": f"Bearer {HF_TOKEN}"}
|
511 |
+
response = requests.get(video_url, headers=headers)
|
512 |
+
|
513 |
+
if response.status_code != 200:
|
514 |
+
raise HTTPException(status_code=404, detail="Video not found in the dataset")
|
515 |
+
|
516 |
+
# Charger la vidéo depuis la réponse
|
517 |
+
video_bytes = io.BytesIO(response.content)
|
518 |
+
cap = cv2.VideoCapture(video_bytes)
|
519 |
+
|
520 |
+
# Liste pour stocker les frames extraites
|
521 |
+
frames = []
|
522 |
|
523 |
+
# Extraire les 8 premières frames
|
524 |
+
for i in range(8):
|
525 |
+
ret, frame = cap.read()
|
526 |
+
if not ret:
|
527 |
+
break
|
528 |
+
|
529 |
+
# Convertir le frame BGR en RGB pour Pillow
|
530 |
+
frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
|
531 |
+
img = Image.fromarray(frame_rgb)
|
532 |
+
|
533 |
+
# Sauvegarder l'image en format PNG dans un buffer
|
534 |
+
img_byte_arr = io.BytesIO()
|
535 |
+
img.save(img_byte_arr, format="PNG")
|
536 |
+
img_byte_arr.seek(0)
|
537 |
+
|
538 |
+
# Ajouter l'image à la liste des frames avec une URL temporaire ou base64
|
539 |
+
frame_data = {
|
540 |
+
"frame_index": i,
|
541 |
+
"image": img_byte_arr.getvalue().encode("base64").decode("utf-8") # image encodée en base64
|
542 |
+
}
|
543 |
+
frames.append(frame_data)
|
544 |
+
|
545 |
+
cap.release()
|
546 |
+
|
547 |
+
# Retourner les frames extraites
|
548 |
+
return {"status": "success", "frames": frames}
|
549 |
+
|
550 |
+
except Exception as e:
|
551 |
+
raise HTTPException(status_code=500, detail=f"Failed to retrieve video frames: {str(e)}")
|
552 |
|
553 |
|
554 |
|