Example #1
0
	def analyzeFrame(self, rects):
		self.pruneFaceList()
		#Case 1
		# if len(rects)>len(self.visibleFaceList):
			# print "case1"
		if len(self.visibleFaceList)>0:
			megaList, breakPoint = self.dualListHelper(self.visibleFaceList, self.notVisibleFaceList, rects)
			assignmentList = [-1]*(len(self.visibleFaceList)+len(self.notVisibleFaceList))
			totalAssigned=0
			visibleFaces = len(self.visibleFaceList)
			totalFaces = len(self.visibleFaceList)+len(self.notVisibleFaceList)
			indices = []

			while totalAssigned < len(rects):
				# print "WHILE"
				# print len(rects)
				index = 0
				highest = 0
				highFaceIndex = 0
				for i in range(len(megaList)):
					if assignmentList[i] == -1:
						currentVal = max(megaList[i])
						# print currentVal
						currentIndex = megaList[i].index(currentVal)
						# print currentIndex not in assignmentList
						if currentVal > highest and currentIndex not in assignmentList and currentVal > self.minRemovalScore:
							highest = currentVal
							index = currentIndex
							highFaceIndex = i
				if highest != 0:
					if highFaceIndex > breakPoint:

						face = self.notVisibleFaceList.pop(highFaceIndex-breakPoint-1)
						self.visibleFaceList.append(face)
						index = len(self.visibleFaceList)-1
					assignmentList[highFaceIndex] = currentIndex
					indices.append(highFaceIndex)
					totalAssigned +=1
				else:
					print "HIGHEST = 0"
					for j in range(len(rects)):
						# print rects
						if j not in assignmentList:
							# print "here"
							face = Face()
							face.id = self.totalFaceCount
							self.totalFaceCount += 1
							self.visibleFaceList.append(face)
							assignmentList.append(j)
							indices.append(len(assignmentList)-1)
							totalAssigned += 1
			# print assignmentList
			self.makeAssignments(assignmentList,rects, indices, visibleFaces)
			for i in range(visibleFaces-1):
				if assignmentList[i] == -1:
					face = self.visibleFaceList.pop(i)
					self.notVisibleFaceList.append(face)
		else:
			for i in range(len(rects)):
				self.addNewFace(rects[i])
Example #2
0
	def addNewFace(self, location):
		fc = Face()
		fc.id = self.totalFaceCount
		self.totalFaceCount += 1
		fc.setPosition(location)
		self.visibleFaceList.append(fc)
Example #3
0
	def analyzeFrame3(self,rects):
		self.pruneFaceList()
		if len(rects)>len(self.visibleFaceList):
			if len(self.visibleFaceList)>0:
				megaList = self.listHelper(self.visibleFaceList,rects)
				# print megaList
				assignmentList = []
				for i in range(len(megaList)):
					highest = 0
					index = 0
					for j in range(len(megaList[i])):
						# ensure that face hasn't been used already
						if megaList[i][j] >= highest and j not in assignmentList:
							index = j
							highest = megaList[i][j]
					assignmentList.append(index)

				self.makeAssignments(assignmentList, rects)

				notList = self.listHelper(self.notVisibleFaceList,rects)

				if notList != []:
					for i in range(len(rects)):
						index = -1
						highest = 0
						for j in range(len(self.notVisibleFaceList)):
							if j not in assignmentList:
							# print notList
								if notList[i][j] > highest:
									index = j
									highest = notList[j][i]
						if index != -1:
							if notList[index][i] > self.minRemovalScore:
								face = self.notVisibleFaceList.pop(index)
								face.setPosition(rects[i])
								self.visibleFaceList.append(face)
						else:
							fc = Face()
							fc.id = self.totalFaceCount
							# print fc.id
							self.totalFaceCount += 1
							fc.setPosition(rects[i])
							self.visibleFaceList.append(fc)
				else:
					for i in range(len(rects)):
						fc = Face()
						fc.id = self.totalFaceCount
						# print fc.id
						self.totalFaceCount += 1
						fc.setPosition(rects[i])
						self.visibleFaceList.append(fc)
			else:
				for i in range(len(rects)):
					fc = Face()
					fc.id = self.totalFaceCount
					# print fc.id
					self.totalFaceCount += 1
					fc.setPosition(rects[i])
					self.visibleFaceList.append(fc)


		elif len(rects)==len(self.visibleFaceList):
			megaList = self.listHelper(self.visibleFaceList,rects)
			# print megaList
			assignmentList = []
			for i in range(len(megaList)):
				highest = 0
				index = 0
				for j in range(len(megaList[i])):
					if megaList[i][j] >= highest and j not in assignmentList:
						index = j
						highest = megaList[i][j]
				assignmentList.append(index)
			
			self.makeAssignments(assignmentList, rects)

		else:
			# less rects than faces
			megaList = self.listHelper(self.visibleFaceList,rects)
			# print megaList
			assignmentList = []
			probabilityList = []
			for i in range(len(megaList)):
				highest = 0
				index = 0
				for j in range(len(megaList[i])):
					if megaList[i][j] >= highest and j not in assignmentList:
						index = j
						highest = megaList[i][j]
				assignmentList.append(index)
				probabilityList.append(highest)

			if len(probabilityList)!=0:
				lowIndex = probabilityList.index(min(probabilityList))
				self.notVisibleFaceList.append(self.visibleFaceList.pop(lowIndex))
				assignmentList.pop(lowIndex)
				self.makeAssignments(assignmentList, rects)
