Spaces:
Running
Running
Rivalcoder
commited on
Commit
·
3d07c4d
1
Parent(s):
e59fdf7
New Try
Browse files
app.py
CHANGED
@@ -278,28 +278,45 @@ def process_video(video_path: str) -> Dict[str, Any]:
|
|
278 |
return {
|
279 |
"success": True,
|
280 |
"message": "No faces detected in video",
|
281 |
-
"results":
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
282 |
"error": None
|
283 |
}
|
284 |
|
285 |
-
#
|
286 |
-
|
287 |
for detection in largest_face_detections:
|
288 |
emotion = detection['emotion']
|
289 |
-
|
|
|
290 |
|
291 |
-
#
|
292 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
293 |
|
294 |
return {
|
295 |
"success": True,
|
296 |
"message": "Video processed successfully",
|
297 |
"results": {
|
298 |
-
"
|
|
|
|
|
299 |
"summary": {
|
300 |
"total_frames": total_frames,
|
301 |
"total_detections": len(largest_face_detections),
|
302 |
-
"emotions_count":
|
303 |
"dominant_emotion": dominant_emotion
|
304 |
}
|
305 |
},
|
@@ -317,14 +334,22 @@ def gradio_analyze_video(video_path: str):
|
|
317 |
summary = result["results"]["summary"]
|
318 |
detections = result["results"]["detections"]
|
319 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
320 |
output = {
|
321 |
-
"
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
"emotion_distribution": summary["emotions_count"]
|
326 |
-
},
|
327 |
-
"sample_detections": detections[:5] # Show first 5 detections
|
328 |
}
|
329 |
return output
|
330 |
|
@@ -404,7 +429,7 @@ async def root():
|
|
404 |
"""
|
405 |
|
406 |
# Mount Gradio app to FastAPI
|
407 |
-
app = gr.mount_gradio_app(app, demo, path="/
|
408 |
|
409 |
if __name__ == "__main__":
|
410 |
import uvicorn
|
|
|
278 |
return {
|
279 |
"success": True,
|
280 |
"message": "No faces detected in video",
|
281 |
+
"results": {
|
282 |
+
"average_emotions": {},
|
283 |
+
"dominant_emotion": None,
|
284 |
+
"detections": [],
|
285 |
+
"summary": {
|
286 |
+
"total_frames": total_frames,
|
287 |
+
"total_detections": 0
|
288 |
+
}
|
289 |
+
},
|
290 |
"error": None
|
291 |
}
|
292 |
|
293 |
+
emotion_scores = {e: [] for e in emotions} # Initialize with all emotion types
|
294 |
+
|
295 |
for detection in largest_face_detections:
|
296 |
emotion = detection['emotion']
|
297 |
+
confidence = detection['confidence']
|
298 |
+
emotion_scores[emotion].append(confidence)
|
299 |
|
300 |
+
# Calculate summary statistics
|
301 |
+
average_emotions = {
|
302 |
+
e: sum(scores)/len(scores) if scores else 0
|
303 |
+
for e, scores in emotion_scores.items()
|
304 |
+
}
|
305 |
+
|
306 |
+
# Get dominant emotion based on average confidence
|
307 |
+
dominant_emotion = max(average_emotions.items(), key=lambda x: x[1])[0]
|
308 |
|
309 |
return {
|
310 |
"success": True,
|
311 |
"message": "Video processed successfully",
|
312 |
"results": {
|
313 |
+
"average_emotions": average_emotions,
|
314 |
+
"dominant_emotion": dominant_emotion,
|
315 |
+
"detections": largest_face_detections, # Optional: include all detections
|
316 |
"summary": {
|
317 |
"total_frames": total_frames,
|
318 |
"total_detections": len(largest_face_detections),
|
319 |
+
"emotions_count": {e: len(s) for e, s in emotion_scores.items()},
|
320 |
"dominant_emotion": dominant_emotion
|
321 |
}
|
322 |
},
|
|
|
334 |
summary = result["results"]["summary"]
|
335 |
detections = result["results"]["detections"]
|
336 |
|
337 |
+
# output = {
|
338 |
+
# "summary": {
|
339 |
+
# "total_frames": summary["total_frames"],
|
340 |
+
# "faces_detected": summary["total_detections"],
|
341 |
+
# "dominant_emotion": summary["dominant_emotion"],
|
342 |
+
# "emotion_distribution": summary["emotions_count"]
|
343 |
+
# },
|
344 |
+
# "sample_detections": detections[:5] # Show first 5 detections
|
345 |
+
# }
|
346 |
+
# return output
|
347 |
+
|
348 |
output = {
|
349 |
+
"average_emotions": result["results"]["average_emotions"],
|
350 |
+
"dominant_emotion": result["results"]["dominant_emotion"],
|
351 |
+
"frames_analyzed": result["results"]["summary"]["total_frames"],
|
352 |
+
"faces_detected": result["results"]["summary"]["total_detections"]
|
|
|
|
|
|
|
353 |
}
|
354 |
return output
|
355 |
|
|
|
429 |
"""
|
430 |
|
431 |
# Mount Gradio app to FastAPI
|
432 |
+
app = gr.mount_gradio_app(app, demo, path="/")
|
433 |
|
434 |
if __name__ == "__main__":
|
435 |
import uvicorn
|