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))