]> git.parisson.com Git - timeside.git/commitdiff
fix(analyzers): update code to support new analyzer result structure and use numpy...
authorThomas Fillon <thomas@parisson.com>
Mon, 18 Aug 2014 12:25:45 +0000 (14:25 +0200)
committerThomas Fillon <thomas@parisson.com>
Mon, 18 Aug 2014 12:25:45 +0000 (14:25 +0200)
tests/test_analyzers_default.py [changed mode: 0644->0755]
timeside/analyzer/irit_diverg.py
timeside/analyzer/irit_music_.py
timeside/analyzer/irit_music_SLN.py
timeside/analyzer/irit_music_SNB.py
timeside/analyzer/irit_singings.py
timeside/analyzer/limsi_diarization.py

old mode 100644 (file)
new mode 100755 (executable)
index 4c4c29e7817557b8e866065dfae247e228cf383f..d15f3a96bff25bf8cfafe2e413d097534774ef7e 100644 (file)
@@ -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())
index 1f709dfdac3c385e9b74c3f707786f701fa48a14..c8dae0792844f7b98b473134d6e12f76d466a829 100644 (file)
@@ -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]
index 989d76b363f6045f0b61b39e9fa977ab2bcfe9b6..bfa5728b5d8269cecb8591e66090096d2d38f9c8 100644 (file)
@@ -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]
index a74dc0f767fca9e6a19d9e074a7ddd3d77b15063..f359142386462989baeb96009fa87357aee1f726 100644 (file)
@@ -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]
index 18b16001ee091899d4a34e50e8b661c22af3a3df..f491dd3ab84c2ced32bfc21d27ea0ff987d1c3ab 100644 (file)
@@ -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)]
index fefdc0daaa8fd05b4ee374d793f313e9867221d2..613dbf8bc00370c93a24cf7dd0a392e66041e9b2 100644 (file)
@@ -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])