示例#1
0
	def generate_feature(self, data_item):
		def cut_mat(dim_x, dim_y):
			tmp_feature = []
			for x in range(max(0, int(pnt[0]-dim_x)), min(data_item.img_dim[0]-1, int(pnt[0]+dim_x))+1):
				for y in range(max(0, int(pnt[1]-dim_y)), min(data_item.img_dim[1]-1, int(pnt[1]+dim_y))+1):
					tmp_feature.append(image_data[x][y])
			return numpy.array(tmp_feature)

		data_set = SList([])

		image_data = data_item.image_data
		for index, pnt in enumerate(data_item.tag):
			data_set.append((cut_mat(self.MAT_SIZE[0], self.MAT_SIZE[1]),1, pnt))

		for i in range(int(len(data_item.tag)*self.POS_NEG_RATIO)):
			pnt = (random.randint(self.MAT_SIZE[0], data_item.img_dim[0]-self.MAT_SIZE[0]), random.randint(self.MAT_SIZE[1], data_item.img_dim[1]-self.MAT_SIZE[1]))
			if data_item.contain_tag(range(pnt[0]-self.MAT_SIZE[0],pnt[0]+self.MAT_SIZE[0]), range(pnt[1]-self.MAT_SIZE[1],pnt[1]+self.MAT_SIZE[1])):
				data_set.append((cut_mat(self.MAT_SIZE[0], self.MAT_SIZE[1]), 1, pnt))
			else:
				data_set.append((cut_mat(self.MAT_SIZE[0], self.MAT_SIZE[1]), 0, pnt))

		print('{}/{}'.format(data_set.filter_by(lambda x: x[1] == 1).count(), data_set.count()))
		return data_set.filter_by(lambda x: len(x[0]) == (2*self.MAT_SIZE[0]+1)*(2*self.MAT_SIZE[1]+1))