class CalcGridLayout(GridLayout): filePath = StringProperty('') weights = r'weights\best-100.pt' grafic_list = [] label_list = [] weights_description = [ 'Red entrenada 100 ciclos con dataset SVHN', 'Red entrenada 1000 ciclos con dataset SVHN', 'Red entrenada 1000 ciclos con dataset UNO Cards', "Red entrenada 1000 ciclos con dataset SVHN con datos incrementados" ] def __init__(self, **kwargs): super(CalcGridLayout, self).__init__(**kwargs) Window.bind(on_dropfile=self._on_file_drop) self.detector = Detector(self.weights, self.filePath) self.ids.model_label.text = self.weights_description[0] def reduced_image(self): pass def _on_file_drop(self, window, file_path): self.reset_canvas() self.filePath = file_path.decode("utf-8") self.ids.img.source = self.filePath self.ids.img.reload() self.ids.message_label.text = ' ' self.ids.start.visible = True self.detector.change_source(self.filePath) def change_weight(self, value): self.ids.model_label.text = self.weights_description[value] if value == 0: self.weights = 'weights/best-100.pt' if value == 1: self.weights = 'weights/best-1000.pt' if value == 2: self.weights = 'weights/uno.pt' if value == 3: self.weights = 'weights/best-fused.pt' self.detector.change_weights(self.weights) def start_detection(self): self.reset_canvas() self.coordinates = self.detector.detect() self.draw_rectangle(self.coordinates) def reset_canvas(self): for item in self.grafic_list: self.canvas.remove(item) for item in self.label_list: self.ids.float_canvas.remove_widget(item) for item in self.canvas.children: if 'Line' in repr(item): self.canvas.remove(item) def draw_rectangle(self, coordinates): print(coordinates) full_size_x = self.ids.img.size[0] full_size_y = self.ids.img.size[1] center = (full_size_x / 2, full_size_y / 2) image = Image.open(self.filePath) image_width = int(image.size[0]) image_height = int(image.size[1]) for coordinate in coordinates: rectangle_size_x = coordinate['bottom_right'][0] - coordinate[ 'top_left'][0] rectangle_size_y = coordinate['bottom_right'][1] - coordinate[ 'top_left'][1] relative_x_position = (center[0] - image_width / 2 + coordinate['top_left'][0]) relative_y_position = (center[1] + image_height / 2 - coordinate['top_left'][1] - rectangle_size_y) with self.canvas: self.obj = InstructionGroup() self.obj.add(Color(0, 1, 0, 0.3, mode="rgba")) self.obj.add( Line(rectangle=(relative_x_position, relative_y_position, rectangle_size_x, rectangle_size_y), width=3)) self.grafic_list.append(self.obj) label_position_x = relative_x_position - center[ 0] + rectangle_size_x / 2 label_position_y = relative_y_position - center[ 1] + rectangle_size_y * 1.2 label = Label(text=coordinate['label'], pos_hint={ 'x': label_position_x / full_size_x, 'y': label_position_y / full_size_y }, size=(self.ids.float_canvas.size[0], self.ids.float_canvas.size[1]), size_hint=(None, None), bold=True, outline_color=[1, 0, 0, 0.5], outline_width=2) self.ids.float_canvas.add_widget(label) self.label_list.append(label)