Ejemplo n.º 1
0
class FeaturesFile(object):
	""" Permette di creare file di features """
	detector = None
	extractor = None
	keywords = None
	root = None
	estension = None

	obj = None

	def __init__(self, detector, extractor, keywords, root=os.path.dirname(__file__)+os.path.sep+"imm"+os.path.sep, estension=".jpg"):
	#def __init__(self, detector, extractor, keywords, root="./imm2/", estension=".jpg"):		
		super(FeaturesFile, self).__init__()
		self.detector = detector
		self.extractor = extractor
		self.keywords = keywords
		self.root = root
		self.estension = estension
		if detector== "HOG" and extractor == "HOG":
			self.obj = HOG()
		else:
			self.obj = detectAndExtract(detector,extractor)

	def creaFileFeatures(self,key=None):

		if key == None:
			## PREPROCESSING PERCORSI IMMAGINI
			fm = FileManager()
			file_positive = self.root+self.keywords+"/"+self.keywords+"_" + self.detector + "_" + self.extractor + ".csv"

			# Creo una lista contenente tutte le immagini (jpg) positive (Filtro estension)
			listArrayPositive = fm.listNoHiddenFiles(self.root+self.keywords,self.estension)

			## SAVE FEATURES IN FILES
			# Controllo se e' gia' presente, altrimenti leggo il file e restituisco array
			if not os.path.isfile(file_positive):
				print "Nuovo File Features Positive " + self.detector + " + " + self.extractor + " creato."
				X_positive = []
				for k in range(0,len(listArrayPositive)): # Da eliminare file csv ed altri
					base_name = self.root+self.keywords+"/"+self.keywords+fm.correggi(k)+ self.estension
					print "Immagini " + str(k) + " -> " + base_name 
					ret = (self.obj.elabora(base_name)) #[0:cut_features]
					X_positive.append(ret)

				fm.arrayToCsv(X_positive,file_positive)
			else:
				print "File Features Positive " + self.detector + " + " + self.extractor + " esiste gia."
				X_positive = fm.csvToArray(file_positive)
		else:
			## PREPROCESSING PERCORSI IMMAGINI
			fm = FileManager()
			file_positive = self.root+key+"/"+key+"_" + self.detector + "_" + self.extractor + ".csv"

			# Creo una lista contenente tutte le immagini (jpg) positive (Filtro estension)
			listArrayPositive = fm.listNoHiddenFiles(self.root+key,self.estension)

			## SAVE FEATURES IN FILES
			# Controllo se e' gia' presente, altrimenti leggo il file e restituisco array
			if not os.path.isfile(file_positive):
				print "Nuovo File Features Positive " + self.detector + " + " + self.extractor + " creato."
				X_positive = []
				for k in range(0,len(listArrayPositive)): # Da eliminare file csv ed altri
					base_name = self.root+key+"/"+key+fm.correggi(k)+ self.estension
					print "Immagini " + str(k) + " -> " + base_name 
					ret = (self.obj.elabora(base_name)) #[0:cut_features]
					X_positive.append(ret)

				fm.arrayToCsv(X_positive,file_positive)
			else:
				print "File Features Positive " + self.detector + " + " + self.extractor + " esiste gia."
				X_positive = fm.csvToArray(file_positive)

		return X_positive

	def negativeFeatures(self):
		## PREPROCESSING PERCORSI IMMAGINI
		fm = FileManager()
		#file_negative = self.root+self.keywords+"/"+self.keywords+"_" + self.detector + "_" + self.extractor + "_negative.csv"

		# List dir contiene tutte le cartelle della root img
		listDir = fm.listNoHiddenDir(self.root)

		# Cerco l'indice della cartella della Keywords
		indexKeywords = listDir.index(self.keywords)
		# Vado ad eliminare nella lista cartelle quella della keywords
		listDir.pop(indexKeywords)

		X_negative = []
		for i in range(0,len(listDir)):
			file_negative = self.root+listDir[i]+"/"+listDir[i]+"_" + self.detector + "_" + self.extractor + ".csv"
			if not os.path.isfile(file_negative):
				self.creaFileFeatures(listDir[i])
			else:
				X = fm.csvToArray(file_negative)
				X_negative = X_negative + X
		return X_negative

	def negativeFeaturesSingleCat(self,category):
		## PREPROCESSING PERCORSI IMMAGINI
		fm = FileManager()

		X_negative = []
		#for i in range(0,len(listDir)):
		file_negative = self.root+category+"/"+category+"_" + self.detector + "_" + self.extractor + ".csv"
		if not os.path.isfile(file_negative):
			self.creaFileFeatures(category)
		else:
			X = fm.csvToArray(file_negative)
			X_negative = X_negative + X
		return X_negative		

	def getFeatures(self,category):
		X_positive = self.creaFileFeatures()
		X_negative = self.negativeFeatures()
		#X_negative = self.negativeFeaturesSingleCat(category)
		return X_positive, X_negative

	def getObj(self):
		return self.obj

	def getKeyword(self):
		return self.keywords