From 824c00abfa923b58d82e23615ce7c18db3ca152f Mon Sep 17 00:00:00 2001 From: Théo de la Hogue Date: Wed, 20 Apr 2022 14:37:42 +0200 Subject: Adding dimension information to aruco camera calibration data. --- src/argaze/ArUcoMarkers/ArUcoCamera.py | 15 ++++++++++----- src/argaze/utils/calibrate_tobii_camera.py | 10 +++++----- src/argaze/utils/export_calibration_board.py | 4 ++-- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/argaze/ArUcoMarkers/ArUcoCamera.py b/src/argaze/ArUcoMarkers/ArUcoCamera.py index 3871d77..6aa602c 100644 --- a/src/argaze/ArUcoMarkers/ArUcoCamera.py +++ b/src/argaze/ArUcoMarkers/ArUcoCamera.py @@ -12,9 +12,12 @@ class ArUcoCamera(): def __init__(self): """Define optical parameters.""" - self.__rms = 0 # root mean square error - self.__K = [] # camera matrix (focal lengths and principal point) - self.__D = [] # distortion coefficients + self.__rms = 0 # root mean square error + + self.__dimensions = [0, 0] # dimensions of frame where to apply optical parameters (in pixel) + + self.__K = [] # camera matrix (focal lengths and principal point) + self.__D = [] # distortion coefficients # define calibration data self.__corners_set_number = 0 @@ -32,13 +35,14 @@ class ArUcoCamera(): calibration_data = json.load(calibration_file) self.__rms = calibration_data['rms'] + self.__dimensions = calibration_data['dimensions'] self.__K = numpy.asarray(calibration_data['camera matrix']) self.__D = numpy.asarray(calibration_data['distortion coefficients']) def save_calibration_file(self, camera_calibration_filepath): """Save optical parameters into .json file.""" - calibration_data = {'rms': self.__rms, 'camera matrix': self.__K.tolist(), 'distortion coefficients': self.__D.tolist()} + calibration_data = {'rms': self.__rms, 'dimensions': self.__dimensions, 'camera matrix': self.__K.tolist(), 'distortion coefficients': self.__D.tolist()} with open(camera_calibration_filepath, 'w', encoding='utf-8') as calibration_file: @@ -61,7 +65,8 @@ class ArUcoCamera(): if self.__corners_set_number > 0: - self.__rms, self.__K, self.__D, r, t = aruco.calibrateCameraCharuco(self.__corners_set, self.__corners_set_ids, board.get_model(), [frame_width, frame_height], None, None) + self.__dimensions = [frame_width, frame_height] + self.__rms, self.__K, self.__D, r, t = aruco.calibrateCameraCharuco(self.__corners_set, self.__corners_set_ids, board.get_model(), self.__dimensions, None, None) def reset_calibration_data(self): """Clear all calibration data.""" diff --git a/src/argaze/utils/calibrate_tobii_camera.py b/src/argaze/utils/calibrate_tobii_camera.py index cb4c792..61fc56c 100644 --- a/src/argaze/utils/calibrate_tobii_camera.py +++ b/src/argaze/utils/calibrate_tobii_camera.py @@ -29,13 +29,15 @@ def main(): parser.add_argument('square_size', metavar='SQUARE_SIZE', type=float, default=5, help='square size (cm)') parser.add_argument('marker_size', metavar='MARKER_SIZE', type=float, default=3, help='marker size (cm)') parser.add_argument('-t', '--tobii_ip', metavar='TOBII_IP', type=str, default='192.168.1.10', help='tobii glasses ip') - parser.add_argument('-o', '--output', metavar='OUT', type=str, default='.', help='destination filepath') - parser.add_argument('-d', '--dictionary', metavar='DICT', type=str, default='DICT_4X4_50', help='aruco marker dictionnary') + parser.add_argument('-o', '--output', metavar='OUT', type=str, default='camera.json', help='destination filepath') + parser.add_argument('-d', '--dictionary', metavar='DICT', type=str, default='DICT_ARUCO_ORIGINAL', help='aruco marker dictionnary (DICT_4X4_50, DICT_4X4_100, DICT_4X4_250, DICT_4X4_1000, DICT_5X5_50, DICT_5X5_100, DICT_5X5_250, DICT_5X5_1000, DICT_6X6_50, DICT_6X6_100, DICT_6X6_250, DICT_6X6_1000, DICT_7X7_50, DICT_7X7_100, DICT_7X7_250, DICT_7X7_1000, DICT_ARUCO_ORIGINAL,DICT_APRILTAG_16h5, DICT_APRILTAG_25h9, DICT_APRILTAG_36h10, DICT_APRILTAG_36h11)') args = parser.parse_args() # Create tobii controller tobii_controller = TobiiController.TobiiController(args.tobii_ip, 'myProject', 'mySelf') + tobii_controller.set_video_freq_25() + # Enable tobii video stream tobii_video_stream = tobii_controller.enable_video_stream() @@ -54,9 +56,6 @@ def main(): print("Camera calibration starts") print("Waiting for calibration board...") - frame_width = 0 - frame_height = 0 - expected_markers_number = aruco_board.get_markers_number() expected_corners_number = aruco_board.get_corners_number() @@ -108,6 +107,7 @@ def main(): print('\nCalibration succeeded!') print(f'\nRMS:\n{aruco_camera.get_rms()}') + print(f'\nDimensions:\n{video_frame.width}x{video_frame.height}') print(f'\nCamera matrix:\n{aruco_camera.get_K()}') print(f'\nDistortion coefficients:\n{aruco_camera.get_D()}') diff --git a/src/argaze/utils/export_calibration_board.py b/src/argaze/utils/export_calibration_board.py index 2bcdef2..6d925bd 100644 --- a/src/argaze/utils/export_calibration_board.py +++ b/src/argaze/utils/export_calibration_board.py @@ -13,9 +13,9 @@ def main(): parser.add_argument('columns', metavar='COLS_NUMBER', type=int, default=7, help='number of columns') parser.add_argument('rows', metavar='ROWS_NUMBER', type=int, default=5, help='number of rows') parser.add_argument('square_size', metavar='SQUARE_SIZE', type=int, default=5, help='square size (cm)') - parser.add_argument('marker_size', metavar='MARKER_SIZE', type=int, default=5, help='marker size (cm)') + parser.add_argument('marker_size', metavar='MARKER_SIZE', type=int, default=3, help='marker size (cm)') parser.add_argument('-o', '--output', metavar='OUT', type=str, default='.', help='destination path') - parser.add_argument('-d', '--dictionary', metavar='DICT', type=str, default='DICT_4X4_50', help='aruco marker dictionnary') + parser.add_argument('-d', '--dictionary', metavar='DICT', type=str, default='DICT_ARUCO_ORIGINAL', help='aruco marker dictionnary (DICT_4X4_50, DICT_4X4_100, DICT_4X4_250, DICT_4X4_1000, DICT_5X5_50, DICT_5X5_100, DICT_5X5_250, DICT_5X5_1000, DICT_6X6_50, DICT_6X6_100, DICT_6X6_250, DICT_6X6_1000, DICT_7X7_50, DICT_7X7_100, DICT_7X7_250, DICT_7X7_1000, DICT_ARUCO_ORIGINAL,DICT_APRILTAG_16h5, DICT_APRILTAG_25h9, DICT_APRILTAG_36h10, DICT_APRILTAG_36h11)') parser.add_argument('-r', '--resolution', metavar='RES', type=int, default=50, help='picture resolution in dpi') args = parser.parse_args() -- cgit v1.1