def _cvDissect(testSet,rf,mapping):
    for i in range(3):
        train,test = testSet.splitInTestAndTraining(frac=.7)
        rf.fit(train.data,train.targetNum)
        test.classifiedAs=rf.predict(test.data)
        test.hasBeenClassified = True
        classifierUtils.evaluateClassification(test,{0:'closed or narrow',1:'open or wide open'})
def main():
    path='/local/attale00/'
    
    allFiles = utils.getAllFiles(path+'Multi-PIE/extracted')
    
    allLabelFiles = utils.getAllFiles(path+'Multi-PIE/db_labels')
    np.random.shuffle(allLabelFiles)
    #get the labels from the database, for each person
    sliceat=250
    labelstest=utils.parseLabelFiles(path+'Multi-PIE/db_labels','sex',allLabelFiles[0:sliceat],cutoffSeq='',suffix='')
    
    labelstraining = utils.parseLabelFiles(path+'Multi-PIE/db_labels','sex',allLabelFiles[sliceat:],cutoffSeq='',suffix='')
    #now generate the label dict for each file
    
    labsTest={}
    labsTraining={}
    for f in allFiles:
        if labelstest.has_key(f[0:3]+'.labels'):
            labsTest[f]=labelstest[f[0:3]+'.labels']
        elif labelstraining.has_key(f[0:3]+'.labels'):
            labsTraining[f]=labelstraining[f[0:3]+'.labels' ]
            
    testSet = fg.dataContainer(labsTest)
    trainingSet = fg.dataContainer(labsTraining)
    
    roi=(0,64,0,64)
    ppc=(8,8)
    cpb=(8,8)
    
    fg.getHogFeature(testSet,roi,path=path+'Multi-PIE_grayScale64/',ending=None,extraMask = None,pixels_per_cell=ppc,cells_per_block=cpb)
    
    fg.getHogFeature(trainingSet,roi,path=path+'Multi-PIE_grayScale64/',ending=None,extraMask = None,pixels_per_cell=ppc, cells_per_block=cpb)
    
    testSet.targetNum=map(utils.mapSexLabel2Two,testSet.target)
    trainingSet.targetNum = map(utils.mapSexLabel2Two,trainingSet.target)
    
    rf1=classifierUtils.standardRF(max_features=np.sqrt(len(testSet.data[0])))
    rf2=classifierUtils.standardRF(max_features=np.sqrt(len(trainingSet.data[0])))
    
    rf1.fit(testSet.data,testSet.targetNum)
    
    s=rf1.score(trainingSet.data,trainingSet.targetNum)
    trainingSet.classifiedAs=rf1.predict(trainingSet.data)
    trainingSet.hasBeenClassified=True
    classifierUtils.evaluateClassification(trainingSet,{0:'male',1:'female'})
    
    
    
    print 'Score: {}'.format(s)
    
    print '----------other way around ----\n'
    
    rf2.fit(trainingSet.data,trainingSet.targetNum)
    
    s=rf2.score(testSet.data,testSet.targetNum)
    testSet.classifiedAs=rf2.predict(testSet.data)
    testSet.hasBeenClassified=True
    classifierUtils.evaluateClassification(testSet,{0:'male',1:'female'})
    print 'Score: {}'.format(s)
def _score(clf,testSet):
    score = clf.score(testSet.data,testSet.targetNum)
    testSet.hasBeenClassified = True
    classifierUtils.evaluateClassification(testSet,{0:'closed or narrow',1:'open or wide open'})
    print 'Overall Score: {:.3f}'.format(score)
    return
def main(nJobs = 1):

    path = '/local/attale00/GoodPose'
    path_ea = path+'/extracted_alpha'
    path_adata = path_ea + '/a_data'
    
    fileNames = utils.getAllFiles(path+'/targets');
    
    attribute = 'mouth'
    
    attribute_values = utils.parseLabelINIFile(path+'/mouth_labels/labels.ini',attribute);
    
    print('------------Attribute: \t'+attribute+' ---------------')
    for i in attribute_values:
        print('Value: \t'+i)
        
    print('----------------------------')
    print('----------parsing label files------')
    labs=utils.parseLabelFiles(path+'/mouth_labels','mouth',fileNames,cutoffSeq='.png',suffix='_face0.labels')
    #labs=utils.parseLabelFiles(path+'/mouth_labels/labels','glasses',fileNames,cutoffSeq='.png',suffix='_face0.labels')

    print('-----computing Features-----')
    #make 10 bin hist for each mouth
    #roi = (40,200,100,200)
    roi = (50,190,110,402) 
    roi2=(0,128,0,256)
    roi=(0,64,0,128)
    #roi2=(128,256,0,256)
    mouthSet = fg.dataContainer(labs)
    #fg.getHistogram(20,roi,hrange=(0,255),dataC = mouthSet,path = path+'/extracted/gradients/Direction/',ending='_0.png')
    eM=np.load('/home/attale00/Desktop/mouthMask.npy')
    m=cv2.resize(np.uint8(eM),(256,256));
    strel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))
    dil = cv2.dilate(m,strel)
    
    
    m=dil>0;
#    em=m[roi[0]:roi[1],roi[2]:roi[3]]
#    m= m !=True
  
    fg.getHogFeature(mouthSet,roi2,path=path_ea+'/grayScale128/',ending='_0.png',extraMask = None)
    #fg.getPixelValues(mouthSet,roi,path=path_ea+'/',ending='_0.png',mask =m, scaleFactor = 10)    
    #fg.getColorHistogram(mouthSet,roi,path=path_ea+'/',ending='_0.png',colorspace=None,range=(1.0,255.0),bins = 20)   
    mouthSet.targetNum=map(utils.mapMouthLabels2Two,mouthSet.target)
    #mouthSet.targetNum=map(utils.mapGlassesLabels2Two,mouthSet.target)
    
    
    score=[]
    frac=np.arange(0.2,1.0,.05)
    for i in frac:
        trainingSet,testSet=mouthSet.splitInTestAndTraining(frac=i)
        rf=classifierUtils.standardRF(max_features = np.sqrt(len(mouthSet.data[0])))
        rf.fit(trainingSet.data,trainingSet.targetNum)
        score.append(rf.score(testSet.data,testSet.targetNum))
        testSet.hasBeenClassified=True
        testSet.classifiedAs=rf.predict(testSet.data)
        print '---------------- {} -----------'.format(i)
        classifierUtils.evaluateClassification(testSet,{0:'closed',1:'open'})
    plt.plot(frac,score,'-*')
    plt.show()        
  
    return