def __init__(self, name): self.name = name self.machine = Machine(model=self, states=StateMachine.states, initial='Wait', auto_transitions=False) self.machine.add_transition(trigger='Turn_start', source='Init', dest='Turn', after='turn_table') self.machine.add_transition(trigger='Turn_fin', source='Turn', dest='Recode', before='recode') self.machine.add_transition(trigger='Rec_fin', source='Recode', dest='Wait', after='wait') self.machine.add_transition(trigger='Init_set', source='Wait', dest='Init', before='init') self.machine.add_transition(trigger='Turn_res', source='Wait', dest='Turn', after='turn_table') self.machine.add_transition(trigger='Next_dis', source='Wait', dest='Init', after='prepare_next') self.stage = StageControl() self.func = MyFunc() self.photo = TakePhoto() self.photo_path = self.func.make_dir_path(photo=True) self.adjust = 50
def __init__(self): self.mic_path = '../_exp/19' + datetime.today().strftime("%m%d") + '/recode_data/' + \ datetime.today().strftime("%H%M%S") + '/' self.my_makedirs(self.mic_path) # self.mic_index, self.mic_channels = self.get_index('ReSpeaker 4 Mic Array (UAC1.0) ') self.mic_name = 'ReSpeaker 4 Mic Array (UAC1.0) ' self.speak_path = "../_exp/Speaker_Sound/2_up_tsp_1num.wav" self.recode_second = 1.2 self.freq_min = 800 self.freq_max = 2200 self.smooth_step = 50 self.mic_id = 0 self.model = joblib.load('../../../../OneDrive/Research/_array/200212/svm_200210_PTs09_freq_1000_8000.pkl') self.scon = StageControl() self.scon.calibrate() self.check_ready(200)
def __init__(self, name, host_ip, port_num, send_size, interval, retry_times): self.name = name self.machine = Machine(model=self, states=StateMachine.states, initial='Wait', auto_transitions=False) self.machine.add_transition(trigger='Turn_start', source='Init', dest='Turn', after='turn_table') self.machine.add_transition(trigger='Turn_fin', source='Turn', dest='Recode', before='recode') # self.machine.add_transition(trigger='Turn_fin', source='Init', dest='Recode', before='recode') self.machine.add_transition(trigger='Rec_fin', source='Recode', dest='Wait', after='wait') # self.machine.add_transition(trigger='Rec_fin', source='Recode', dest='Init', after='wait') self.machine.add_transition(trigger='Init_set', source='Wait', dest='Init', before='init') self.machine.add_transition(trigger='Turn_res', source='Wait', dest='Turn', after='turn_table') self.scon = StageControl() self.rfnc = RecodeFunc() self.socl = SocketClient(host_ip, port_num, send_size, interval, retry_times) self.mic_index, self.mic_channels = self.rfnc.get_index( 'ReSpeaker 4 Mic Array (UAC1.0) ') # self.speak_wf, self.speak_stream, self.speak_p = self.rfnc.sound_read("./origin_sound_data/tsp_1num.wav") # self.speak_path = "../_exp/Speaker_Sound/1_plus005_4time.wav" self.speak_path = "../_exp/Speaker_Sound/2_up_tsp_8num.wav" self.mic_path = '../_exp/20' + datetime.today().strftime("%m%d") + '/recode_data/' + \ datetime.today().strftime("%H%M%S") self.rfnc.my_makedirs(self.mic_path) self.adjust = 50
def __init__(self, name, host_ip_1, host_ip_2, port_1, port_2, send_size, interval, retry_times): self.name = name self.machine = Machine(model=self, states=StateMachine.states, initial='Wait', auto_transitions=False) self.machine.add_transition(trigger='Turn_start', source='Init', dest='Turn', after='turn_table') self.machine.add_transition(trigger='Turn_fin', source='Turn', dest='Recode', before='recode') # self.machine.add_transition(trigger='Turn_fin', source='Init', dest='Recode', before='recode') self.machine.add_transition(trigger='Rec_fin', source='Recode', dest='Wait', after='wait') # self.machine.add_transition(trigger='Rec_fin', source='Recode', dest='Init', after='wait') self.machine.add_transition(trigger='Init_set', source='Wait', dest='Init', before='init') self.machine.add_transition(trigger='Turn_res', source='Wait', dest='Turn', after='turn_table') self.machine.add_transition(trigger='Next_dis', source='Wait', dest='Init', after='prepare_next') self.stage = StageControl() # self.rfnc = RecodeFunc() self.func = MyFunc() self.photo = TakePhoto() self.socket = SocketClient(host_ip_1, host_ip_2, port_1, port_2, send_size, interval, retry_times) # self.mic_index, self.mic_channels = self.rfnc.get_index('ReSpeaker 4 Mic Array (UAC1.0) ') # self.speak_wf, self.speak_stream, self.speak_p = self.rfnc.sound_read("./origin_sound_data/tsp_1num.wav") # self.speak_path = "../_exp/Speaker_Sound/1_plus005_4time.wav" self.speak_path = "../_exp/Speaker_Sound/2_up_tsp_8num.wav" self.mic_path = self.func.make_dir_path(exp=True) self.photo_path = self.func.make_dir_path(photo=True) # self.func.my_makedirs(self.mic_path) self.adjust = 50
def __init__(self, name, path, host_ip_1, port_1, send_size, interval, retry_times, outfile="2_up_tsp_1num.wav"): super().__init__() self.mic_path = self.make_dir_path(exp=True) self.speak_path = self.speaker_sound_path + outfile self.recode_second = 1.2 freq_min = 1000 freq_max = 7000 self.smooth_step = 50 self.mic_id = 0 self.scon = StageControl() # self.socket = SocketClient(host_ip_1, host_ip_2, port_1, port_2, send_size, interval, retry_times) self.socket = SocketClient(host_ip_1, port_1, send_size, interval, retry_times) self.model = joblib.load(self.onedrive_path + '_array/' + path + name + '.pkl') self.name = name origin_path = self.speaker_sound_path + '2_up_tsp_1num.wav' self.origin_frames = self.get_frames(origin_path) freq_list = np.fft.rfftfreq(self.get_frames(origin_path), 1 / 44100) self.freq_max_id = self.freq_ids(freq_list, freq_max) self.freq_min_id = self.freq_ids(freq_list, freq_min) self.freq_list = freq_list[self.freq_min_id + int(self.smooth_step / 2) - 1:self.freq_max_id - int(self.smooth_step / 2)] self.scon.calibrate() self.check_ready(200) self.socket.connect()
class StateMachine(object): states = ['Turn', 'Recode', 'Wait', 'Init', 'Next'] def __init__(self, name, host_ip, port_num, send_size, interval, retry_times): self.name = name self.machine = Machine(model=self, states=StateMachine.states, initial='Wait', auto_transitions=False) self.machine.add_transition(trigger='Turn_start', source='Init', dest='Turn', after='turn_table') self.machine.add_transition(trigger='Turn_fin', source='Turn', dest='Recode', before='recode') # self.machine.add_transition(trigger='Turn_fin', source='Init', dest='Recode', before='recode') self.machine.add_transition(trigger='Rec_fin', source='Recode', dest='Wait', after='wait') # self.machine.add_transition(trigger='Rec_fin', source='Recode', dest='Init', after='wait') self.machine.add_transition(trigger='Init_set', source='Wait', dest='Init', before='init') self.machine.add_transition(trigger='Turn_res', source='Wait', dest='Turn', after='turn_table') self.scon = StageControl() self.rfnc = RecodeFunc() self.socl = SocketClient(host_ip, port_num, send_size, interval, retry_times) self.mic_index, self.mic_channels = self.rfnc.get_index( 'ReSpeaker 4 Mic Array (UAC1.0) ') # self.speak_wf, self.speak_stream, self.speak_p = self.rfnc.sound_read("./origin_sound_data/tsp_1num.wav") # self.speak_path = "../_exp/Speaker_Sound/1_plus005_4time.wav" self.speak_path = "../_exp/Speaker_Sound/2_up_tsp_8num.wav" self.mic_path = '../_exp/20' + datetime.today().strftime("%m%d") + '/recode_data/' + \ datetime.today().strftime("%H%M%S") self.rfnc.my_makedirs(self.mic_path) self.adjust = 50 def turn_table(self, name): print(name - self.adjust, "Setting ... ") # State.scon.gSend("D:1S5000F100000R600") self.scon.move_table(name) def wait(self, sleep_time=2): # print("wait") time.sleep(sleep_time) pass def recode(self, name, num=0): if self.socl.socket is not None: self.socl.send_GO(self.mic_path + '/' + str(name) + '.wav') def init(self): if self.scon.ser is None: return -1 self.scon.calibrate() self.socl.connect() def check_ready(self, wait_count): count_num = 0 print("Now Moving ...") while count_num < wait_count: count_num += 1 if not self.scon.isReady(): while True: count_num += 1 if self.scon.isReady(): break print("Ready") def main(self, DIRECTIONS, num=0): self.Init_set() self.check_ready(200) # time.sleep(30) print("Finish Calibration of Turn Table") print("#################################################") self.Turn_start(DIRECTIONS[0] + self.adjust) for i, deg in enumerate(DIRECTIONS): self.check_ready(200) time.sleep(2) self.Turn_fin(deg, num) self.Rec_fin() print("******************************************") if i + 1 < len(DIRECTIONS): self.Turn_res(DIRECTIONS[i + 1] + self.adjust) print("OK") self.scon.move_table(0 + self.adjust) @staticmethod def make_dir(order): DIRECTIONS = [order] for i in range(10): order = [k - 1 for k in order] DIRECTIONS.append(order) DIRECTIONS = np.array(DIRECTIONS).reshape(1, -1)[0] # print(np.array(DIRECTIONS).reshape(1, -1)[0]) return DIRECTIONS
class StateMachine(object): states = ['Turn', 'Recode', 'Wait', 'Init', 'Next'] def __init__(self, name, host_ip_1, host_ip_2, port_1, port_2, send_size, interval, retry_times): self.name = name self.machine = Machine(model=self, states=StateMachine.states, initial='Wait', auto_transitions=False) self.machine.add_transition(trigger='Turn_start', source='Init', dest='Turn', after='turn_table') self.machine.add_transition(trigger='Turn_fin', source='Turn', dest='Recode', before='recode') # self.machine.add_transition(trigger='Turn_fin', source='Init', dest='Recode', before='recode') self.machine.add_transition(trigger='Rec_fin', source='Recode', dest='Wait', after='wait') # self.machine.add_transition(trigger='Rec_fin', source='Recode', dest='Init', after='wait') self.machine.add_transition(trigger='Init_set', source='Wait', dest='Init', before='init') self.machine.add_transition(trigger='Turn_res', source='Wait', dest='Turn', after='turn_table') self.machine.add_transition(trigger='Next_dis', source='Wait', dest='Init', after='prepare_next') self.stage = StageControl() # self.rfnc = RecodeFunc() self.func = MyFunc() self.photo = TakePhoto() self.socket = SocketClient(host_ip_1, host_ip_2, port_1, port_2, send_size, interval, retry_times) # self.mic_index, self.mic_channels = self.rfnc.get_index('ReSpeaker 4 Mic Array (UAC1.0) ') # self.speak_wf, self.speak_stream, self.speak_p = self.rfnc.sound_read("./origin_sound_data/tsp_1num.wav") # self.speak_path = "../_exp/Speaker_Sound/1_plus005_4time.wav" self.speak_path = "../_exp/Speaker_Sound/2_up_tsp_8num.wav" self.mic_path = self.func.make_dir_path(exp=True) self.photo_path = self.func.make_dir_path(photo=True) # self.func.my_makedirs(self.mic_path) self.adjust = 50 def turn_table(self, name): # State.scon.gSend("D:1S5000F100000R600") self.stage.move_table(name) print(name-self.adjust, ' [deg]') @staticmethod def wait(sleep_time=2): # print("wait") time.sleep(sleep_time) pass def recode(self, dir_name, dis_name): if self.socket.socket_1 is not None: self.photo.capture(self.photo_path + '/' + str(dis_name) + '/' + str(dir_name)) self.socket.send_GO(self.mic_path + '/' + str(dis_name) + '/' + str(dir_name) + '.wav') def init(self): if self.stage.ser is None: return -1 self.stage.calibrate() self.socket.connect() self.socket.send_INIT() def check_ready(self, wait_count): count_num = 0 # print("Now Moving ...") while count_num < wait_count: count_num += 1 if not self.stage.isReady(): while True: count_num += 1 if self.stage.isReady(): break # print("Ready") @staticmethod def prepare_next(dis): print("Finish ", str(dis), ' [m]') def main(self, directions, distances): self.Init_set() self.check_ready(200) # time.sleep(30) print("Finish Robot, Mic, Turn Table Set UP") print("#################################################") for j, dis in enumerate(distances): if j != 0: self.socket.send_SET_DIS(self.transform_pos_to_command(y_pos=round(distances[j-1]- dis, 2))) self.func.my_makedirs(self.mic_path + '/' + str(dis)) self.func.my_makedirs(self.photo_path + '/' + str(dis)) self.Turn_start(directions[0] + self.adjust) for i, deg in enumerate(directions): self.check_ready(200) time.sleep(2) self.Turn_fin(deg, dis) self.Rec_fin() # print("******************************************") if i + 1 < len(directions): self.Turn_res(directions[i + 1] + self.adjust) # print("OK") else: self.Next_dis(dis) print() print('^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^') self.socket_close() self.stage.move_table(0 + self.adjust) print('Finish Experiment (^^)/ !!') @staticmethod def make_dir(order_num): directions = [order_num] for i in range(4): order_num = [k - 1 for k in order_num] directions.append(order_num) directions = np.array(directions).reshape(1, -1)[0] directions = np.append(directions, -50) # print(np.array(DIRECTIONS).reshape(1, -1)[0]) print(directions) return directions def socket_close(self): self.socket.close() print('Disconnect Socket Communication') @staticmethod def transform_pos_to_command(x_pos=0.0, y_pos=0.0, z_pos=0.0): if y_pos > 0: print('ERROR') sys.exit() else: return 'x=' + str(x_pos) + ',y=' + str(y_pos) + ',z=' + str(z_pos)
class StateMachine(object): states = ['Turn', 'Recode', 'Wait', 'Init', 'Next'] def __init__(self, name): self.name = name self.machine = Machine(model=self, states=StateMachine.states, initial='Wait', auto_transitions=False) self.machine.add_transition(trigger='Turn_start', source='Init', dest='Turn', after='turn_table') self.machine.add_transition(trigger='Turn_fin', source='Turn', dest='Recode', before='recode') self.machine.add_transition(trigger='Rec_fin', source='Recode', dest='Wait', after='wait') self.machine.add_transition(trigger='Init_set', source='Wait', dest='Init', before='init') self.machine.add_transition(trigger='Turn_res', source='Wait', dest='Turn', after='turn_table') self.machine.add_transition(trigger='Next_dis', source='Wait', dest='Init', after='prepare_next') self.stage = StageControl() self.func = MyFunc() self.photo = TakePhoto() self.photo_path = self.func.make_dir_path(photo=True) self.adjust = 50 def turn_table(self, name): self.stage.move_table(name) print(name - self.adjust, ' [deg]') @staticmethod def wait(sleep_time=2): time.sleep(sleep_time) pass def recode(self, dir_name): # vapor switch on and take a photo self.photo.capture(self.photo_path + str(dir_name)) # pass # if self.socket.socket_1 is not None: # self.photo.capture(self.photo_path + '/' + str(dis_name) + '/' + str(dir_name)) # self.socket.send_GO(self.mic_path + '/' + str(dis_name) + '/' + str(dir_name) + '.wav') def init(self): if self.stage.ser is None: return -1 self.stage.calibrate() def check_ready(self, wait_count): count_num = 0 # print("Now Moving ...") while count_num < wait_count: count_num += 1 if not self.stage.isReady(): while True: count_num += 1 if self.stage.isReady(): break # print("Ready") @staticmethod def prepare_next(dis): print("Finish ", str(dis), ' [m]') def main(self, directions, distances): self.Init_set() self.check_ready(200) # time.sleep(30) print("Finish Robot, Mic, Turn Table Set UP") print("#################################################") # self.func.my_makedirs(self.photo_path + '/' + str(dis)) self.Turn_start(directions[0] + self.adjust) for i, deg in enumerate(directions): self.check_ready(200) time.sleep(2) self.Turn_fin(deg) self.Rec_fin() # print("******************************************") if i + 1 < len(directions): self.Turn_res(directions[i + 1] + self.adjust) # print("OK") print() print('^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^') self.socket_close() self.stage.move_table(0 + self.adjust) print('Finish Experiment (^^)/ !!') @staticmethod def make_dir(order_num): directions = [order_num] for i in range(4): order_num = [k - 1 for k in order_num] directions.append(order_num) directions = np.array(directions).reshape(1, -1)[0] directions = np.append(directions, -50) # print(np.array(DIRECTIONS).reshape(1, -1)[0]) print(directions) return directions def socket_close(self): # self.socket.close() print('Disconnect Socket Communication') @staticmethod def transform_pos_to_command(x_pos=0.0, y_pos=0.0, z_pos=0.0): if y_pos > 0: print('ERROR') sys.exit() else: return 'x=' + str(x_pos) + ',y=' + str(y_pos) + ',z=' + str(z_pos)
class Estimate(MyFunc): def __init__(self, name, path, host_ip_1, port_1, send_size, interval, retry_times, outfile="2_up_tsp_1num.wav"): super().__init__() self.mic_path = self.make_dir_path(exp=True) self.speak_path = self.speaker_sound_path + outfile self.recode_second = 1.2 freq_min = 1000 freq_max = 7000 self.smooth_step = 50 self.mic_id = 0 self.scon = StageControl() # self.socket = SocketClient(host_ip_1, host_ip_2, port_1, port_2, send_size, interval, retry_times) self.socket = SocketClient(host_ip_1, port_1, send_size, interval, retry_times) self.model = joblib.load(self.onedrive_path + '_array/' + path + name + '.pkl') self.name = name origin_path = self.speaker_sound_path + '2_up_tsp_1num.wav' self.origin_frames = self.get_frames(origin_path) freq_list = np.fft.rfftfreq(self.get_frames(origin_path), 1 / 44100) self.freq_max_id = self.freq_ids(freq_list, freq_max) self.freq_min_id = self.freq_ids(freq_list, freq_min) self.freq_list = freq_list[self.freq_min_id + int(self.smooth_step / 2) - 1:self.freq_max_id - int(self.smooth_step / 2)] self.scon.calibrate() self.check_ready(200) self.socket.connect() def estimate(self, dir_name): # recode_data, sampling = self.play_rec(self.speak_path, self.recode_second, device_name=self.mic_name, # input_file_name=input_file, need_data=True) recode_data = self.socket.send_GO(self.mic_path + str(dir_name) + '.wav', return_data=True) print(recode_data.shape) start_time = self.zero_cross(recode_data, 128, 44100, 512, self.origin_frames, up=True) if start_time < 0: start_time = 0 sound_data = recode_data[:, start_time:int(start_time + self.origin_frames)] # sound_data = np.reshape(sound_data, (8, 8, -1)) print(sound_data.shape) # plt.figure() # plt.specgram(sound_data[0], Fs=44100) # plt.show() fft_data = np.fft.rfft(sound_data) print(fft_data.shape) data_set = np.zeros((recode_data.shape[0], len(self.freq_list)), dtype=np.float) for mic in range(fft_data.shape[0]): smooth_data = np.convolve( np.abs(fft_data[mic, self.freq_min_id:self.freq_max_id]), np.ones(self.smooth_step) / float(self.smooth_step), mode='valid') smooth_data = np.real(np.reshape(smooth_data, (1, -1)))[0] normalize_data = stats.zscore(smooth_data, axis=0) # normalize_data = (smooth_data - smooth_data.mean()) / smooth_data.std() # normalize_data = (smooth_data - min(smooth_data))/(max(smooth_data) - min(smooth_data)) data_set[mic, :] = normalize_data training_data = np.load( self.onedrive_path + '_array/200216/200210_PTs09_kuka_distance_200.npy') print(training_data.shape) plt.figure() plt.plot(training_data[dir_name + 50, 0, 0, :], label='model') plt.plot(data_set[0], label='measure') plt.legend() plt.show() print(self.model.predict(data_set)) @staticmethod def freq_ids(freq_list, freq): freq_id = np.abs(freq_list - freq).argmin() return freq_id def turn_table(self, direction): self.scon.move_table(direction + 50) self.check_ready(200) time.sleep(2) print("move to ", direction) def check_ready(self, wait_count): count_num = 0 print("Now Moving ...") while count_num < wait_count: count_num += 1 if not self.scon.isReady(): while True: count_num += 1 if self.scon.isReady(): break print("Ready")
class Estimate(RecodeFunc): def __init__(self): self.mic_path = '../_exp/19' + datetime.today().strftime("%m%d") + '/recode_data/' + \ datetime.today().strftime("%H%M%S") + '/' self.my_makedirs(self.mic_path) # self.mic_index, self.mic_channels = self.get_index('ReSpeaker 4 Mic Array (UAC1.0) ') self.mic_name = 'ReSpeaker 4 Mic Array (UAC1.0) ' self.speak_path = "../_exp/Speaker_Sound/2_up_tsp_1num.wav" self.recode_second = 1.2 self.freq_min = 800 self.freq_max = 2200 self.smooth_step = 50 self.mic_id = 0 self.model = joblib.load('../../../../OneDrive/Research/_array/200212/svm_200210_PTs09_freq_1000_8000.pkl') self.scon = StageControl() self.scon.calibrate() self.check_ready(200) def estimate(self): input_file = self.mic_path + 'test.wav' recode_data, sampling = self.play_rec(self.speak_path, self.recode_second, device_name=self.mic_name, input_file_name=input_file, need_data=True) recode_data = np.delete(recode_data, [0, 5], 0) fft_data = np.fft.rfft(recode_data) freq_list = np.fft.rfftfreq(recode_data.shape[1], 1/sampling) freq_min_id = self.freq_ids(freq_list, self.freq_min) freq_max_id = self.freq_ids(freq_list, self.freq_max) data_set_freq_len = freq_max_id - freq_min_id - (self.smooth_step - 1) data_set = np.zeros((recode_data.shape[0], data_set_freq_len), dtype=np.float) for mic in range(fft_data.shape[0]): smooth_data = np.convolve(np.abs(fft_data[mic, freq_min_id:freq_max_id]), np.ones(self.smooth_step) / float(self.smooth_step), mode='valid') smooth_data = np.real(np.reshape(smooth_data, (1, -1)))[0] normalize_data = stats.zscore(smooth_data, axis=0) # normalize_data = (smooth_data - smooth_data.mean()) / smooth_data.std() # normalize_data = (smooth_data - min(smooth_data))/(max(smooth_data) - min(smooth_data)) data_set[mic, :] = normalize_data # plt.figure() # plt.plot(data_set[self.mic_id, :]) # plt.show() # print(data_set[self.mic_id].shape) print(self.model.predict(data_set[:, 256:])) @staticmethod def freq_ids(freq_list, freq): freq_id = np.abs(freq_list - freq).argmin() return freq_id def turn_table(self, direction): self.scon.move_table(direction + 50) self.check_ready(200) time.sleep(2) print("move to ", direction) def check_ready(self, wait_count): count_num = 0 print("Now Moving ...") while count_num < wait_count: count_num += 1 if not self.scon.isReady(): while True: count_num += 1 if self.scon.isReady(): break print("Ready")