def post_process(self):
        '''

        '''
        res_irit_diverg = self.parents['irit_diverg2'].results
        segList = res_irit_diverg['irit_diverg2.segments'].time
        w = self.wLen / 2
        end = segList[-1]
        tLine = arange(0, end, self.wStep)

        segNB = [
            len(getBoundariesInInterval(t - w, t + w, segList)) for t in tLine
        ]

        # Confidence Index
        conf = [
            -float(v - self.threshold) /
            float(self.threshold) if v < 2 * self.threshold else -1.0
            for v in segNB
        ]

        segLenRes = self.new_result(data_mode='value', time_mode='framewise')
        segLenRes.id_metadata.id += '.' + 'energy_confidence'
        segLenRes.id_metadata.name += ' ' + 'Energy Confidence'

        segLenRes.data_object.value = conf

        self.add_result(segLenRes)

        # Segment
        convert = {False: 0, True: 1}
        label = {0: 'nonMusic', 1: 'Music'}

        segList = segmentFromValues([c > 0 for c in conf])
        # Hint : Median filtering could imrove smoothness of the result
        # from scipy.signal import medfilt
        # segList = segmentFromValues(medfilt(modEnergyValue > self.threshold, 31))

        segs = self.new_result(data_mode='label', time_mode='segment')
        segs.id_metadata.id += '.' + 'segments'
        segs.id_metadata.name += ' ' + 'Segments'

        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]
        segs.data_object.duration = [
            tLine[s[1]] - tLine[s[0]] for s in segList
        ]

        self.add_result(segs)
        return
