def __init__(self, eyetrackfolder, subjectassessmentfilename, userfilename): super(Eyetrack_Subject_Analysis, self).__init__() self.subject_processor = SubjectAssessmentData( subjectassessmentfilename) self.curEyetrackDataFolder = eyetrackfolder self.eyetrackDataFeature = np.array([]) self.mosForEachImage = {} self.meanFeatureValueForEachImage = {} self.pupilDiameterset = {} self.individualPupilFeature = {} self.meanvalueforpupilsize = {} self.userinfofilename = userfilename self.userInfo = {}
def __init__(self, eyetrackfolder,subjectassessmentfilename,userfilename): super(Eyetrack_Subject_Analysis, self).__init__() self.subject_processor = SubjectAssessmentData(subjectassessmentfilename) self.curEyetrackDataFolder = eyetrackfolder self.eyetrackDataFeature = np.array([]) self.mosForEachImage = {} self.meanFeatureValueForEachImage = {} self.pupilDiameterset = {} self.individualPupilFeature = {} self.meanvalueforpupilsize = {} self.userinfofilename = userfilename self.userInfo = {}
class Eyetrack_Subject_Analysis(object): """docstring for Eyetrack_Subject_Analysis""" def __init__(self, eyetrackfolder, subjectassessmentfilename, userfilename): super(Eyetrack_Subject_Analysis, self).__init__() self.subject_processor = SubjectAssessmentData( subjectassessmentfilename) self.curEyetrackDataFolder = eyetrackfolder self.eyetrackDataFeature = np.array([]) self.mosForEachImage = {} self.meanFeatureValueForEachImage = {} self.pupilDiameterset = {} self.individualPupilFeature = {} self.meanvalueforpupilsize = {} self.userinfofilename = userfilename self.userInfo = {} def getUserInfo(self): userinfoprocessor = UserInfo(self.userinfofilename) self.userInfo = userinfoprocessor.readUserInfoFile() def getDisparityAngularFile(self, disparityfilesavepath): files = os.listdir(self.curEyetrackDataFolder) featureSet = [] index = 0 for file in files: print index, file index = index + 1 if os.path.splitext(file)[1] == ".csv": curfile = self.curEyetrackDataFolder + '/' + file curEyetrackDataProcessor = EyetrackerData(curfile) curEyetrackDataProcessor.getDisparityAngularFile( disparityfilesavepath) def extrackEyetrackFeatures(self, basicEye): self.getUserInfo() files = os.listdir(self.curEyetrackDataFolder) featureSet = [] index = 0 for file in files: print index, file index = index + 1 if os.path.splitext(file)[1] == ".csv": curRecord = [] splitresult = file.split('_') if len(splitresult) == 4: imgName = splitresult[3][:-4] + '.jpg' userName = splitresult[2] else: imgName = splitresult[4][:-4] + '.jpg' userName = splitresult[2] + '_' + splitresult[3] curRecord.append(imgName) if basicEye == 'left' or basicEye == 'right': curfile = self.curEyetrackDataFolder + '/' + file elif basicEye == 'main' or basicEye == 'nomain': print "Please Modify the folder for your eyetracker data" if self.userInfo[ userName] == -1: #-1 means you choose the main eye and 1 means you choose the Auxiliary eye curfile = "Your left eye folder" + '/' + file else: curfile = "Your right eye folder" + file else: print "Wrong choosed for the basic eye!" return curEyetrackDataProcessor = EyetrackerData(curfile) curEyetrackFeatures = curEyetrackDataProcessor.getFixationFeatures( ) curRecord.extend(curEyetrackFeatures) featureSet.append(curRecord) print curRecord self.eyetrackDataFeature = np.array(featureSet) def getRelationBetweenEyetrackFeaturesAndSubjectScore(self, basicEye): """验证总体特征与主观评分之间的相关性""" self.extrackEyetrackFeatures(basicEye) self.mosForEachImage = self.subject_processor.getAvgMosForEachImage() #self.getPupilFeature() if len(self.meanFeatureValueForEachImage) == 0: self.getMeanFeatureValueForEachImage(basicEye) #self.svmTrain() # w,h = self.eyetrackDataFeature.shape # print w,h # percent=range(5,60,5) # plccset=np.array([]) # for i in range(h-1): # curPlcc = self.getRelationBetweenEyetrackFeatureAndSubjectScore(i) # plccset = np.append(plccset,curPlcc) # plt.xlabel('Disparity Percent in front of the sorted serial') # plt.ylabel('LCC') # xmajorLocator = plt.MultipleLocator(5) # ymajorLocator = plt.MultipleLocator(0.1) # ax = plt.subplot(111) # plt.plot(percent,plccset,'-r*') # ax.xaxis.set_major_locator(xmajorLocator) # ax.yaxis.set_major_locator(ymajorLocator) # plt.grid() # plt.title('Relationship between the percentage we choosed and mos') # # plt.show() # self.getRelationBetweenEyetrackFeatureAndSubjectScore(6) def getRelationBetweenEyetrackFeatureAndSubjectScore(self, featureindex): """验证各特征与主观评分之间的相关性""" if len(self.mosForEachImage) != len(self.meanFeatureValueForEachImage): raise ValueError( 'the number of mos and feature is not equal,please check it') else: feature_score_pairlist = [] for key in self.mosForEachImage: curList = [ key, self.mosForEachImage[key], self.meanFeatureValueForEachImage[key][featureindex] ] feature_score_pairlist.append(curList) feature_score_pairlist = np.array(feature_score_pairlist) feature_score_pairarray = np.array(feature_score_pairlist[:, 1:], dtype=float) x = feature_score_pairarray[:, 0] y = feature_score_pairarray[:, 1] plcc, pval = statstool.pearsonr(x, y) srocc, pval = statstool.spearmanr(x, y) print "feature %d,%f,%f" % (featureindex, plcc, srocc) return plcc #plt.plot(x,'b-') #plt.plot(y,'r-') #plt.show() def getMeanFeatureValueForEachImage(self, basicEye): """获取针对每幅图像的平均特征值""" if len(self.eyetrackDataFeature) == 0: self.extrackEyetrackFeatures(basicEye) classific = {} index = 0 for item in self.eyetrackDataFeature: imgName = item[0] if imgName not in classific: classific[imgName] = set([index]) else: classific[imgName].add(index) index += 1 # blinkfeaturesprocessor = EyetrackingDataBlinkFeaturesFactory() # blinkfeatures = blinkfeaturesprocessor.getEyeBlinkFeatures() for key in classific: serial = list(classific[key]) tmp2 = self.eyetrackDataFeature[serial, 1:] tmp = np.array(tmp2, dtype=float) self.meanFeatureValueForEachImage[key] = np.mean(tmp, axis=0) # tmp3 = np.mean(blinkfeatures[key],axis=0) # self.meanFeatureValueForEachImage[key] = np.hstack((tmp3,self.meanFeatureValueForEachImage[key])) #self.meanFeatureValueForEachImage[key] = np.append(self.meanFeatureValueForEachImage[key],self.meanvalueforpupilsize[key]) def getPupilFeature(self): individualpupilsize = self.calAvgPupilDiameter() averagepupilsizeforrecord = self.calAvgPupilForRecord() meanvalueforpupilsize = {} for key in averagepupilsizeforrecord: splitResult = key.split('_') imgName = splitResult[-1] if len(splitResult) == 2: userName = splitResult[0] else: userName = splitResult[0] + '_' + splitResult[1] curpupilsize = averagepupilsizeforrecord[ key] / individualpupilsize[userName] if imgName not in meanvalueforpupilsize: meanvalueforpupilsize[imgName] = curpupilsize else: meanvalueforpupilsize[imgName] = np.append( meanvalueforpupilsize[imgName], curpupilsize) for key in meanvalueforpupilsize: meanvalueforpupilsize[key] = meanvalueforpupilsize[key].reshape( len(meanvalueforpupilsize[key]) / 2, 2) meanvalueforpupilsize[key] = np.mean(meanvalueforpupilsize[key], axis=0) self.meanvalueforpupilsize = meanvalueforpupilsize def calAvgPupilDiameter(self): avgpupilsize = {} for key in self.pupilDiameterset: avgpupilsize[key] = np.mean(self.pupilDiameterset[key], axis=0) return avgpupilsize def calAvgPupilForRecord(self): avgpupilsizeForRecord = {} for key in self.individualPupilFeature: avgpupilsizeForRecord[key] = np.mean( self.individualPupilFeature[key], axis=0) return avgpupilsizeForRecord def getEyetrackerDataFeatures(self, basicEye, featuresfilesavename): """svm 学习训练 """ self.getRelationBetweenEyetrackFeaturesAndSubjectScore(basicEye) feature_mos_set = np.array([]) num = 0 for key in self.mosForEachImage: cur_set = np.array(self.mosForEachImage[key]) cur_set = np.append(cur_set, self.meanFeatureValueForEachImage[key]) length = len(cur_set) feature_mos_set = np.append(feature_mos_set, cur_set) num += 1 feature_mos_set = feature_mos_set.reshape(num, length) csvfile = file(featuresfilesavename, 'a+') writer = csv.writer(csvfile) writer.writerows(feature_mos_set) csvfile.close()
class Eyetrack_Subject_Analysis(object): """docstring for Eyetrack_Subject_Analysis""" def __init__(self, eyetrackfolder,subjectassessmentfilename,userfilename): super(Eyetrack_Subject_Analysis, self).__init__() self.subject_processor = SubjectAssessmentData(subjectassessmentfilename) self.curEyetrackDataFolder = eyetrackfolder self.eyetrackDataFeature = np.array([]) self.mosForEachImage = {} self.meanFeatureValueForEachImage = {} self.pupilDiameterset = {} self.individualPupilFeature = {} self.meanvalueforpupilsize = {} self.userinfofilename = userfilename self.userInfo = {} def getUserInfo(self): userinfoprocessor = UserInfo(self.userinfofilename) self.userInfo = userinfoprocessor.readUserInfoFile() def getDisparityAngularFile(self,disparityfilesavepath): files = os.listdir(self.curEyetrackDataFolder) featureSet = [] index = 0 for file in files: print index,file index = index+1 if os.path.splitext(file)[1] == ".csv": curfile = self.curEyetrackDataFolder+'/'+file curEyetrackDataProcessor = EyetrackerData(curfile) curEyetrackDataProcessor.getDisparityAngularFile(disparityfilesavepath) def extrackEyetrackFeatures(self,basicEye): self.getUserInfo() files = os.listdir(self.curEyetrackDataFolder) featureSet = [] index = 0 for file in files: print index,file index = index+1 if os.path.splitext(file)[1] == ".csv": curRecord = [] splitresult = file.split('_') if len(splitresult) == 4: imgName = splitresult[3][:-4]+'.jpg' userName = splitresult[2] else: imgName = splitresult[4][:-4]+'.jpg' userName = splitresult[2]+'_'+splitresult[3] curRecord.append(imgName) if basicEye == 'left' or basicEye == 'right': curfile = self.curEyetrackDataFolder+'/'+file elif basicEye == 'main' or basicEye == 'nomain': print "Please Modify the folder for your eyetracker data" if self.userInfo[userName] == -1:#-1 means you choose the main eye and 1 means you choose the Auxiliary eye curfile = "Your left eye folder"+'/'+file else: curfile = "Your right eye folder"+file else: print "Wrong choosed for the basic eye!"; return curEyetrackDataProcessor = EyetrackerData(curfile) curEyetrackFeatures = curEyetrackDataProcessor.getFixationFeatures() curRecord.extend(curEyetrackFeatures) featureSet.append(curRecord) print curRecord self.eyetrackDataFeature = np.array(featureSet) def getRelationBetweenEyetrackFeaturesAndSubjectScore(self,basicEye): """验证总体特征与主观评分之间的相关性""" self.extrackEyetrackFeatures(basicEye) self.mosForEachImage = self.subject_processor.getAvgMosForEachImage() #self.getPupilFeature() if len(self.meanFeatureValueForEachImage) == 0: self.getMeanFeatureValueForEachImage(basicEye) #self.svmTrain() # w,h = self.eyetrackDataFeature.shape # print w,h # percent=range(5,60,5) # plccset=np.array([]) # for i in range(h-1): # curPlcc = self.getRelationBetweenEyetrackFeatureAndSubjectScore(i) # plccset = np.append(plccset,curPlcc) # plt.xlabel('Disparity Percent in front of the sorted serial') # plt.ylabel('LCC') # xmajorLocator = plt.MultipleLocator(5) # ymajorLocator = plt.MultipleLocator(0.1) # ax = plt.subplot(111) # plt.plot(percent,plccset,'-r*') # ax.xaxis.set_major_locator(xmajorLocator) # ax.yaxis.set_major_locator(ymajorLocator) # plt.grid() # plt.title('Relationship between the percentage we choosed and mos') # # plt.show() # self.getRelationBetweenEyetrackFeatureAndSubjectScore(6) def getRelationBetweenEyetrackFeatureAndSubjectScore(self,featureindex): """验证各特征与主观评分之间的相关性""" if len(self.mosForEachImage) != len(self.meanFeatureValueForEachImage): raise ValueError('the number of mos and feature is not equal,please check it') else: feature_score_pairlist = [] for key in self.mosForEachImage: curList = [key,self.mosForEachImage[key],self.meanFeatureValueForEachImage[key][featureindex]] feature_score_pairlist.append(curList) feature_score_pairlist = np.array(feature_score_pairlist) feature_score_pairarray = np.array(feature_score_pairlist[:,1:], dtype=float) x = feature_score_pairarray[:,0] y = feature_score_pairarray[:,1] plcc,pval = statstool.pearsonr(x,y) srocc,pval = statstool.spearmanr(x,y) print "feature %d,%f,%f" %(featureindex,plcc,srocc) return plcc #plt.plot(x,'b-') #plt.plot(y,'r-') #plt.show() def getMeanFeatureValueForEachImage(self,basicEye): """获取针对每幅图像的平均特征值""" if len(self.eyetrackDataFeature) == 0: self.extrackEyetrackFeatures(basicEye) classific = {} index = 0 for item in self.eyetrackDataFeature: imgName = item[0] if imgName not in classific: classific[imgName] = set([index]) else: classific[imgName].add(index) index += 1 # blinkfeaturesprocessor = EyetrackingDataBlinkFeaturesFactory() # blinkfeatures = blinkfeaturesprocessor.getEyeBlinkFeatures() for key in classific: serial = list(classific[key]) tmp2 = self.eyetrackDataFeature[serial,1:] tmp = np.array(tmp2,dtype=float) self.meanFeatureValueForEachImage[key] = np.mean(tmp,axis = 0) # tmp3 = np.mean(blinkfeatures[key],axis=0) # self.meanFeatureValueForEachImage[key] = np.hstack((tmp3,self.meanFeatureValueForEachImage[key])) #self.meanFeatureValueForEachImage[key] = np.append(self.meanFeatureValueForEachImage[key],self.meanvalueforpupilsize[key]) def getPupilFeature(self): individualpupilsize = self.calAvgPupilDiameter() averagepupilsizeforrecord = self.calAvgPupilForRecord() meanvalueforpupilsize = {} for key in averagepupilsizeforrecord: splitResult = key.split('_') imgName = splitResult[-1] if len(splitResult) == 2: userName = splitResult[0] else: userName = splitResult[0]+'_'+splitResult[1] curpupilsize = averagepupilsizeforrecord[key]/individualpupilsize[userName] if imgName not in meanvalueforpupilsize: meanvalueforpupilsize[imgName] = curpupilsize else: meanvalueforpupilsize[imgName] = np.append(meanvalueforpupilsize[imgName],curpupilsize) for key in meanvalueforpupilsize: meanvalueforpupilsize[key] = meanvalueforpupilsize[key].reshape(len(meanvalueforpupilsize[key])/2,2) meanvalueforpupilsize[key] = np.mean(meanvalueforpupilsize[key],axis=0) self.meanvalueforpupilsize = meanvalueforpupilsize def calAvgPupilDiameter(self): avgpupilsize = {} for key in self.pupilDiameterset: avgpupilsize[key] = np.mean(self.pupilDiameterset[key],axis=0) return avgpupilsize def calAvgPupilForRecord(self): avgpupilsizeForRecord = {} for key in self.individualPupilFeature: avgpupilsizeForRecord[key] = np.mean(self.individualPupilFeature[key],axis=0) return avgpupilsizeForRecord def getEyetrackerDataFeatures(self,basicEye,featuresfilesavename): """svm 学习训练 """ self.getRelationBetweenEyetrackFeaturesAndSubjectScore(basicEye) feature_mos_set = np.array([]) num = 0 for key in self.mosForEachImage: cur_set = np.array(self.mosForEachImage[key]) cur_set = np.append(cur_set,self.meanFeatureValueForEachImage[key]) length = len(cur_set) feature_mos_set = np.append(feature_mos_set,cur_set) num += 1 feature_mos_set = feature_mos_set.reshape(num,length) csvfile=file(featuresfilesavename,'a+') writer=csv.writer(csvfile) writer.writerows(feature_mos_set) csvfile.close()