def __init__(self, nScales, nOrientations):
     self.excelFile = "CASME2-coding-20140508.xlsx"
     self.dataDir = "C:\Users\Valerie\Desktop\MicroExpress\CASME2\Cropped\Cropped"
     #self.dataDir = "C:\Users\Valerie\Desktop\MicroExpress\CASME2\CASME2_RAW\CASME2-RAW"
     self.mainDir = "C:\Users\Valerie\Desktop\MicroExpress\CASME2"
     self.nScales = nScales
     self.nOrient = nOrientations
     self.featureOut = "F:\output"
     self.gabor = GaborExtractor(nScales, nOrientations, 21)
 def __init__( self, nScales, nOrientations ) :
     self.excelFile = "CASME2-coding-20140508.xlsx" 
     self.dataDir = "C:\Users\Valerie\Desktop\MicroExpress\CASME2\Cropped\Cropped"
     #self.dataDir = "C:\Users\Valerie\Desktop\MicroExpress\CASME2\CASME2_RAW\CASME2-RAW"
     self.mainDir = "C:\Users\Valerie\Desktop\MicroExpress\CASME2"
     self.nScales = nScales
     self.nOrient = nOrientations
     self.featureOut = "F:\output"
     self.gabor = GaborExtractor( nScales, nOrientations, 21)
class CASMEParserMem( object ):
    def __init__( self, nScales, nOrientations ) :
        self.excelFile = "CASME2-coding-20140508.xlsx" 
        self.dataDir = "C:\Users\Valerie\Desktop\MicroExpress\CASME2\Cropped\Cropped"
        #self.dataDir = "C:\Users\Valerie\Desktop\MicroExpress\CASME2\CASME2_RAW\CASME2-RAW"
        self.mainDir = "C:\Users\Valerie\Desktop\MicroExpress\CASME2"
        self.nScales = nScales
        self.nOrient = nOrientations
        self.featureOut = "F:\output"
        self.gabor = GaborExtractor( nScales, nOrientations, 21)

    def parseLabels( self ):
        ## Read in excel file to data frame
        excelFile = os.path.join( self.mainDir, self.excelFile )
        table = pd.ExcelFile( excelFile )
        t = table.parse( )


        ## Init parsed data containers
        labelInfo  = {}
        frameInfo = {}

        ## Iterate through images and build label frame
        
        tf = 0
        s = 0
        
        ## Iterate through files and generate labels and features

        ## For each subject
        for sub in os.listdir( self.dataDir ): 
            v = 0
            ## For each video 
            for vid in os.listdir( os.path.join( self.dataDir, sub ) ):
                if vid.endswith( "avi" ):   #skip avis
                    break
               
                ## Each line in main excel file proports to one video, get that info here
                intLabelInfo, labelParams = CASMELabels.getLabelInfo( sub, vid, t, [s, v] )
                f = 0
                
                ## Process each frame
                for frame in os.listdir( os.path.join( self.dataDir, sub, vid ) ):

                    frameInfo = CASMELabels.getFrameParams( intLabelInfo, labelParams, f, frame )
                    frameInfo.update( intLabelInfo )
                    labelInfo.update( { tf :  frameInfo } )
                    
                    f += 1
                    tf += 1
                v += 1
            s += 1
        return labelInfo

    def writeFeatures( self ):
        img = pp.readInImg( os.path.join( self.dataDir, "sub01/EP02_01f/reg_img46.jpg" )    )

       ## For each subject
        for sub in os.listdir( self.dataDir ): 
            ## For each video 
            for vid in os.listdir( os.path.join( self.dataDir, sub ) ):
                print vid
                if vid.endswith( "avi" ):   #skip avis
                    break
                ## Process each frame
                for frame in os.listdir( os.path.join( self.dataDir, sub, vid ) ):
                    img =  pp.readInImg( os.path.join( self.dataDir, sub, vid, frame ) )
                    kernels = self.gabor.generateGaborKernels( )

                    newFeatures = np.ravel(self.gabor.processGaborRaw( img, kernels )  )
                    featStr = map( lambda x : '%.15f' % x, newFeatures )
                    featOut = str.join( ',' , featStr )
                    f = open( os.path.join( self.featureOut, "Gabors-S%d-O%d.csv" % (self.nScales, self.nOrient)), "a" )
                    
                    f.write( "%s\n" % featOut )
                    f.close()
                    
    def run( self ):
        labelInfo = self.parseLabels()
        self.writeFeatures()
        return labelInfo
class CASMEParserMem(object):
    def __init__(self, nScales, nOrientations):
        self.excelFile = "CASME2-coding-20140508.xlsx"
        self.dataDir = "C:\Users\Valerie\Desktop\MicroExpress\CASME2\Cropped\Cropped"
        #self.dataDir = "C:\Users\Valerie\Desktop\MicroExpress\CASME2\CASME2_RAW\CASME2-RAW"
        self.mainDir = "C:\Users\Valerie\Desktop\MicroExpress\CASME2"
        self.nScales = nScales
        self.nOrient = nOrientations
        self.featureOut = "F:\output"
        self.gabor = GaborExtractor(nScales, nOrientations, 21)

    def parseLabels(self):
        ## Read in excel file to data frame
        excelFile = os.path.join(self.mainDir, self.excelFile)
        table = pd.ExcelFile(excelFile)
        t = table.parse()

        ## Init parsed data containers
        labelInfo = {}
        frameInfo = {}

        ## Iterate through images and build label frame

        tf = 0
        s = 0

        ## Iterate through files and generate labels and features

        ## For each subject
        for sub in os.listdir(self.dataDir):
            v = 0
            ## For each video
            for vid in os.listdir(os.path.join(self.dataDir, sub)):
                if vid.endswith("avi"):  #skip avis
                    break

                ## Each line in main excel file proports to one video, get that info here
                intLabelInfo, labelParams = CASMELabels.getLabelInfo(
                    sub, vid, t, [s, v])
                f = 0

                ## Process each frame
                for frame in os.listdir(os.path.join(self.dataDir, sub, vid)):

                    frameInfo = CASMELabels.getFrameParams(
                        intLabelInfo, labelParams, f, frame)
                    frameInfo.update(intLabelInfo)
                    labelInfo.update({tf: frameInfo})

                    f += 1
                    tf += 1
                v += 1
            s += 1
        return labelInfo

    def writeFeatures(self):
        img = pp.readInImg(
            os.path.join(self.dataDir, "sub01/EP02_01f/reg_img46.jpg"))

        ## For each subject
        for sub in os.listdir(self.dataDir):
            ## For each video
            for vid in os.listdir(os.path.join(self.dataDir, sub)):
                print vid
                if vid.endswith("avi"):  #skip avis
                    break
                ## Process each frame
                for frame in os.listdir(os.path.join(self.dataDir, sub, vid)):
                    img = pp.readInImg(
                        os.path.join(self.dataDir, sub, vid, frame))
                    kernels = self.gabor.generateGaborKernels()

                    newFeatures = np.ravel(
                        self.gabor.processGaborRaw(img, kernels))
                    featStr = map(lambda x: '%.15f' % x, newFeatures)
                    featOut = str.join(',', featStr)
                    f = open(
                        os.path.join(
                            self.featureOut, "Gabors-S%d-O%d.csv" %
                            (self.nScales, self.nOrient)), "a")

                    f.write("%s\n" % featOut)
                    f.close()

    def run(self):
        labelInfo = self.parseLabels()
        self.writeFeatures()
        return labelInfo