Exemple #2
0
    def post_process(self):
        '''

        '''
        aubio_res_id = 'aubio_pitch.pitch_confidence'
        aubio_uuid = self.parents['aubio_pitch'].uuid()
        aubio_results = self.process_pipe.results[aubio_uuid]

        pitch_confidences = aubio_results[aubio_res_id].data

        nb_frameDecision = int(self.decisionLen / self.wStep)
        epsilon = numpy.spacing(pitch_confidences[0])
        w = int(nb_frameDecision / 2)

        is_mono = []
        for i in range(w, len(pitch_confidences) - w, nb_frameDecision):
            d = pitch_confidences[i - w:i + w]
            conf_mean = numpy.mean(d)
            conf_var = numpy.var(d + epsilon)
            if self.monoLikelihood(conf_mean, conf_var) > self.polyLikelihood(
                    conf_mean, conf_var):
                is_mono += [True]
            else:
                is_mono += [False]

        conf = self.new_result(data_mode='value', time_mode='framewise')
        conf = self.new_result(data_mode='value', time_mode='framewise')
        conf.id_metadata.id += '.' + 'yin_confidence'
        conf.id_metadata.name += ' ' + 'Yin Confidence'
        conf.data_object.value = pitch_confidences

        self.add_result(conf)

        convert = {False: 0, True: 1}
        label = {0: 'Poly', 1: 'Mono'}
        segList = segmentFromValues(is_mono)
        segs = self.new_result(data_mode='label', time_mode='segment')
        segs.id_metadata.id += '.' + 'segments'
        segs.id_metadata.name += ' ' + 'Segments'

        segs.data_object.label_metadata.label = label
        segs.data_object.label = [convert[s[2]] for s in segList]
        segs.data_object.time = [(float(s[0] + 0.5) * self.decisionLen)
                                 for s in segList]

        segs.data_object.duration = [
            (float(s[1] - s[0] + 1) * self.decisionLen) for s in segList
        ]
        self.add_result(segs)
        return
    def post_process(self):
        """

        :return:
        """
        res_irit_diverg = self.parents['irit_diverg2'].results
        segList = res_irit_diverg['irit_diverg2.segments'].time

        w = self.wLen / 2
        end = segList[-1]

        tLine = arange(w, end - w, self.wStep)

        segLen = [mean(diff(d)) for d in
                  [[t - w] + getBoundariesInInterval(t - w, t + w, segList) + [t + w] for t in tLine]]

        # Confidence Index
        conf = [(s - self.threshold) / self.threshold if s < 2 * self.threshold else 1 for s in segLen]
        
        segLenRes = self.new_result(data_mode='value', time_mode='framewise')
        segLenRes.id_metadata.id += '.' + 'energy_confidence'
        segLenRes.id_metadata.name += ' ' + 'Energy Confidence'

        segLenRes.data_object.value = segLen

        self.add_result(segLenRes)

        # Segment
        convert = {False: 0, True: 1}
        label = {0: 'nonMusic', 1: 'Music'}

        segList = segmentFromValues([c > 0 for c in conf])
        # Hint : Median filtering could imrove smoothness of the result
        # from scipy.signal import medfilt
        # segList = segmentFromValues(medfilt(modEnergyValue > self.threshold, 31))

        segs = self.new_result(data_mode='label', time_mode='segment')
        segs.id_metadata.id += '.' + 'segments'
        segs.id_metadata.name += ' ' + 'Segments'

        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]
        segs.data_object.duration = [tLine[s[1]] - tLine[s[0]]
                                     for s in segList]

        self.add_result(segs)
        return
    def post_process(self):

        entropyValue = array(self.entropyValue)
        w = self.modulLen * self.samplerate() / self.blocksize()
        modulentropy = computeModulation(entropyValue, w, False)
        confEntropy = array(modulentropy - self.threshold) / self.threshold
        confEntropy[confEntropy > 1] = 1

        conf = self.new_result(data_mode='value', time_mode='framewise')

        conf.id_metadata.id += '.' + 'confidence'
        conf.id_metadata.name += ' ' + 'Confidence'

        conf.data_object.value = confEntropy
        self.add_result(conf)

        # Binary Entropy
        binaryEntropy = modulentropy > self.threshold
        binaryEntropy = binary_opening(
            binaryEntropy, [1] * (self.smoothLen * 2))

        convert = {False: 0, True: 1}
        label = {0: 'NonSpeech', 1: 'Speech'}
        segList = segmentFromValues(binaryEntropy)

        segs = self.new_result(data_mode='label', time_mode='segment')
        segs.id_metadata.id += '.' + 'segments'
        segs.id_metadata.name += ' ' + 'Segments'

        segs.data_object.label_metadata.label = label

        segs.data_object.label = [convert[s[2]] for s in segList]
        segs.data_object.time = [(float(s[0]) * self.blocksize() /
                                 self.samplerate())
                                 for s in segList]
        segs.data_object.duration = [(float(s[1] - s[0] + 1) * self.blocksize() /
                                     self.samplerate())
                                     for s in segList]

        self.add_result(segs)

        return
    def post_process(self):
        '''

        '''
        # Creation of the pass-band filter
        Wo = self.frequency_center / self.samplerate()
        Wn = [Wo - (self.frequency_width / 2) / self.samplerate(),
              Wo + (self.frequency_width / 2) / self.samplerate()]
        num = firwin(self.orderFilter, Wn, pass_zero=False)

        # Energy on the frequency range
        self.energy4hz = np.array(self.energy4hz)
        energy = lfilter(num, 1, self.energy4hz.T, 0)
        energy = sum(energy)

        # Normalization
        if self.normalizeEnergy and energy.any():
            energy = energy / np.mean(energy)

        # Energy Modulation
        frameLenModulation = int(
            self.modulLen * self.samplerate() / self.input_stepsize)
        modEnergyValue = computeModulation(energy, frameLenModulation, True)

        # Confidence Index
        conf = np.array(modEnergyValue - self.threshold) / self.threshold
        conf[conf > 1] = 1

        modEnergy = self.new_result(data_mode='value', time_mode='framewise')
        modEnergy.id_metadata.id += '.' + 'energy_confidence'
        modEnergy.id_metadata.name += ' ' + 'Energy Confidence'

        modEnergy.data_object.value = conf

        self.add_result(modEnergy)

        # Segment
        convert = {False: 0, True: 1}
        label = {0: 'nonSpeech', 1: 'Speech'}

        decision = modEnergyValue > self.threshold

        segList = segmentFromValues(decision)
        # Hint : Median filtering could improve smoothness of the result
        from scipy.signal import medfilt
        output_samplerate = np.float(self.samplerate()) / self.input_stepsize
        N = int(np.ceil(self.medfilt_duration * output_samplerate))
        N += 1 - np.mod(N, 2)  # Make N odd
        segList_filt = segmentFromValues(medfilt(decision, N))

        segs = self.new_result(data_mode='label', time_mode='segment')
        segs.id_metadata.id += '.' + 'segments'
        segs.id_metadata.name += ' ' + 'Segments'

        segs.data_object.label_metadata.label = label

        segs.data_object.label = [convert[s[2]] for s in segList]
        segs.data_object.time = [(np.float(s[0]) * self.input_stepsize /
                                  self.input_samplerate)
                                 for s in segList]
        segs.data_object.duration = [(np.float(s[1] - s[0] + 1) * self.input_stepsize /
                                      self.input_samplerate)
                                     for s in segList]

        self.add_result(segs)

        # Median filter on decision
        med_segs = self.new_result(data_mode='label', time_mode='segment')
        med_segs.id_metadata.id += '.' + 'segments_median'
        med_segs.id_metadata.name += ' ' + 'Segments after Median filtering'

        med_segs.data_object.label_metadata.label = label

        med_segs.data_object.label = [convert[s[2]] for s in segList_filt]
        med_segs.data_object.time = [(np.float(s[0]) * self.input_stepsize /
                                  self.input_samplerate)
                                 for s in segList_filt]
        med_segs.data_object.duration = [(np.float(s[1] - s[0] + 1) * self.input_stepsize /
                                      self.input_samplerate)
                                     for s in segList_filt]

        self.add_result(med_segs)

        return
    def post_process(self):
        '''

        '''
        # Creation of the pass-band filter
        Wo = self.frequency_center / self.samplerate()
        Wn = [
            Wo - (self.frequency_width / 2) / self.samplerate(),
            Wo + (self.frequency_width / 2) / self.samplerate()
        ]
        num = firwin(self.orderFilter, Wn, pass_zero=False)

        # Energy on the frequency range
        self.energy4hz = np.array(self.energy4hz)
        energy = lfilter(num, 1, self.energy4hz.T, 0)
        energy = sum(energy)

        # Normalization
        if self.normalizeEnergy and energy.any():
            energy = energy / np.mean(energy)

        # Energy Modulation
        frameLenModulation = int(self.modulLen * self.samplerate() /
                                 self.input_stepsize)
        modEnergyValue = computeModulation(energy, frameLenModulation, True)

        # Confidence Index
        conf = np.array(modEnergyValue - self.threshold) / self.threshold
        conf[conf > 1] = 1

        modEnergy = self.new_result(data_mode='value', time_mode='framewise')
        modEnergy.id_metadata.id += '.' + 'energy_confidence'
        modEnergy.id_metadata.name += ' ' + 'Energy Confidence'

        modEnergy.data_object.value = conf

        self.add_result(modEnergy)

        # Segment
        convert = {False: 0, True: 1}
        label = {0: 'nonSpeech', 1: 'Speech'}

        decision = modEnergyValue > self.threshold

        segList = segmentFromValues(decision)
        # Hint : Median filtering could improve smoothness of the result
        from scipy.signal import medfilt
        output_samplerate = np.float(self.samplerate()) / self.input_stepsize
        N = int(np.ceil(self.medfilt_duration * output_samplerate))
        N += 1 - np.mod(N, 2)  # Make N odd
        segList_filt = segmentFromValues(medfilt(decision, N))

        segs = self.new_result(data_mode='label', time_mode='segment')
        segs.id_metadata.id += '.' + 'segments'
        segs.id_metadata.name += ' ' + 'Segments'

        segs.data_object.label_metadata.label = label

        segs.data_object.label = [convert[s[2]] for s in segList]
        segs.data_object.time = [
            (np.float(s[0]) * self.input_stepsize / self.input_samplerate)
            for s in segList
        ]
        segs.data_object.duration = [
            (np.float(s[1] - s[0] + 1) * self.input_stepsize /
             self.input_samplerate) for s in segList
        ]

        self.add_result(segs)

        # Median filter on decision
        med_segs = self.new_result(data_mode='label', time_mode='segment')
        med_segs.id_metadata.id += '.' + 'segments_median'
        med_segs.id_metadata.name += ' ' + 'Segments after Median filtering'

        med_segs.data_object.label_metadata.label = label

        med_segs.data_object.label = [convert[s[2]] for s in segList_filt]
        med_segs.data_object.time = [
            (np.float(s[0]) * self.input_stepsize / self.input_samplerate)
            for s in segList_filt
        ]
        med_segs.data_object.duration = [
            (np.float(s[1] - s[0] + 1) * self.input_stepsize /
             self.input_samplerate) for s in segList_filt
        ]

        self.add_result(med_segs)

        return