Og2 commited on
Commit
35e9aa8
·
verified ·
1 Parent(s): 928f67f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +48 -0
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