-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathexample_with_supplied_data.py
123 lines (93 loc) · 4.62 KB
/
example_with_supplied_data.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#!python36
# -*- coding: utf-8 -*-
"""
NCams Toolbox
Copyright 2019-2020 Charles M Greenspon, Anton Sobinov
https://github.com/CMGreenspon/NCams
Script for running functions on supplied example data. Useful for changing into own data structures.
Basically an abridged version of 'Examples/example_with_recording_data.py' that does not require
FLIR cameras, Spinnaker, etc.
The images are available here:
https://www.dropbox.com/sh/lrc2sik1kxlujgi/AACBH2y36wfbjzUre85rEl4ea
https://uchicago.app.box.com/s/glgee9o0katg9cvr7t5tjeygne3rs9on
and BASE_DIR has to point at that data.
For more details on the camera data structures and dicts, see help(ncams.camera_tools).
Intended to be used in an interactive environment (e.g. Spyder).
Has following steps:
0. Import modules
1. Load camera configuration
2. Calibration of camera lenses.
3. Estimation of relative position of cameras.
4. Instead of Steps 1-3 you can load the setup, calibration and pose estimation from files.
5. Load a config for the session from a file (instead of setting up).
6. Transform pictures into videos.
7. Undistort videos using camera calibration.
Is continued in analysis.py
author(s): Charles M. Greenspon
Anton Sobinov
lab: Sliman Bensmaia
"""
# %% 0 Imports
import os
import ncams
BASE_DIR = os.path.join('C:\\', 'FLIR_cameras', 'PublicExample')
# %% 1 Load camera_config
# Works if calibration and pose estimation has been done before and saved
cdatetime = '2019.12.09_16.23.02'
camera_config_dir = os.path.join(BASE_DIR, 'camconf_'+cdatetime)
camera_config = ncams.yaml_to_config(os.path.join(camera_config_dir, 'config.yaml'))
# %% 2 Run the multi-calibration on all cameras
calibration_config = ncams.multi_camera_calibration(camera_config, inspect=True)
# export to disk
ncams.export_calibration(calibration_config)
# %% 3 Do the pose estimation
pose_estimation_config = ncams.camera_pose.one_shot_multi_PnP(
camera_config, calibration_config)
# Does it look okay?
ncams.camera_pose.plot_poses(pose_estimation_config)
# If so lets export it
ncams.export_pose_estimation(pose_estimation_config)
# %% 4 Load camera_config, calibration and pose estimation data from files
# Works if calibration and pose estimation has been done before and saved
cdatetime = '2019.12.09_16.23.02'
camera_config_dir = os.path.join(BASE_DIR, 'camconf_'+cdatetime)
camera_config = ncams.yaml_to_config(os.path.join(camera_config_dir, 'config.yaml'))
calibration_config, pose_estimation_config = ncams.load_camera_config(camera_config)
# Does it look okay?
ncams.camera_pose.plot_poses(pose_estimation_config)
# %% 5 Load a session config from a file
session_full_filename = os.path.join(BASE_DIR, 'exp_session_2019.12.09_16.40.45_AS_CMG_2',
'session_config.yaml')
session_config = ncams.import_session_config(session_full_filename)
# %% 6 Make images into videos
session_config['video_path'] = 'videos'
session_config['ud_video_path'] = 'undistorted_videos'
for p in (os.path.join(session_config['session_path'], session_config['video_path']),
os.path.join(session_config['session_path'], session_config['ud_video_path'])):
if not os.path.isdir(p):
print('Making dir {}'.format(p))
os.mkdir(p)
for serial in camera_config['serials']:
session_config['cam_dicts'][serial]['pic_dir'] = session_config['cam_dicts'][serial]['name']
session_config['cam_dicts'][serial]['video'] = os.path.join(
session_config['video_path'], session_config['cam_dicts'][serial]['name']+'.mp4')
session_config['cam_dicts'][serial]['ud_video'] = os.path.join(
session_config['ud_video_path'], session_config['cam_dicts'][serial]['name']+'.mp4')
for cam_dict in session_config['cam_dicts'].values():
image_list = ncams.utils.get_image_list(
sort=True, path=os.path.join(session_config['session_path'], cam_dict['pic_dir']))
print('Making a video for camera {} from {} images.'.format(
cam_dict['name'], len(image_list)))
ncams.images_to_video(
image_list, cam_dict['video'], fps=session_config['frame_rate'],
output_folder=os.path.join(session_config['session_path'], session_config['video_path']))
ncams.export_session_config(session_config)
# %% 7 Undistort the videos
for icam, serial in enumerate(camera_config['serials']):
cam_dict = session_config['cam_dicts'][serial]
ncams.undistort_video(
os.path.join(session_config['session_path'], cam_dict['video']),
calibration_config['dicts'][serial],
crop_and_resize=False,
output_filename=os.path.join(session_config['session_path'], cam_dict['ud_video']))
print('Camera {} video undistorted.'.format(cam_dict['name']))