Changeset 5d1c070


Ignore:
Timestamp:
Mar 5, 2006, 4:21:16 AM (18 years ago)
Author:
Paul Brossier <piem@altern.org>
Branches:
feature/autosink, feature/cnn, feature/cnn_org, feature/constantq, feature/crepe, feature/crepe_org, feature/pitchshift, feature/pydocstrings, feature/timestretch, fix/ffmpeg5, master, pitchshift, sampler, timestretch, yinfft+
Children:
d8604ac
Parents:
43938de
Message:

updated to new bench-pitch, fixed gettruth
updated to new bench-pitch, fixed gettruth

Location:
python
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • python/aubio/bench/node.py

    r43938de r5d1c070  
    2626        if maxdepth >= 0: maxstring = " -maxdepth %d " % maxdepth       
    2727        else: maxstring = ""
    28         cmd = '%s' * 5 % ('find ',datapath,maxstring,' -type ',filter)
     28        cmd = '%s' * 6 % ('find ',datapath,maxstring,' -type ',filter, "| sort -n")
    2929        return runcommand(cmd)
    3030
  • python/aubio/task/pitch.py

    r43938de r5d1c070  
    6161                elif floatpit:
    6262                        try:
    63                                 self.truth = aubio_miditofreq(float(floatpit))
    64                                 print "ground truth found in filename:", self.truth
    65                                 tasksil = tasksilence(self.input)
     63                                self.truth = float(floatpit)
     64                                #print "ground truth found in filename:", self.truth
     65                                tasksil = tasksilence(self.input,params=self.params)
    6666                                time,pitch =[],[]
    6767                                while(tasksil.readsize==tasksil.params.hopsize):
     
    8484                                        for i in range(len(values)):
    8585                                                time.append(values[i][0])
    86                                                 pitch.append(values[i][1])
     86                                                pitch.append(aubio_freqtomidi(values[i][1]))
    8787                                        return time,pitch
    8888
    89         def eval(self,results):
     89        def oldeval(self,results):
    9090                def mmean(l):
    9191                        return sum(l)/max(float(len(l)),1)
     
    105105                return self.truth, self.truth-med, self.truth-avg
    106106
    107         def neweval(self,results):
     107        def eval(self,pitch,tol=0.9):
    108108                timet,pitcht = self.gettruth()
    109                 for i in timet:
    110                         print results[i]
    111                 return self.truth, self.truth-med, self.truth-avg
     109                pitch = [aubio_freqtomidi(i) for i in pitch]
     110                for i in range(len(pitch)):
     111                        if pitch[i] == "nan" or pitch[i] == -1:
     112                                pitch[i] = -1
     113                time = [ i*self.params.step for i in range(len(pitch)) ]
     114                assert len(timet) == len(time)
     115                assert len(pitcht) == len(pitch)
     116                osil, esil, opit, epit, echr = 0, 0, 0, 0, 0
     117                for i in range(len(pitcht)):
     118                        if pitcht[i] == -1: # currently silent
     119                                osil += 1 # count a silence
     120                                if pitch[i] == -1. or pitch[i] == "nan":
     121                                        esil += 1 # found a silence
     122                        else:
     123                                opit +=1
     124                                if abs(pitcht[i] - pitch[i]) < tol:
     125                                        epit += 1
     126                                        echr += 1
     127                                elif abs(pitcht[i] - pitch[i]) % 12. < tol:
     128                                        echr += 1
     129                                #else:
     130                                #       print timet[i], pitcht[i], time[i], pitch[i]
     131                #print "origsilence", "foundsilence", "origpitch", "foundpitch", "orig pitchroma", "found pitchchroma"
     132                #print 100.*esil/float(osil), 100.*epit/float(opit), 100.*echr/float(opit)
     133                return osil, esil, opit, epit, echr
    112134
    113135        def plot(self,pitch,wplot,oplots,outplot=None):
     
    115137                import Gnuplot
    116138
    117                 self.eval(pitch)
    118139                downtime = self.params.step*numarray.arange(len(pitch))
    119                 oplots.append(Gnuplot.Data(downtime,pitch,with='lines',
     140                oplots.append(Gnuplot.Data(downtime,pitch,with='linespoints',
    120141                        title=self.params.pitchmode))
    121142
    122143                       
    123         def plotplot(self,wplot,oplots,outplot=None,multiplot = 1):
     144        def plotplot(self,wplot,oplots,outplot=None,multiplot = 0):
    124145                from aubio.gnuplot import gnuplot_init, audio_to_array, make_audio_plot
    125146                import re
     
    132153                timet,pitcht = self.gettruth()
    133154                if timet and pitcht:
     155                        pitcht = [aubio_miditofreq(i) for i in pitcht]
    134156                        oplots = [Gnuplot.Data(timet,pitcht,with='lines',
    135157                                title='ground truth')] + oplots
  • python/test/bench/pitch/bench-pitch

    r43938de r5d1c070  
    99        valuenames = ['mode']
    1010        """ list of lists to store per file """
    11         valuelists = ['orig', 'mean', 'med']
     11        valuelists = ['truth', 'osil', 'esil', 'opit', 'epit', 'echr',
     12               'Msil', 'Mpit', 'Mchr']
    1213        """ list of values to print per dir """
    13         printnames = [ 'mode']
     14        printnames = [ 'mode', 'truth', 'Msil', 'Mpit', 'Mchr']
    1415
    1516        """ per dir """
    16         formats = {'mode': "%12s" , 'thres': "%5.4s",
    17                 'dist':  "%5.4s", 'prec': "%5.4s", 'recl':  "%5.4s",
    18                 'Ttrue': "%5.4s", 'Tfp':   "%5.4s", 'Tfn':   "%5.4s",
    19                 'Tm':    "%5.4s", 'Td':    "%5.4s",
    20                 'aTtrue':"%5.4s", 'aTfp':  "%5.4s", 'aTfn':  "%5.4s",
    21                 'aTm':   "%5.4s", 'aTd':   "%5.4s",
    22                 'mean':  "%5.40s", 'smean': "%5.40s",
    23                 'amean':  "%5.40s", 'samean': "%5.40s"}
     17        formats = {'mode': "%12s" ,
     18                'truth': "%s",
     19                'osil': "%s", 'esil': "%s",
     20                'opit': "%s", 'epit': "%s", 'echr': "%s",
     21                'Msil': "%s", 'Mpit': "%s", 'Mchr': "%s"}
    2422
    2523        def dir_eval(self):
    2624                """ evaluate statistical data over the directory """
    2725                v = self.v
    28 
    2926                v['mode']      = self.params.pitchmode
    3027
     
    3229                filetask = self.task(input,params=self.params)
    3330                computed_data = filetask.compute_all()
    34                 orig,mean,med = filetask.eval(computed_data)
     31                osil, esil, opit, epit, echr = filetask.eval(computed_data)
     32                self.v['truth'].append(int(filetask.truth))
     33                assert opit > 0
    3534               
    36                 self.v['orig'].append(orig)
    37                 self.v['mean'].append(mean)
    38                 self.v['med'].append(med)
     35                self.v['osil'].append(osil)
     36                self.v['esil'].append(esil)
     37                self.v['opit'].append(opit)
     38                self.v['epit'].append(epit)
     39                self.v['echr'].append(echr)
     40
     41                self.v['Msil'].append(esil/float(osil)*100.)
     42                self.v['Mpit'].append(epit/float(opit)*100.)
     43                self.v['Mchr'].append(echr/float(opit)*100.)
    3944                #print results#, computed_data
    4045                #print input, results, results - float(input.split('.')[-2])
     
    4247        def run_bench(self,modes=['schmitt']):
    4348                from os.path import basename
    44                 d = []
    4549                self.modes = modes
    4650                self.pretty_titles()
     51                d = []
    4752                for mode in self.modes:
    4853                        self.params.pitchmode = mode
    4954                        self.dir_eval_print()
    50                         self.plotpitchtessiture(d,
    51                                 self.v['orig'],
    52                                 self.v['med'],
    53                                 plottitle=self.v['mode'],
    54                                 plotmode='points')
    55                 #d.append('beta = .25,orig(x) title \"-2 octave\"')
    56                 d.append('beta = .50,orig(x) title \"-1 octave\"')
    57                 d.append('beta = 1.0,orig(x) title \"original\"')
    58                 d.append('beta = 2.0,orig(x) title \"+1 octave\"')
    59                 title = basename(self.datadir)
     55                        truth   = [i for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
     56                        allOsil = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
     57                        allEsil = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
     58                        allOpit = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
     59                        allEpit = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
     60                        allEchr = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
     61                        allMsil = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
     62                        allMpit = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
     63                        allMchr = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
     64                        for i in range(len(self.v['truth'])):
     65                                allOsil[self.v['truth'][i]-min(self.v['truth'])] += self.v['osil'][i]
     66                                allEsil[self.v['truth'][i]-min(self.v['truth'])] += self.v['esil'][i]
     67                                allOpit[self.v['truth'][i]-min(self.v['truth'])] += self.v['opit'][i]
     68                                allEpit[self.v['truth'][i]-min(self.v['truth'])] += self.v['epit'][i]
     69                                allEchr[self.v['truth'][i]-min(self.v['truth'])] += self.v['echr'][i]
     70                        for i in range(len(truth)):
     71                                allMsil[i] = allEsil[i]/float(allOsil[i])*100.
     72                                allMpit[i] = allEpit[i]/float(allOpit[i])*100.
     73                                allMchr[i] = allEchr[i]/float(allOpit[i])*100.
     74
     75                        plot = []
     76                        self.plotpitchtessiture(plot,
     77                                truth,
     78                                allMpit,
     79                                plottitle="%s %s" % (self.v['mode'],self.params.bufsize),
     80                                plotmode='lines')
     81                        self.plotpitchtessiture(plot,
     82                                truth,
     83                                allMchr,
     84                                plottitle="%s %s" % (self.v['mode'],"%12"),
     85                                plotmode='lines')
     86                        """
     87                        self.plotpitchtessiture(plot,
     88                                truth,
     89                                allMsil,
     90                                plottitle="%s %s" % (self.v['mode'],"sil"),
     91                                plotmode='lines')
     92                        """
     93                        title = basename(self.datadir)
     94                        d.append(plot)
    6095                outplot = "_-_".join(('pitchtessiture',title))
     96                self.xmin = 20. #min(self.v['truth'])
     97                self.xmax = 110. #max(self.v['truth'])
    6198                for ext in ('ps','png','svg',''):
    6299                        self.plotplotpitchtessiture(d,
    63                                 plottitle=title,
     100                                plottitle="".join(['Performance against MIDI Note number (',
     101                                        title,
     102                                        ", %s" % len(self.sndlist), " samples)"]),
    64103                                outplot=outplot,
    65104                                extension=ext)
     105                #d.append('beta = .25,orig(x) title \"-2 octave\"')
     106                #d.append('beta = .50,orig(x) title \"-1 octave\"')
     107                #d.append('beta = 1.0,orig(x) title \"original\"')
     108                #d.append('beta = 2.0,orig(x) title \"+1 octave\"')
    66109
    67110        """
     
    73116                d.append(Gnuplot.Data(lx, ly, with=plotmode, title="%s" % (plottitle) ))
    74117
    75         def plotplotpitchtessiture(self,d,plottitle='',outplot=0,extension=''):
     118        def plotplotpitchtessiture(self,d,plottitle='',outplot=0,extension='',multiplot=1):
    76119                from aubio.gnuplot import gnuplot_create
    77120                g = gnuplot_create(outplot=outplot,extension=extension)
    78                 g.title(plottitle)
    79                 g('orig(x) = beta*x')
    80                 g.xlabel('original pitch (Hz)')
    81                 g.ylabel('detected pitch (Hz)')
    82                 g('set key left top')
    83                 g('set log xy')
    84                 g('set xrange [50:2000]')
    85                 g('set yrange [50:2000]')
    86                 g.plot(*d)
     121                #g.title(plottitle)
     122                #g('orig(x) = beta*x')
     123                #g.xlabel('original pitch (Hz)')
     124                #g.ylabel('detected pitch (Hz)')
     125                #g('set key left top')
     126                #g('set log xy')
     127                #g('set xrange [50:2000]')
     128                g('set yrange [0:100]')
     129                #g.plot(*d)
     130                if multiplot:
     131                        g('set multiplot')
     132                        for i in range(len(d)):
     133                                # plot onset detection functions
     134                                g('set size   1,%f' % ( 1.0/float(len(d)) ) )
     135                                g('set origin 0,%f' % ( 1.0*float(len(d)-i-1)/float(len(d)) ) )
     136                                # erase axis
     137                                g('set border 3')
     138                                g('set xtics nomirror')
     139                                g('set ytics nomirror')
     140                                g('set key left top')
     141                                g('set xrange [%f:%f]' % (self.xmin,self.xmax)) #(self.xmax - (self.xmax-self.xmin)*5./4.,self.xmax))
     142                                #g.ylabel('%Correct detections')
     143                                if i == len(d)-1:
     144                                        g.xlabel(plottitle)
     145                                g.plot(*d[i])
     146                                g('unset title')
     147                        g('unset multiplot')
     148                else:
     149                        g.plot(*d)
    87150
    88151
     
    94157                for each in sys.argv[3:-1]: print each
    95158        modes = ['schmitt', 'yin', 'mcomb', 'fcomb']
    96         #modes = ['fcomb']
     159        modes = ['schmitt', 'yin', 'fcomb']
    97160
    98161        params = taskparams()
    99         params.bufsize = 4096
    100         params.hopsize = params.bufsize/4
    101         params.silence = -1000.
    102         params.pitchsmooth = 50
     162        params.bufsize = 2048
     163        params.hopsize = params.bufsize/8
     164        params.silence = -60.
     165        params.pitchsmooth = 0
     166        params.pitchmax = 20000
     167        params.pitchmin = 20
    103168        benchpitch = benchpitch(datapath,params=params)
    104169        benchpitch.task = taskpitch
Note: See TracChangeset for help on using the changeset viewer.