def test_create_random_noise(self): spectro, _metadata = SoundProcessor.load_spectrogram( self.one_spectro_file) new_spectro, _fname = SoundProcessor.random_noise(spectro, noise_type='uniform') self.assertTrue((new_spectro > spectro).any()) self.assertTrue((new_spectro <= 255).all())
def create_new_sample(self, sample_path, out_dir, method): ''' Given one spectrogram file, and an image augmentation method name, compute that augmentation, create a file name that gives insight into the aug applied, and write that new spectrogram file to out_dir. Currently available types of image augmentation technique: o adding random or uniform sounds o frequency masking o time masking Returns the full path of the newly created spectrogram file: :param sample_path: absolute path to spectrogram :type sample_path: str :param out_dir: destination of resulting new spectros :type out_dir: src :param method: the (spectrogram) image augmentation method to apply :type method: ImgAugMethod :return: Newly created spectro file (full path) or None, if a failure occurred. :rtype: {str | None| ''' success = False spectro, metadata = SoundProcessor.load_spectrogram(sample_path) if method == ImgAugMethod.NOISE: try: # Default is uniform noise: new_spectro, out_fname = SoundProcessor.random_noise(spectro) metadata['augmentation'] = 'noise' success = True except Exception as e: sample_fname = Path(sample_path).stem self.log.err( f"Failed to add noise to {sample_fname} ({repr(e)})") elif method == ImgAugMethod.FMASK: try: # Horizontal bands: new_spectro, out_fname = SoundProcessor.freq_mask( spectro, max_height=15 # num freq bands ) metadata['augmentation'] = 'fmask' success = True except Exception as e: sample_fname = Path(sample_path).stem self.log.err( f"Failed to time shift on {sample_fname} ({repr(e)})") elif method == ImgAugMethod.TMASK: try: # Vertical bands: new_spectro, out_fname = SoundProcessor.time_mask( spectro, max_width=15 # num time ticks ) metadata['augmentation'] = 'tmask' success = True except Exception as e: sample_fname = Path(sample_path).stem self.log.err( f"Failed to time shift on {sample_fname} ({repr(e)})") if success: sample_p = Path(sample_path) appended_fname = sample_p.stem + out_fname + sample_p.suffix out_path = os.path.join(out_dir, appended_fname) SoundProcessor.save_image(new_spectro, out_path, metadata) return out_path if success else None