From: Thomas Fillon Date: Mon, 18 Aug 2014 12:25:45 +0000 (+0200) Subject: fix(analyzers): update code to support new analyzer result structure and use numpy... X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=75076c46fee7ab8fee29077257da733f60c6d9c9;p=timeside.git fix(analyzers): update code to support new analyzer result structure and use numpy array in IRITDiverg --- diff --git a/tests/test_analyzers_default.py b/tests/test_analyzers_default.py old mode 100644 new mode 100755 diff --git a/timeside/analyzer/irit_diverg.py b/timeside/analyzer/irit_diverg.py index 4c4c29e..d15f3a9 100644 --- a/timeside/analyzer/irit_diverg.py +++ b/timeside/analyzer/irit_diverg.py @@ -23,7 +23,7 @@ from timeside.core import implements, interfacedoc from timeside.analyzer.core import Analyzer from timeside.analyzer.waveform import Waveform from timeside.api import IAnalyzer -from numpy import spacing +import numpy as np from collections import deque @@ -34,20 +34,23 @@ class ModelLongTerm(object): def __init__(self, ordre, echantillon): self.ordre = ordre - self.ft = [0] * (ordre + 2) - self.ftm1 = [0] * (ordre + 2) - self.variance_f = [1] * (ordre + 2) - self.variance_b = [1] * (ordre + 2) - self.et = [0] * (ordre + 2) - self.cor = [0] * (ordre + 2) + self.ft = np.repeat(0., ordre + 2) + self.ftm1 = np.repeat(0., ordre + 2) + self.variance_f = np.repeat(1., ordre + 2) + self.variance_b = np.repeat(1., ordre + 2) + self.et = np.repeat(0., ordre + 2) + + self.et_vec = self.et + self.ft_vec = self.ft + self.ftm1_vec = self.ftm1 + self.cor = np.repeat(0., ordre + 2) self.length = 1 self.erreur_residuelle = 0 self.variance_erreur_residuelle = 0 oubli = 1.0 / float(self.length) - self.variance_f[0] = self.variance_f[ - 0] + oubli * (echantillon ** 2 - self.variance_f[0]) + self.variance_f[0] = self.variance_f[0] + oubli * (echantillon ** 2 - self.variance_f[0]) self.variance_b[0] = self.variance_f[0] self.et[0] = echantillon self.ft[0] = echantillon @@ -62,31 +65,28 @@ class ModelLongTerm(object): ''' self.length += 1 - self.ftm1 = self.ft[:] + self.ftm1 = self.ft.copy() self.et[0] = echantillon oubli = 1.0 / float(self.length) - self.variance_f[0] = self.variance_f[ - 0] + oubli * (echantillon ** 2 - self.variance_f[0]) + self.variance_f[0] = (1 - oubli) * self.variance_f[0] + oubli * echantillon ** 2 self.variance_b[0] = self.variance_f[0] ik = min([self.ordre, self.length - 1]) for n in xrange(ik + 1): oubli = 1.0 / float(self.length - n) + oubli_ = 1 - oubli - self.cor[n] = self.cor[n] + oubli * ( - self.ftm1[n] * self.et[n] - self.cor[n]) + self.cor[n] = oubli_ * self.cor[n] + oubli * self.ftm1[n] * self.et[n] - knplus1 = 2 * \ - self.cor[n] / (self.variance_f[n] + self.variance_b[n]) + knplus1 = 2 * self.cor[n] / (self.variance_f[n] + self.variance_b[n]) self.et[n + 1] = self.et[n] - knplus1 * self.ftm1[n] self.ft[n + 1] = self.ftm1[n] - knplus1 * self.et[n] - self.variance_f[n + 1] = self.variance_f[ - n + 1] + oubli * (self.et[n + 1] ** 2 - self.variance_f[n + 1]) - self.variance_b[n + 1] = self.variance_b[ - n + 1] + oubli * (self.ft[n + 1] ** 2 - self.variance_b[n + 1]) + self.variance_f[n + 1] = oubli_ * self.variance_f[n + 1] + oubli * self.et[n + 1] ** 2 + self.variance_b[n + 1] = oubli_ * self.variance_b[n + 1] + oubli * self.ft[n + 1] ** 2 + self.ft[0] = echantillon self.erreur_residuelle = self.et[ik + 1] @@ -121,7 +121,7 @@ class ModelLongTerm(object): return s -class ModelCourtTrerm(object): +class ModelShortTerm(object): ''' ''' @@ -225,13 +225,13 @@ def calculDistance(modeleLong, modeleCourt): args : - modeleLong (ModelLongTerme) : Modèle appris sur tous les echantillons depuis la dernière rupture - - modeleCourt (ModelCourtTrerm): Modèle appris sur les Lmin derniers echantillons + - modeleCourt (ModelShortTerm): Modèle appris sur les Lmin derniers echantillons ''' if modeleCourt.variance_erreur_residuelle == 0: # epsilon pour le type de donnés correspondant à # modeleLong.variance_erreur_residuelle - numerateur = spacing(modeleCourt.variance_erreur_residuelle) + numerateur = np.spacing(modeleCourt.variance_erreur_residuelle) else: numerateur = modeleCourt.variance_erreur_residuelle @@ -296,7 +296,7 @@ def segment(data, fe, ordre=2, Lmin=0.02, # Initialisation du modèle court terme if t - rupt_last == Lmin: - courtTerme = ModelCourtTrerm(ordre, audio_buffer) + courtTerme = ModelShortTerm(ordre, audio_buffer) # Mise à jour du modèle court terme if t - rupt_last > Lmin: @@ -402,7 +402,7 @@ class IRITDiverg(Analyzer): segs.id_metadata.name += ' ' + 'Segments' label = {0: 'Instable', 1: 'Forward', -1: 'Backward'} - segs.label_metadata.label = label + segs.data_object.label_metadata.label = label segs.data_object.label = [s[1] for s in frontieres] segs.data_object.time = [(float(s[0]) / self.samplerate()) diff --git a/timeside/analyzer/irit_music_.py b/timeside/analyzer/irit_music_.py index 1f709df..c8dae07 100644 --- a/timeside/analyzer/irit_music_.py +++ b/timeside/analyzer/irit_music_.py @@ -66,7 +66,7 @@ class IRITMusicLDN(Analyzer): ''' ''' - segList = self.process_pipe.resultsget_result_by_id('irit_diverg.segments').time + segList = self.process_pipe.results.get_result_by_id('irit_diverg.segments').time w = self.wLen / 2 end = segList[-1] tLine = arange(0, end, self.wStep) @@ -77,8 +77,8 @@ class IRITMusicLDN(Analyzer): idx = nonzero(logical_and(segList > (t - w), segList < (t + w)))[0] segLen[i] = len(idx) - plot(tLine, segLen) - show() + #plot(tLine, segLen) + #show() # Confidence Index conf = array(segLen - self.threshold) / self.threshold conf[conf > 1] = 1 @@ -104,7 +104,7 @@ class IRITMusicLDN(Analyzer): segs.id_metadata.id += '.' + 'segments' segs.id_metadata.name += ' ' + 'Segments' - segs.label_metadata.label = label + segs.data_object.label_metadata.label = label segs.data_object.label = [convert[s[2]] for s in segList] segs.data_object.time = [tLine[s[0]] for s in segList] diff --git a/timeside/analyzer/irit_music_SLN.py b/timeside/analyzer/irit_music_SLN.py index 989d76b..bfa5728 100644 --- a/timeside/analyzer/irit_music_SLN.py +++ b/timeside/analyzer/irit_music_SLN.py @@ -110,7 +110,7 @@ class IRITMusicSLN(Analyzer): segs.id_metadata.id += '.' + 'segments' segs.id_metadata.name += ' ' + 'Segments' - segs.label_metadata.label = label + segs.data_object.label_metadata.label = label segs.data_object.label = [convert[s[2]] for s in segList] segs.data_object.time = [tLine[s[0]] for s in segList] diff --git a/timeside/analyzer/irit_music_SNB.py b/timeside/analyzer/irit_music_SNB.py index a74dc0f..f359142 100644 --- a/timeside/analyzer/irit_music_SNB.py +++ b/timeside/analyzer/irit_music_SNB.py @@ -105,7 +105,7 @@ class IRITMusicSNB(Analyzer): segs.id_metadata.id += '.' + 'segments' segs.id_metadata.name += ' ' + 'Segments' - segs.label_metadata.label = label + segs.data_object.label_metadata.label = label segs.data_object.label = [convert[s[2]] for s in segList] segs.data_object.time = [tLine[s[0]] for s in segList] diff --git a/timeside/analyzer/irit_singings.py b/timeside/analyzer/irit_singings.py index 18b1600..f491dd3 100644 --- a/timeside/analyzer/irit_singings.py +++ b/timeside/analyzer/irit_singings.py @@ -38,20 +38,10 @@ class IRITSingings(Analyzer): implements(IAnalyzer) @interfacedoc - def setup(self, channels=None, samplerate=None, - blocksize=None, totalframes=None): - - super(IRITSingings, self).setup(channels, - samplerate, - blocksize, - totalframes) - + def __init__(self): + super(IRITSingings, self).__init__() self.parents.append(IRITMonopoly()) - self.aubio_pitch = pitch( - "default", self.input_blocksize, self.input_stepsize, - samplerate) - self.aubio_pitch.set_unit("freq") self.block_read = 0 self.pitches = [] self.spectro = [] @@ -63,6 +53,19 @@ class IRITSingings(Analyzer): self.thPoly = 0.15 self.thMono = 0.1 + @interfacedoc + def setup(self, channels=None, samplerate=None, + blocksize=None, totalframes=None): + + super(IRITSingings, self).setup(channels, + samplerate, + blocksize, + totalframes) + + self.aubio_pitch = pitch("default", self.input_blocksize, + self.input_stepsize, samplerate) + self.aubio_pitch.set_unit("freq") + self.input_blocksize = int(self.wLen * samplerate) self.input_stepsize = int(self.wStep * samplerate) @@ -101,7 +104,7 @@ class IRITSingings(Analyzer): """ preproc = self.process_pipe.results.get_result_by_id('irit_monopoly.segments').data_object - labels = self.process_pipe.results.get_result_by_id('irit_monopoly.segments').label_metadata['label'] + labels = self.process_pipe.results.get_result_by_id('irit_monopoly.segments').data_object.label_metadata['label'] segments_monopoly = [(start, duration, labels[label])for start, duration, label in zip(preproc.time, preproc.duration, preproc.label)] diff --git a/timeside/analyzer/limsi_diarization.py b/timeside/analyzer/limsi_diarization.py index fefdc0d..613dbf8 100644 --- a/timeside/analyzer/limsi_diarization.py +++ b/timeside/analyzer/limsi_diarization.py @@ -127,7 +127,7 @@ class LimsiDiarization(Analyzer): # sadres = self.new_result(data_mode='value', time_mode='framewise') # sadres.id_metadata.id += '.' + 'sadres' # sadres.id_metadata.name += ' ' + 'SAD RESULT' - sadval = self.process_pipe.results[self.sad_analyzer.id() + '.sad_lhh_diff'].data_object.value[:] + sadval = self.process_pipe.results.get_result_by_id(self.sad_analyzer.id() + '.sad_lhh_diff').data_object.value[:] # sadres.data_object.value = sadval # self.process_pipe.results.add(sadres) @@ -223,9 +223,9 @@ class LimsiDiarization(Analyzer): diar_res.data_object.label = label diar_res.data_object.time = time diar_res.data_object.duration = duration - diar_res.label_metadata.label = dict() + diar_res.data_object.label_metadata.label = dict() for lab in diar_res.data_object.label: - diar_res.label_metadata.label[lab] = str(lab) + diar_res.data_object.label_metadata.label[lab] = str(lab) # TODO FIXME # for h in hypothesis.itertracks(label=True): # diar_res.data_object.label.append(h[2])