From b85dd6f852cc56425024a08f0dc91a9a48996315 Mon Sep 17 00:00:00 2001
From: SP Mohanty <spmohanty91@gmail.com>
Date: Tue, 30 Jul 2019 01:10:12 +0200
Subject: [PATCH] Upload and save reference to a randomly chosen static frame

---
 flatland/evaluators/aicrowd_helpers.py | 21 +++++++++++++++++++++
 flatland/evaluators/service.py         |  5 +++++
 2 files changed, 26 insertions(+)

diff --git a/flatland/evaluators/aicrowd_helpers.py b/flatland/evaluators/aicrowd_helpers.py
index f368c4cc..662ab179 100644
--- a/flatland/evaluators/aicrowd_helpers.py
+++ b/flatland/evaluators/aicrowd_helpers.py
@@ -2,6 +2,8 @@ import os
 import boto3
 import uuid
 import subprocess
+import glob
+import random
 
 ###############################################################
 # Expected Env Variables
@@ -44,6 +46,25 @@ def is_grading():
         os.getenv("AICROWD_IS_GRADING", False)
 
 
+def upload_random_frame_to_s3(frames_folder):
+    all_frames = glob.glob(os.path.join(frames_folder, "*.png"))
+    random_frame = random.choice(all_frames)
+    s3 = get_boto_client()
+    if not S3_UPLOAD_PATH_TEMPLATE:
+        raise Exception("S3_UPLOAD_PATH_TEMPLATE not provided...")
+    if not S3_BUCKET:
+        raise Exception("S3_BUCKET not provided...")
+    
+    image_target_key = S3_UPLOAD_PATH_TEMPLATE.replace(".mp4", ".png").format(str(uuid.uuid4()))
+    s3.put_object(
+        ACL="public-read",
+        Bucket=S3_BUCKET,
+        Key=image_target_key,
+        Body=open(random_frame, 'rb')
+    )
+    return image_target_key
+
+
 def upload_to_s3(localpath):
     s3 = get_boto_client()
     if not S3_UPLOAD_PATH_TEMPLATE:
diff --git a/flatland/evaluators/service.py b/flatland/evaluators/service.py
index e6616116..21a5e63f 100644
--- a/flatland/evaluators/service.py
+++ b/flatland/evaluators/service.py
@@ -483,9 +483,14 @@ class FlatlandRemoteEvaluationService:
                 video_thumb_s3_key = aicrowd_helpers.upload_to_s3(
                     video_thumb_output_path
                 )
+                static_thumbnail_s3_key = aicrowd_helpers.upload_random_frame_to_s3(
+                    self.vizualization_folder_name
+                )
                 self.evaluation_state["score"]["media_content_type"] = "video/mp4"
                 self.evaluation_state["score"]["media_large"] = video_s3_key
                 self.evaluation_state["score"]["media_thumbnail"] = video_thumb_s3_key
+
+                self.evaluation_state["meta"]["static_media_frame"] = static_thumbnail_s3_key
             else:
                 print("[WARNING] Ignoring uploading of video to S3")
 
-- 
GitLab