Код IT
← Каталог

Практикум — распознавание цифр на PyTorch — Конвенция пикселей MNIST vs canvas

Фрагмент из «Практикум — распознавание цифр на PyTorch»: Конвенция пикселей MNIST vs canvas.

Python main.py
    def _on_press(self, event: tk.Event) -> None:
        self.last_x, self.last_y = event.x, event.y
        self._draw_point(event.x, event.y)

    def _on_drag(self, event: tk.Event) -> None:
        if self.last_x is None or self.last_y is None:
            return
        self.canvas.create_line(
            self.last_x,
            self.last_y,
            event.x,
            event.y,
            fill="white",
            width=BRUSH_WIDTH,
            capstyle=tk.ROUND,
            smooth=True,
        )
        self.draw.line(
            [self.last_x, self.last_y, event.x, event.y],
            fill=DRAW_COLOR,
            width=BRUSH_WIDTH,
        )
        self.last_x, self.last_y = event.x, event.y

    def _on_release(self, _event: tk.Event) -> None:
        self.last_x, self.last_y = None, None

    def _draw_point(self, x: int, y: int) -> None:
        r = BRUSH_WIDTH // 2
        self.canvas.create_oval(x - r, y - r, x + r, y + r, fill="white", outline="white")
        self.draw.ellipse([x - r, y - r, x + r, y + r], fill=DRAW_COLOR)

    def _clear(self) -> None:
        self.canvas.delete("all")
        self.image = Image.new("L", (CANVAS_SIZE, CANVAS_SIZE), BACKGROUND_COLOR)
        self.draw = ImageDraw.Draw(self.image)
        if self.model is not None:
            self.result_var.set("Результат появится здесь")
    def _on_press(self, event: tk.Event) -> None:
        self.last_x, self.last_y = event.x, event.y
        self._draw_point(event.x, event.y)

    def _on_drag(self, event: tk.Event) -> None:
        if self.last_x is None or self.last_y is None:
            return
        self.canvas.create_line(
            self.last_x,
            self.last_y,
            event.x,
            event.y,
            fill="white",
            width=BRUSH_WIDTH,
            capstyle=tk.ROUND,
            smooth=True,
        )
        self.draw.line(
            [self.last_x, self.last_y, event.x, event.y],
            fill=DRAW_COLOR,
            width=BRUSH_WIDTH,
        )
        self.last_x, self.last_y = event.x, event.y

    def _on_release(self, _event: tk.Event) -> None:
        self.last_x, self.last_y = None, None

    def _draw_point(self, x: int, y: int) -> None:
        r = BRUSH_WIDTH // 2
        self.canvas.create_oval(x - r, y - r, x + r, y + r, fill="white", outline="white")
        self.draw.ellipse([x - r, y - r, x + r, y + r], fill=DRAW_COLOR)

    def _clear(self) -> None:
        self.canvas.delete("all")
        self.image = Image.new("L", (CANVAS_SIZE, CANVAS_SIZE), BACKGROUND_COLOR)
        self.draw = ImageDraw.Draw(self.image)
        if self.model is not None:
            self.result_var.set("Результат появится здесь")