Example #4
0
	def analyzeFrame2(self, rects):
		self.pruneFaceList()
		#Case 1
		if len(rects)>len(self.visibleFaceList):
			# print "case1"
			if len(self.visibleFaceList)>0:
				megaList, breakPoint = self.dualListHelper(self.visibleFaceList, self.notVisibleFaceList, rects)
				assignmentList = []
				for i in range(len(megaList)):
					highest = 0
					index = 0
					for j in range(len(megaList[i])):
						# ensure that face hasn't been used already
						if megaList[i][j] >= highest and j not in assignmentList:
							index = j
							highest = megaList[i][j]
					if highest > self.minRemovalScore:
						if i > breakPoint:
							face = self.notVisibleFaceList.pop(i-breakPoint-1)
							self.visibleFaceList.append(face)
							index = len(self.visibleFaceList)-1
						assignmentList.append(index)
					else:
						face = Face()
						face.id = self.totalFaceCount
						self.totalFaceCount += 1
						self.visibleFaceList.append(face)
						assignmentList.append(len(self.visibleFaceList)-1)

				self.makeAssignments(assignmentList, rects)
				k = 0
				while k < breakPoint:
					if k not in assignmentList:
						face = self.visibleFaceList.pop(k)
						self.notVisibleFaceList.append(face)
					k+=1

			else:
				for i in range(len(rects)):
					self.addNewFace(rects[i])

		#Case 2
		elif len(rects)==len(self.visibleFaceList):
			# print "case2"
			megaList, breakPoint = self.dualListHelper(self.visibleFaceList, self.notVisibleFaceList, rects)
			assignmentList = []
			# print "list"
			# print megaList
			for i in range(len(megaList)):
				highest = 0
				index = 0
				for j in range(len(megaList[i])):
					# ensure that face hasn't been used already
					if megaList[i][j] >= highest and j not in assignmentList:
						index = j
						highest = megaList[i][j]
				if highest > self.minRemovalScore:
					# print "problem case?"
					if i > breakPoint:
						face = self.notVisibleFaceList.pop(i-breakPoint-1)
						self.visibleFaceList.append(face)
						index = len(self.visibleFaceList)-1
					assignmentList.append(index)
				else:
					face = Face()
					face.id = self.totalFaceCount
					self.totalFaceCount += 1
					self.visibleFaceList.append(face)
					assignmentList.append(len(self.visibleFaceList)-1)

			self.makeAssignments(assignmentList, rects)
			k = 0
			while k < breakPoint:
				if k not in assignmentList:
					face = self.visibleFaceList.pop(k)
					self.notVisibleFaceList.append(face)
				k+=1

		#Case 3 (less rects than faces)
		else:
			# print "case3"
			megaList, breakPoint = self.dualListHelper(self.visibleFaceList, self.notVisibleFaceList, rects)
			assignmentList = []
			probabilityList = []
			for i in range(len(megaList)):
				highest = 0
				index = 0
				for j in range(len(megaList[i])):
					# ensure that face hasn't been used already
					if megaList[i][j] >= highest and j not in assignmentList:
						index = j
						highest = megaList[i][j]
				probabilityList.append(highest)
				if highest > self.minRemovalScore:
					if i > breakPoint:
						face = self.notVisibleFaceList.pop(i-breakPoint-1)
						self.visibleFaceList.append(face)
						index = len(self.visibleFaceList)-1
					assignmentList.append(index)
				else:
					face = Face()
					face.id = self.totalFaceCount
					self.totalFaceCount += 1
					self.visibleFaceList.append(face)
					assignmentList.append(len(self.visibleFaceList)-1)

			self.makeAssignments(assignmentList, rects)
			k = 0
			while k < breakPoint:
				if k not in assignmentList:
					face = self.visibleFaceList.pop(k)
					self.notVisibleFaceList.append(face)
				k+=1
			l = 0