Select Git revision
get_spectrogram.py

Stephane Chavin authored
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