Og2 commited on
Commit
0920000
·
verified ·
1 Parent(s): ed016d6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +46 -1
app.py CHANGED
@@ -263,6 +263,51 @@ async def predict_action(uuid: str):
263
  async def run_video_processing(file_path: str):
264
  # Cette fonction va utiliser l'exécuteur pour éviter de bloquer le thread principal
265
  loop = asyncio.get_event_loop()
266
- result = await loop.run_in_executor(executor, predict_action, file_path)
267
  # Vous pouvez ici stocker ou traiter les résultats
268
  print(result) # ou enregistrez dans une base de données, etc.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
263
  async def run_video_processing(file_path: str):
264
  # Cette fonction va utiliser l'exécuteur pour éviter de bloquer le thread principal
265
  loop = asyncio.get_event_loop()
266
+ result = await loop.run_in_executor(executor, predict_video, file_path)
267
  # Vous pouvez ici stocker ou traiter les résultats
268
  print(result) # ou enregistrez dans une base de données, etc.
269
+
270
+
271
+ async def predict_video(video):
272
+ print("##### predict_video started #####")
273
+
274
+ # Charger les frames de la vidéo
275
+ frames = load_video(video, offload_to_cpu=True)
276
+
277
+ # Découper les frames en petits segments de 8 frames
278
+ segment_size = MAX_SEQ_LENGTH
279
+ total_frames = len(frames)
280
+ segments = []
281
+
282
+ for i in range(0, total_frames, segment_size):
283
+ # Découper un segment de 8 frames (ou moins si c'est la fin de la vidéo)
284
+ segment = frames[i:i+segment_size]
285
+ segments.append((i, segment)) # Conserver l'index du début du segment et le segment de frames
286
+
287
+ # Dictionnaire pour stocker les résultats
288
+ results = []
289
+
290
+ # Analyser chaque segment de 8 frames
291
+ for start_idx, segment in segments:
292
+ frame_features = prepare_single_video(segment)
293
+ probabilities = model.predict(frame_features)[0]
294
+
295
+ # Obtenir le top 5 des classes les plus probables
296
+ top_5_indices = np.argsort(probabilities)[::-1][:5]
297
+ top_5_classes = {class_labels[i]: float(probabilities[i]) for i in top_5_indices}
298
+
299
+ # Ajouter les informations du segment dans les résultats
300
+ result = {
301
+ "start_frame": start_idx,
302
+ "end_frame": min(start_idx + segment_size - 1, total_frames - 1), # Assurer que la frame finale n'excède pas le nombre total de frames
303
+ "top_5": top_5_classes
304
+ }
305
+ results.append(result)
306
+
307
+ # Sauvegarder le résultat dans un fichier JSON
308
+ output_file = "result.json"
309
+ with open(output_file, "w") as f:
310
+ json.dump(results, f)
311
+
312
+ return results
313
+