diff Result/ProcessGroundS2.py @ 2:46fb79167a61 tip

Main Code
author Victor Padilla <victor.padilla.mc@gmail.com>
date Mon, 04 May 2015 22:56:18 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Result/ProcessGroundS2.py	Mon May 04 22:56:18 2015 +0200
@@ -0,0 +1,155 @@
+
+
+'''
+Created on 13/06/2014
+
+@author: victor
+'''
+
+from Process import PipelineAlignment
+from Process import SymbolConversion
+from Functions import MeasureFunctions
+
+class ProcessGroundS2:
+            
+    def getSimilarity(self,omrs,part):
+        '''
+        main function to get the similarity vs the ground
+        
+        return:
+            result=percentage of similarity
+            errors= array with errors to write in xml
+            scoreWithErrors= score to write with colors
+        '''
+        pa=PipelineAlignment()
+        mf=MeasureFunctions()
+        for omr in omrs:
+            try:
+                omr=mf.convertVoicesToChord(omr)
+            except:
+                pass
+            
+        omr_symbolsAlign=pa.alignGround(omrs,part)
+        
+        omr_ground=omr_symbolsAlign[0]
+        omr_part=omr_symbolsAlign[1] 
+        
+        count=0
+        symbolsLength=0
+        Errors=[]
+        arrErrors=[]
+        for i in range(len(omr_ground)):
+            
+            sGround=omr_ground[i]
+            sOMR=omr_part[i]
+            if isinstance(sGround,list):
+                sGroundSimple=sGround[0]
+            else:
+                sGroundSimple=sGround
+            if isinstance(sOMR,list):
+                sOMRSimple=sOMR[0]
+            else:
+                sOMRSimple=sOMR
+            
+            #Removing grace notes
+            if(self.isGraceNote(sGround) or self.isGraceNote(sOMR)):
+                continue 
+            
+            if(self.isBarline(sGroundSimple) or self.isBarline(sOMRSimple)):
+                continue 
+            #Removing Time Signatures. PS introduce a lot extra time signatures   
+#             if(self.isKeySignature(sGroundSimple) or self.isKeySignature(sOMRSimple)):
+#                 continue  
+            #Removing clef errors
+            if(self.isClef(sGroundSimple) or self.isClef(sOMRSimple)):
+                continue  
+            if(self.isRest(sGroundSimple) or self.isRest(sOMRSimple)):
+                continue  
+            #Removing extra rest due to voices
+#             if self.isRest(sOMRSimple):
+#                 if sGroundSimple=="*":
+#                     continue  
+              
+            if (sGroundSimple==sOMRSimple):
+                if sGround[0]==sOMR[0] and sGround[1]==sOMR[1]:#not counting ties
+                #if sGround[0]==sOMR[0]:
+                    count+=1
+                else:
+                    Errors.append([sGround,sOMR,i])
+                    arrErrors.append(i)
+                               
+            else:
+                Errors.append([sGround,sOMR,i])
+                arrErrors.append(i)
+                if sOMRSimple=="*":
+                    try:
+                        omr_part[i]=omr_ground[i]
+                        omr_part[i][5]="#00ff00" #note missing
+                    except:
+                        print "error",omr_part[i]
+                elif sGroundSimple=="*":
+                    try:
+                        omr_part[i][5]="#0000ff" #extra note
+                    except:
+                        print "error",omr_part[i]
+                else:
+                    try:
+                        omr_part[i]=omr_ground[i]
+                        omr_part[i][5]="#ff0000" #mistake in note
+                    except:
+                        print "error",omr_part[i]
+
+                
+            symbolsLength+=1
+            
+        result=(float(count)/symbolsLength)*100    
+        sc=SymbolConversion()   
+        omr_part=sc.setVoices(omr_part)
+        scoreWithErrors=sc.convertM21(omr_part)
+        return result,Errors,scoreWithErrors
+    
+    def isGraceNote(self,s):
+        '''
+        Returns true if the symbol is a grace note
+        '''
+        if isinstance(s,list):
+            if s[0].find('N:')!=-1: 
+                duration=s[1]
+                if float(duration)==0:
+                    return True
+           
+        return False
+    
+    def isKeySignature(self,s):
+        '''
+        Returns true if the symbol is a key signature
+        '''
+        if s.find('KS:')!=-1: 
+                return True
+        return False
+    
+    def isRest(self,s):
+        '''
+        Returns true if the symbol is a rest
+        '''
+        if s.find('R:')!=-1: 
+                return True
+        return False
+    
+    def isBarline(self,s):
+        '''
+        Returns true if the symbol is a barline
+        '''
+        if s.find('!')!=-1: 
+                return True
+        return False
+    
+    def isClef(self,s):
+        '''
+        Returns true if the symbol is a clef
+        '''
+        if s.find('CL:')!=-1: 
+                return True
+        return False
+               
+