Og2 commited on
Commit
e68869f
·
verified ·
1 Parent(s): cdcbc66

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +37 -27
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) -> List[dict]:
506
  try:
507
- # Récupérer l'URL du fichier vidéo dans le dataset
508
- # https://huggingface.co/datasets/Og2/myDataSet/blob/main/dataset/CNFT2Toulouse.mp4
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="Video not found in the dataset")
517
-
518
- # Charger la vidéo depuis la réponse
519
  video_bytes = io.BytesIO(response.content)
520
- cap = cv2.VideoCapture(video_bytes)
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 le frame BGR en RGB pour Pillow
532
  frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
533
- img = Image.fromarray(frame_rgb)
534
-
535
- # Sauvegarder l'image en format PNG dans un buffer
 
 
536
  img_byte_arr = io.BytesIO()
537
  img.save(img_byte_arr, format="PNG")
538
  img_byte_arr.seek(0)
539
-
540
- # Ajouter l'image à la liste des frames avec une URL temporaire ou base64
541
- frame_data = {
542
- "frame_index": i,
543
- "image": img_byte_arr.getvalue().encode("base64").decode("utf-8") # image encodée en base64
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"Failed to retrieve video frames: {str(e)}")
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