def py_determination_proc_c(n_cams, sorted_pos, sorted_corresp, corrected): """ Returns 3d positions """ # Control parameters cpar = ControlParams(n_cams) cpar.read_control_par(b'parameters/ptv.par') # Volume parameters vpar = VolumeParams() vpar.read_volume_par(b'parameters/criteria.par') cals =[] for i_cam in range(n_cams): cal = Calibration() tmp = cpar.get_cal_img_base_name(i_cam) cal.from_file(tmp + b'.ori', tmp + b'.addpar') cals.append(cal) # Distinction between quad/trip irrelevant here. sorted_pos = np.concatenate(sorted_pos, axis=1) sorted_corresp = np.concatenate(sorted_corresp, axis=1) flat = np.array([corrected[i].get_by_pnrs(sorted_corresp[i]) \ for i in range(len(cals))]) pos, rcm = point_positions( flat.transpose(1,0,2), cpar, cals, vpar) if len(cals) < 4: print_corresp = -1*np.ones((4,sorted_corresp.shape[1])) print_corresp[:len(cals),:] = sorted_corresp else: print_corresp = sorted_corresp # Save rt_is in a temporary file fname = b"".join([default_naming['corres'],b'.123456789']) # hard-coded frame number with open(fname, 'w') as rt_is: rt_is.write(str(pos.shape[0]) + '\n') for pix, pt in enumerate(pos): pt_args = (pix + 1,) + tuple(pt) + tuple(print_corresp[:,pix]) rt_is.write("%4d %9.3f %9.3f %9.3f %4d %4d %4d %4d\n" % pt_args)
def py_determination_proc_c(n_cams, sorted_pos, sorted_corresp, corrected): """ Returns 3d positions """ # Control parameters cpar = ControlParams(n_cams) cpar.read_control_par('parameters/ptv.par') # Volume parameters vpar = VolumeParams() vpar.read_volume_par('parameters/criteria.par') cals = [] for i_cam in xrange(n_cams): cal = Calibration() tmp = cpar.get_cal_img_base_name(i_cam) cal.from_file(tmp + '.ori', tmp + '.addpar') cals.append(cal) # Distinction between quad/trip irrelevant here. sorted_pos = np.concatenate(sorted_pos, axis=1) sorted_corresp = np.concatenate(sorted_corresp, axis=1) flat = np.array([corrected[i].get_by_pnrs(sorted_corresp[i]) \ for i in xrange(len(cals))]) pos, rcm = point_positions(flat.transpose(1, 0, 2), cpar, cals, vpar) if len(cals) == 1: # single camera case sorted_corresp = np.tile(sorted_corresp, (4, 1)) sorted_corresp[1:, :] = -1 # Save rt_is in a temporary file frame = 123456789 # just a temporary workaround. todo: think how to write with open(default_naming['corres'] + '.' + str(frame), 'w') as rt_is: rt_is.write(str(pos.shape[0]) + '\n') for pix, pt in enumerate(pos): pt_args = (pix + 1, ) + tuple(pt) + tuple(sorted_corresp[:, pix]) rt_is.write("%4d %9.3f %9.3f %9.3f %4d %4d %4d %4d\n" % pt_args)
def py_start_proc_c(n_cams): """ Read parameters """ # Control parameters cpar = ControlParams(n_cams) cpar.read_control_par(b'parameters/ptv.par') # Sequence parameters spar = SequenceParams(num_cams=n_cams) spar.read_sequence_par(b'parameters/sequence.par', n_cams) # Volume parameters vpar = VolumeParams() vpar.read_volume_par(b'parameters/criteria.par') # Tracking parameters track_par = TrackingParams() track_par.read_track_par(b'parameters/track.par') # Target parameters tpar = TargetParams(n_cams) tpar.read(b'parameters/targ_rec.par') # Examine parameters, multiplane (single plane vs combined calibration) epar = par.ExamineParams() epar.read() # Calibration parameters cals = [] for i_cam in range(n_cams): cal = Calibration() tmp = cpar.get_cal_img_base_name(i_cam) cal.from_file(tmp + b'.ori', tmp + b'.addpar') cals.append(cal) return cpar, spar, vpar, track_par, tpar, cals, epar
class Test_ControlParams(unittest.TestCase): def setUp(self): self.input_control_par_file_name = "testing_fodder/control_parameters/control.par" self.temp_output_directory = "testing_fodder/control_parameters/testing_output" # create a temporary output directory (will be deleted by the end of test) if not os.path.exists(self.temp_output_directory): os.makedirs(self.temp_output_directory) # create an instance of ControlParams class self.cp_obj = ControlParams(4) def test_read_control(self): # Fill the ControlParams object with parameters from test file self.cp_obj.read_control_par(self.input_control_par_file_name) # check if all parameters are equal to the contents of test file self.failUnless(self.cp_obj.get_img_base_name(0) == "dumbbell/cam1_Scene77_4085") self.failUnless(self.cp_obj.get_img_base_name(1) == "dumbbell/cam2_Scene77_4085") self.failUnless(self.cp_obj.get_img_base_name(2) == "dumbbell/cam3_Scene77_4085") self.failUnless(self.cp_obj.get_img_base_name(3) == "dumbbell/cam4_Scene77_4085") self.failUnless(self.cp_obj.get_cal_img_base_name(0) == "cal/cam1.tif") self.failUnless(self.cp_obj.get_cal_img_base_name(1) == "cal/cam2.tif") self.failUnless(self.cp_obj.get_cal_img_base_name(2) == "cal/cam3.tif") self.failUnless(self.cp_obj.get_cal_img_base_name(3) == "cal/cam4.tif") self.failUnless(self.cp_obj.get_num_cams() == 4) self.failUnless(self.cp_obj.get_hp_flag()) self.failUnless(self.cp_obj.get_allCam_flag()) self.failUnless(self.cp_obj.get_tiff_flag()) self.failUnless(self.cp_obj.get_image_size(), (1280, 1024)) self.failUnless(self.cp_obj.get_pixel_size() == (15.15,16.16)) self.failUnless(self.cp_obj.get_chfield() == 17) self.failUnless(self.cp_obj.get_multimedia_params().get_n1() == 18) self.failUnless(self.cp_obj.get_multimedia_params().get_n2()[0] == 19.19) self.failUnless(self.cp_obj.get_multimedia_params().get_n3() == 20.20) self.failUnless(self.cp_obj.get_multimedia_params().get_d()[0] == 21.21) def test_instantiate_fast(self): """ControlParams instantiation through constructor""" cp = ControlParams(4, ['headers', 'hp', 'allcam'], (1280, 1024), (15.15,16.16), 18, [19.19], [21.21], 20.20) self.failUnless(cp.get_num_cams() == 4) self.failUnless(cp.get_hp_flag()) self.failUnless(cp.get_allCam_flag()) self.failUnless(cp.get_tiff_flag()) self.failUnless(cp.get_image_size(), (1280, 1024)) self.failUnless(cp.get_pixel_size() == (15.15,16.16)) self.failUnless(cp.get_chfield() == 0) mm = cp.get_multimedia_params() self.failUnless(mm.get_n1() == 18) self.failUnless(mm.get_n2()[0] == 19.19) self.failUnless(mm.get_n3() == 20.20) self.failUnless(mm.get_d()[0] == 21.21) def test_getters_setters(self): cams_num = 4 for cam in range(cams_num): new_str = str(cam) + "some string" + str(cam) self.cp_obj.set_img_base_name(cam, new_str) self.failUnless(self.cp_obj.get_img_base_name(cam) == new_str) self.cp_obj.set_cal_img_base_name(cam, new_str) self.failUnless(self.cp_obj.get_cal_img_base_name(cam) == new_str) self.cp_obj.set_hp_flag(True) self.failUnless(self.cp_obj.get_hp_flag()) self.cp_obj.set_hp_flag(False) self.failUnless(not self.cp_obj.get_hp_flag()) self.cp_obj.set_allCam_flag(True) self.failUnless(self.cp_obj.get_allCam_flag()) self.cp_obj.set_allCam_flag(False) self.failUnless(not self.cp_obj.get_allCam_flag()) self.cp_obj.set_tiff_flag(True) self.failUnless(self.cp_obj.get_tiff_flag()) self.cp_obj.set_tiff_flag(False) self.failUnless(not self.cp_obj.get_tiff_flag()) self.cp_obj.set_image_size((4, 5)) self.failUnless(self.cp_obj.get_image_size()== (4, 5)) print self.cp_obj.get_pixel_size() self.cp_obj.set_pixel_size((6.1, 7.0)) numpy.testing.assert_array_equal(self.cp_obj.get_pixel_size(), (6.1, 7)) self.cp_obj.set_chfield(8) self.failUnless(self.cp_obj.get_chfield() == 8) # testing __richcmp__ comparison method of ControlParams class def test_rich_compare(self): self.cp_obj2 = ControlParams(4) self.cp_obj2.read_control_par(self.input_control_par_file_name) self.cp_obj3 = ControlParams(4) self.cp_obj3.read_control_par(self.input_control_par_file_name) self.failUnless(self.cp_obj2 == self.cp_obj3) self.failIf(self.cp_obj2 != self.cp_obj3) self.cp_obj2.set_hp_flag(False) self.failUnless(self.cp_obj2 != self.cp_obj3) self.failIf(self.cp_obj2 == self.cp_obj3) with self.assertRaises(TypeError): var = (self.cp_obj2 > self.cp_obj3) # unhandled operator > def tearDown(self): # remove the testing output directory and its files shutil.rmtree(self.temp_output_directory)
def run_batch(new_seq_first, new_seq_last): """ this file runs inside exp_path, so the other names are prescribed by the OpenPTV type of a folder: /parameters /img /cal /res """ # read the number of cameras with open('parameters/ptv.par', 'r') as f: n_cams = int(f.readline()) # Control parameters cpar = ControlParams(n_cams) cpar.read_control_par(b'parameters/ptv.par') # Sequence parameters spar = SequenceParams(num_cams=n_cams) spar.read_sequence_par(b'parameters/sequence.par', n_cams) spar.set_first(new_seq_first) spar.set_last(new_seq_last) # Volume parameters vpar = VolumeParams() vpar.read_volume_par(b'parameters/criteria.par') # Tracking parameters track_par = TrackingParams() track_par.read_track_par(b'parameters/track.par') # Target parameters tpar = TargetParams() tpar.read(b'parameters/targ_rec.par') # # Calibration parameters cals = [] for i_cam in range(n_cams): cal = Calibration() tmp = cpar.get_cal_img_base_name(i_cam) cal.from_file(tmp + b'.ori', tmp + b'.addpar') cals.append(cal) # sequence loop for all frames for frame in range(new_seq_first, new_seq_last + 1): print("processing frame %d" % frame) detections = [] corrected = [] for i_cam in range(n_cams): imname = spar.get_img_base_name(i_cam) + str(frame) img = imread(imname) hp = simple_highpass(img, cpar) targs = target_recognition(hp, tpar, i_cam, cpar) print(targs) targs.sort_y() detections.append(targs) mc = MatchedCoords(targs, cpar, cals[i_cam]) pos, pnr = mc.as_arrays() print(i_cam) corrected.append(mc) # if any([len(det) == 0 for det in detections]): # return False # Corresp. + positions. sorted_pos, sorted_corresp, num_targs = correspondences( detections, corrected, cals, vpar, cpar) # Save targets only after they've been modified: for i_cam in xrange(n_cams): detections[i_cam].write(spar.get_img_base_name(i_cam), frame) print("Frame " + str(frame) + " had " \ + repr([s.shape[1] for s in sorted_pos]) + " correspondences.") # Distinction between quad/trip irrelevant here. sorted_pos = np.concatenate(sorted_pos, axis=1) sorted_corresp = np.concatenate(sorted_corresp, axis=1) flat = np.array([corrected[i].get_by_pnrs(sorted_corresp[i]) \ for i in xrange(len(cals))]) pos, rcm = point_positions(flat.transpose(1, 0, 2), cpar, cals, vpar) if len(cals) < 4: print_corresp = -1 * np.ones((4, sorted_corresp.shape[1])) print_corresp[:len(cals), :] = sorted_corresp else: print_corresp = sorted_corresp # Save rt_is rt_is = open(default_naming['corres'] + '.' + str(frame), 'w') rt_is.write(str(pos.shape[0]) + '\n') for pix, pt in enumerate(pos): pt_args = (pix + 1, ) + tuple(pt) + tuple(print_corresp[:, pix]) rt_is.write("%4d %9.3f %9.3f %9.3f %4d %4d %4d %4d\n" % pt_args) rt_is.close() # end of a sequence loop tracker = Tracker(cpar, vpar, track_par, spar, cals, default_naming) tracker.full_forward()