3 from os
import makedirs, listdir
4 from os
import path
as osp
5 from PIL
import Image
as Image_
7 from cv_bridge
import CvBridge
8 from sound_classification.msg
import InSound
13 from sensor_msgs.msg
import Image
18 Collect spectrogram with sound class, only when the robot is in sound.
19 if save_when_sound is False, you can save spectrograms during no sound.
26 rospack = rospkg.RosPack()
28 'sound_classification'),
'train_data')
38 if osp.exists(osp.join(self.
train_dir,
'noise.npy')):
39 noise = np.load(osp.join(self.
train_dir,
'noise.npy'))
42 rospy.logerr(
"{} not found".format(osp.join(self.
train_dir,
'noise.npy')))
53 subs = [in_sound_sub, img_sub]
55 subs.append(img_raw_sub)
57 ts.registerCallback(self.
_cb)
61 in_sound = args[0].in_sound
76 Main process of NoiseSaver class
77 Save spectrogram data at self.save_data_rate
89 Image_.fromarray(mono_spectrogram).save(file_name)
91 rospy.loginfo(
'save spectrogram: ' + file_name)
93 file_name_raw = osp.join(
97 mono_spectrogram_raw = self.
bridge.imgmsg_to_cv2(
99 except AttributeError:
101 _max = mono_spectrogram_raw.max()
102 _min = mono_spectrogram_raw.min()
103 mono_spectrogram_raw = (mono_spectrogram_raw - _min) / (_max - _min) * 255.0
104 mono_spectrogram_raw = mono_spectrogram_raw.astype(np.uint8)
105 Image_.fromarray(mono_spectrogram_raw).save(file_name_raw)
107 rospy.loginfo(
'save spectrogram: ' + file_name_raw)
110 if __name__ ==
'__main__':
111 rospy.init_node(
'sound_saver')