Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -566,33 +566,51 @@ async def extract_and_store_frames(file_name: str = Form(...)):
|
|
566 |
@app.get("/get-video-frames/")
|
567 |
async def get_video_frames(file_name: str, frame_id: int) -> dict:
|
568 |
try:
|
569 |
-
|
570 |
-
|
571 |
-
|
|
|
572 |
headers = {"Authorization": f"Bearer {HF_TOKEN}"}
|
573 |
-
print(HF_TOKEN)
|
574 |
-
response = requests.head(image_url, headers=headers)
|
575 |
-
|
576 |
-
if response.status_code != 200:
|
577 |
-
raise HTTPException(status_code=404, detail="Image introuvable dans le dataset")
|
578 |
|
579 |
-
|
580 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
581 |
csv_response = requests.get(csv_url, headers=headers)
|
582 |
df_annotations = None
|
583 |
-
|
584 |
if csv_response.status_code == 200:
|
585 |
csv_bytes = io.BytesIO(csv_response.content)
|
586 |
df_annotations = pd.read_csv(csv_bytes)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
587 |
|
588 |
-
|
589 |
-
if df_annotations is not None and frame_id in df_annotations["frame"].values:
|
590 |
-
row = df_annotations[df_annotations["frame"] == frame_id].iloc[0]
|
591 |
-
class_label, player = row.get("class", None), row.get("player", None)
|
592 |
-
|
593 |
-
return {"status": "success", "frame_index": frame_id, "image_url": image_url, "class": class_label, "player": player}
|
594 |
except Exception as e:
|
595 |
-
raise HTTPException(status_code=500, detail=f"Erreur lors de la récupération
|
|
|
596 |
|
597 |
|
598 |
|
|
|
566 |
@app.get("/get-video-frames/")
|
567 |
async def get_video_frames(file_name: str, frame_id: int) -> dict:
|
568 |
try:
|
569 |
+
frames = []
|
570 |
+
csv_filename = Path(file_name).stem + ".csv"
|
571 |
+
csv_url = f"https://huggingface.co/datasets/{DATASET_REPO}/resolve/main/csv/{csv_filename}"
|
572 |
+
print(csv_url)
|
573 |
headers = {"Authorization": f"Bearer {HF_TOKEN}"}
|
|
|
|
|
|
|
|
|
|
|
574 |
|
575 |
+
# Récupérer la liste des fichiers dans le dossier frames/{file_name}/
|
576 |
+
dataset_url = f"https://huggingface.co/api/datasets/{DATASET_REPO}/resolve/main/frames/{Path(file_name).stem}/"
|
577 |
+
print(dataset_url)
|
578 |
+
file_list_response = requests.get(dataset_url, headers=headers)
|
579 |
+
available_frames = set()
|
580 |
+
|
581 |
+
if file_list_response.status_code == 200:
|
582 |
+
file_list = file_list_response.json()
|
583 |
+
available_frames = {file["path"] for file in file_list}
|
584 |
+
|
585 |
+
# Charger le CSV des annotations si disponible
|
586 |
csv_response = requests.get(csv_url, headers=headers)
|
587 |
df_annotations = None
|
588 |
+
|
589 |
if csv_response.status_code == 200:
|
590 |
csv_bytes = io.BytesIO(csv_response.content)
|
591 |
df_annotations = pd.read_csv(csv_bytes)
|
592 |
+
|
593 |
+
for i in range(frame_id, frame_id + 30):
|
594 |
+
frame_filename = f"frames/{Path(file_name).stem}/{Path(file_name).stem}_{i}.png"
|
595 |
+
if frame_filename not in available_frames:
|
596 |
+
continue
|
597 |
+
|
598 |
+
image_url = f"https://huggingface.co/datasets/{DATASET_REPO}/resolve/main/{frame_filename}"
|
599 |
+
class_label, player = None, None
|
600 |
+
|
601 |
+
if df_annotations is not None and i in df_annotations["frame"].values:
|
602 |
+
row = df_annotations[df_annotations["frame"] == i].iloc[0]
|
603 |
+
class_label, player = row.get("class", None), row.get("player", None)
|
604 |
+
|
605 |
+
frames.append({"frame_index": i, "image_url": image_url, "class": class_label, "player": player})
|
606 |
+
|
607 |
+
if not frames:
|
608 |
+
raise HTTPException(status_code=404, detail="Aucune image trouvée dans la plage demandée")
|
609 |
|
610 |
+
return {"status": "success", "frames": frames}
|
|
|
|
|
|
|
|
|
|
|
611 |
except Exception as e:
|
612 |
+
raise HTTPException(status_code=500, detail=f"Erreur lors de la récupération des images : {str(e)}")
|
613 |
+
|
614 |
|
615 |
|
616 |
|