annotate utils/OnsetPlotProc.py @ 19:890cfe424f4a tip

added annotations
author mitian
date Fri, 11 Dec 2015 09:47:40 +0000
parents b4bf37f94e92
children
rev   line source
mi@0 1 import numpy as np
mi@0 2 from numpy import *
mi@0 3 import sys, resource
mi@0 4 # import matplotlib.pyplot as plt
mi@0 5 import subprocess as sp
mi@0 6 import cPickle as pickle
mi@0 7
mi@0 8 # set this True or False to enable/disable plotting
mitian@18 9 # plot_on = False
mitian@18 10 plot_on = True
mi@0 11
mi@0 12 if plot_on :
mi@0 13 import matplotlib.pyplot as plt
mitian@12 14
mitian@18 15 gt = np.genfromtxt('/Users/mitian/Documents/hg/segmenter/annotation/qupujicheng_annotation_30_3/10hongniang01.csv', delimiter=',')[:,0]
mitian@18 16 # gt = np.genfromtxt('../annotation/TheBeatles/seg_tut/03LucyInTheSkyWithDiamonds.lab',)[:,0]
mitian@12 17
mi@0 18 class OnsetPlot(object):
mi@0 19 '''This class allows creating a series of plots easily.'''
mi@0 20
mi@0 21 def __init__(self):
mi@0 22 self.signal_plots = []
mi@0 23 self.marker_plots = []
mi@0 24 self.subplots = {}
mi@0 25
mi@0 26 def reset(self):
mi@0 27 self.__init__()
mi@0 28
mi@0 29 def update(self,obj):
mi@0 30 self.signal_plots = obj.signal_plots
mi@0 31 self.marker_plots = obj.marker_plots
mi@0 32 self.subplots = obj.subplots
mi@0 33
mi@0 34 def add_plot(self,signal,subplot=-1,title=""):
mi@0 35 self.signal_plots.append([signal,subplot,title])
mi@0 36
mi@0 37 def plot_signal(self,signal,subplot,title):
mi@0 38 axes = self.figure.add_subplot(subplot)
mi@0 39 axes.plot(signal)
mitian@12 40 axes.get_xaxis().set_visible(False)
mitian@12 41 axes.vlines(gt / gt[-1] * len(signal), np.min(signal), np.max(signal), colors='k')
mitian@12 42 if title : axes.set_title(title, fontsize=20)
mi@0 43 plt.axis('tight')
mi@0 44 self.subplots.update({subplot:(axes,signal)})
mi@0 45
mi@0 46 def plot_markers(self,markers,symbol,subplot):
mi@0 47 values = zeros(len(markers)) + 1
mi@0 48 axes,signal = self.subplots[subplot]
mitian@12 49 axes.plot(markers,np.array(signal)[markers],symbol,markersize=12)
mi@0 50
mi@0 51 def add_markers(self,markers,symbol="g^",subplot=-1):
mi@0 52 self.marker_plots.append([markers,symbol,subplot])
mitian@18 53
mi@0 54 def show_in_subprocess(self):
mi@0 55 '''Marshal the object into a separate subprocess to fix OS/X issues with threading.'''
mi@0 56 cmd = "python %s" %__file__
mi@0 57 print "executing:", cmd
mi@0 58 proc = sp.Popen(cmd, stdin = sp.PIPE, stdout = sp.PIPE, shell=True)
mi@0 59 pickle.dump(self,proc.stdin)
mi@0 60 result = proc.stdout.readlines()
mi@0 61 for item in result:
mi@0 62 print str(item).strip()
mi@0 63 proc.wait()
mi@0 64 return result
mi@0 65
mi@0 66 def show(self):
mi@0 67 self.figure = plt.figure(figsize=(15,6))
mi@0 68 num_plots = len(self.signal_plots)
mi@0 69 for i,s in enumerate(self.signal_plots) :
mi@0 70 j = i+1
mi@0 71 if s[1] < 1 :
mi@0 72 s[1] = int("%(num_plots)s1%(j)s" %locals())
mi@0 73 else :
mi@0 74 k = s[1]
mi@0 75 s[1] = int("%(num_plots)s1%(k)s" %locals())
mi@0 76 print "plotting:",s[2]
mi@0 77 s = tuple(s)
mi@0 78 self.plot_signal(*s)
mi@0 79 # plot marketrs on the last subplot
mi@0 80 for m in self.marker_plots :
mi@0 81 if m[2] < 1 or m[2] > num_plots:
mi@0 82 m[2] = int("%(num_plots)s1%(num_plots)s" %locals())
mi@0 83 else :
mi@0 84 k = m[2]
mi@0 85 m[2] = int("%(num_plots)s1%(k)s" %locals())
mi@0 86 m = tuple(m)
mi@0 87 self.plot_markers(*m)
mi@0 88 plt.show(block=True)
mi@0 89
mi@0 90 # create a module-level instance that can be reused across several files
mi@0 91 onset_plot = OnsetPlot()
mi@0 92
mi@0 93 if __name__ == '__main__':
mi@0 94 obj = pickle.load(sys.stdin)
mi@0 95 onset_plot = OnsetPlot()
mi@0 96 onset_plot.update(obj)
mi@0 97 onset_plot.show()
mi@0 98
mi@0 99
mi@0 100