43 import libmultisense
as lms
48 cal.K = intrinsics.getNode(
"M" + str(index)).mat()
49 cal.D = list(intrinsics.getNode(
"D" + str(index)).mat()[0])
50 cal.R = extrinsics.getNode(
"R" + str(index)).mat()
51 cal.P = extrinsics.getNode(
"P" + str(index)).mat()
54 cal.distortion_type = lms.DistortionType.PLUMBBOB
56 cal.distortion_type = lms.DistortionType.RATIONAL_POLYNOMIAL
58 cal.distortion_type = lms.DistortionType.NONE
62 def write_cal(intrinsics, extrinsics, index, camera_cal):
63 intrinsics.write(
"M" + str(index), np.array(camera_cal.K))
64 intrinsics.write(
"D" + str(index), np.array([camera_cal.D]))
65 extrinsics.write(
"P" + str(index), np.array(camera_cal.P))
66 extrinsics.write(
"R" + str(index), np.array(camera_cal.R))
69 channel_config = lms.ChannelConfig()
70 channel_config.ip_address = args.ip_address
71 channel_config.mtu = args.mtu
73 with lms.Channel.create(channel_config)
as channel:
75 print(
"Invalid channel")
78 calibration = channel.get_calibration()
81 print(
"Attempting to set the MultiSense calibration")
83 intrinsics = cv2.FileStorage(args.intrinsics, cv2.FILE_STORAGE_READ)
84 extrinsics = cv2.FileStorage(args.extrinsics, cv2.FILE_STORAGE_READ)
86 calibration.left =
read_cal(intrinsics, extrinsics, 1)
87 calibration.right =
read_cal(intrinsics, extrinsics, 2)
89 calibration.aux =
read_cal(intrinsics, extrinsics, 3)
91 if channel.set_calibration(calibration) != lms.Status.OK:
92 print(
"Unable to set the calibration")
95 print(
"Image calibration successfully updated")
97 if not args.disable_confirmation
and (os.path.exists(args.intrinsics)
or os.path.exists(args.extrinsics)):
98 print(
"One or both of the input file already exists\n")
99 res = input(
"Really overwrite these files? (y/n):")[0]
100 if res !=
'Y' and res !=
'y':
104 intrinsics = cv2.FileStorage(args.intrinsics, cv2.FILE_STORAGE_WRITE)
105 extrinsics = cv2.FileStorage(args.extrinsics, cv2.FILE_STORAGE_WRITE)
107 write_cal(intrinsics, extrinsics, 1, calibration.left)
108 write_cal(intrinsics, extrinsics, 2, calibration.right)
110 write_cal(intrinsics, extrinsics, 3, calibration.aux)
112 if __name__ ==
'__main__':
113 parser = argparse.ArgumentParser(
"LibMultiSense save image utility")
114 parser.add_argument(
"-a",
"--ip_address", default=
"10.66.171.21", help=
"The IPv4 address of the MultiSense.")
115 parser.add_argument(
"-m",
"--mtu", type=int, default=1500, help=
"The MTU to use to communicate with the camera.")
116 parser.add_argument(
"-i",
"--intrinsics", required=
True, help=
"The path to the intrinsics file to read from/write to.")
117 parser.add_argument(
"-e",
"--extrinsics", required=
True, help=
"The path to the extrinsics file to read from/write to.")
118 parser.add_argument(
"-s",
"--set-cal", action=
'store_true', help=
"Write the calibration to the camera")
119 parser.add_argument(
"-y",
"--disable-confirmation", action=
'store_true', help=
"Disable confirmation prompts")
120 main(parser.parse_args())