Skip to content
Snippets Groups Projects
Select Git revision
  • 975068e46a738d941b828bfb5ea899b6f473a47d
  • main default protected
  • V1
3 results

get_spectrogram.py

Blame
  • stephane.chavin's avatar
    Stephane Chavin authored
    975068e4
    History
    get_spectrogram.py 2.14 KiB
    import os
    import pandas as pd
    import librosa
    import numpy as np
    import matplotlib.pyplot as plt
    from tqdm import tqdm
    import ipdb
    import argparse
    
    parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter, description='TODO')
    parser.add_argument('-f','--file', type=str,required=True,help = 'Name of the file that contain the recording to print')
    parser.add_argument('-p','--path_to_data', type=str, help = 'Path of the folder that contain the recodings',required=True)
    args = parser.parse_args()
    
    path_to_data = args.path_to_data
    folder = 'Spectrogramme/'
    DURATION = 8
    NB_IMG_PER_REC = 30
    
    count = 0
    
    df = pd.read_csv(str(args.file+'.csv'))
    
    for i in tqdm(df.groupby('dir')):  #la colonne dir correspond au path
       count = 0
    
       for j in range (NB_IMG_PER_REC): #30*8 secondes - 30*2 secondes (overlap) = 180 secondes affichées sur 30 images : n'affiche que les 3 premières minutes d'un enregistrement
    
            filename = str(path_to_data+i[0])
            if count ==0:
                duration = DURATION
                offset = 0 
            else :
                duration = DURATION
                ffset = offset + 6
            try:
                y, sr = librosa.load(filename, offset = offset, duration = duration)
            except:
                continue
            window_size = 1024
            window = np.hanning(window_size)
            stft  = librosa.core.spectrum.stft(y, n_fft=window_size, hop_length=512, window=window)
            out = 2 * np.abs(stft) / np.sum(window)
    
            plt.close()
            plt.figure()
    
            vmin = np.flipud(np.log10(np.abs(stft))).mean()
            vmax = np.flipud(np.log10(np.abs(stft))).max()
    
            a = plt.specgram(y, Fs=sr, NFFT=1024, noverlap=512, cmap='jet', vmin=vmin*10, vmax=vmax*10)
            plt.imshow(np.flipud(np.log10(np.abs(stft))),aspect = "auto",interpolation = None,cmap = 'jet',vmin = vmin,vmax = vmax)
    
            plt.subplots_adjust(top=1, bottom=0, left=0, right=1)
    
            name = str(i[0].replace('/','_').split('.')[0]+'_'+str(count))
            try :
    
                plt.savefig(str(folder+name+'.jpg'))
    
            except FileNotFoundError:
    
                os.mkdir(folder)
                plt.savefig(str(folder+name+'.jpg'))
    
            count+=1