diff --git a/flatland/evaluators/aicrowd_helpers.py b/flatland/evaluators/aicrowd_helpers.py index 2a4458c754b1384da0b0ad61ba034e9d68a2429b..6e300a266b8fb3030b7ef81c6d1f9ebcf6c3a321 100644 --- a/flatland/evaluators/aicrowd_helpers.py +++ b/flatland/evaluators/aicrowd_helpers.py @@ -55,7 +55,7 @@ def make_subprocess_call(command, shell=False): return result.returncode, stdout, stderr -def generate_movie_from_screenshot(frames_folder): +def generate_movie_from_frames(frames_folder): """ Expects the frames in the frames_folder folder and then use ffmpeg to generate the video @@ -66,9 +66,9 @@ def generate_movie_from_screenshot(frames_folder): frames_path = os.path.join(frames_folder, "flatland_frame_%04d.png") thumb_output_path = os.path.join(frames_folder, "out_thumb.mp4") return_code, output, output_err = make_subprocess_call( - "/usr/bin/ffmpeg -r 25 -start_number 0 -i " + + "ffmpeg -r 7 -start_number 0 -i " + frames_path + - " -c:v libx264 -vf fps=25 -pix_fmt yuv420p -s 320x240 " + + " -c:v libx264 -vf fps=7 -pix_fmt yuv420p -s 320x320 " + thumb_output_path ) if return_code != 0: @@ -79,9 +79,9 @@ def generate_movie_from_screenshot(frames_folder): frames_path = os.path.join(frames_folder, "flatland_frame_%04d.png") output_path = os.path.join(frames_folder, "out.mp4") return_code, output, output_err = make_subprocess_call( - "/usr/bin/ffmpeg -r 25 -start_number 0 -i " + + "ffmpeg -r 7 -start_number 0 -i " + frames_path + - " -c:v libx264 -vf fps=25 -pix_fmt yuv420p -s 320x240 " + + " -c:v libx264 -vf fps=7 -pix_fmt yuv420p -s 600x600 " + output_path ) if return_code != 0: diff --git a/flatland/evaluators/service.py b/flatland/evaluators/service.py index 281b8ef689b853c70abfd3bef3e1f7b23b7b35b8..2853d84c16b9d8fcf1094945745020faf52aefac 100644 --- a/flatland/evaluators/service.py +++ b/flatland/evaluators/service.py @@ -375,14 +375,29 @@ class FlatlandRemoteEvaluationService: to operate on all the test environments. """ ) + + mean_reward = np.mean(self.simulation_rewards) + mean_percentage_complete = np.mean(self.simulation_percentage_complete) + + # Generate the video + # + # Note, if you had depdency issues due to ffmpeg, you can + # install it by : + # + # conda install -c conda-forge x264 ffmpeg + + print("Generating Video from thumbnails...") + video_output_path, video_thumb_output_path = \ + aicrowd_helpers.generate_movie_from_frames( + self.vizualization_folder_name + ) + print("Videos : ", video_output_path, video_thumb_output_path) _command_response = {} _command_response['type'] = messages.FLATLAND_RL.ENV_SUBMIT_RESPONSE _payload = {} - _payload['mean_reward'] = np.mean(self.simulation_rewards) - _payload['mean_percentage_complete'] = \ - np.mean(self.simulation_percentage_complete) - + _payload['mean_reward'] = mean_reward + _payload['mean_percentage_complete'] = mean_percentage_complete _command_response['payload'] = _payload self.send_response(_command_response, command)