diff --git a/Dockerfile b/Dockerfile index d2bbff1924..ff116a0b0f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -47,6 +47,10 @@ RUN wget http://bitbucket.org/eigen/eigen/get/3.3.7.tar.gz RUN tar -xzf 3.3.7.tar.gz RUN mv eigen-eigen-323c052e1731 /usr/local/include/eigen +# python +RUN apt-get install -y python3-pip +RUN pip3 install PyYAML + # orb-slam2 COPY Thirdparty ${BASE_DIR}/orbslam2/Thirdparty COPY Vocabulary ${BASE_DIR}/orbslam2/Vocabulary diff --git a/python/generate_params_file.py b/python/generate_params_file.py new file mode 100644 index 0000000000..a9fb6cad60 --- /dev/null +++ b/python/generate_params_file.py @@ -0,0 +1,51 @@ +""" +helper script to generate params file from template and camera config +""" + +# lib +import json +import yaml +import argparse +import math + + +def main(): + args = parse_arguments() + + # load camera config and template + with open(args['camera']) as file: + camera_config = json.load(file) + with open(args['template']) as file: + template_params = yaml.safe_load(file) + + # calculate new params + params = template_params.copy() + params['Camera.cx'] = camera_config['stream_dimensions']['x'] / 2.0 + params['Camera.cy'] = camera_config['stream_dimensions']['y'] / 2.0 + params['Camera.fx'] = ( + camera_config['stream_dimensions']['x'] + / (2.0 * math.tan(math.radians(0.5 * camera_config['fov']))) + ) + params['Camera.fy'] = params['Camera.fx'] + + # write update params to output file + with open(args['output'], 'w') as file: + yaml.dump(params, file) + + +def parse_arguments(): + """ + helper function to parse CLI args + + :return: + """ + parser = argparse.ArgumentParser() + parser.add_argument('--camera', '-c', help='path to camera config.json', required=True) + parser.add_argument('--template', '-t', help='path to template parameters', required=True) + parser.add_argument('--output', '-o', help='path to generated params file', required=True) + + return vars(parser.parse_args()) + + +if __name__ == '__main__': + main()