Обновить README.md

This commit is contained in:
2025-12-22 23:02:49 +03:00
parent 7c8f9db15d
commit 07ea9bdfa1

199
README.md
View File

@@ -1,23 +1,23 @@
````markdown
# Распознавание образов на Python с использованием CNN
Курсовая работа по дисциплине
**«[указать название дисциплины]»**
**«Программирование»**
---
## 📌 Описание проекта
Данный проект представляет собой программную реализацию системы **распознавания образов**
(рукописных цифр) с использованием **сверточной нейронной сети (CNN)** на языке программирования **Python**.
Проект представляет собой программную реализацию системы **распознавания образов** (рукописных цифр) с использованием **сверточной нейронной сети (CNN)** на языке **Python**.
В рамках работы реализовано:
- обучение нейронной сети на датасете **MNIST**,
- сохранение и повторное использование обученной модели,
- графический пользовательский интерфейс (GUI) на базе **Tkinter**,
- визуализация результатов обучения (графики, метрики),
- демонстрация процесса распознавания пользовательского ввода.
Реализовано:
- обучение нейронной сети на датасете **MNIST** (PyTorch + torchvision);
- сохранение обученной модели и повторное использование без переобучения;
- графический интерфейс **Tkinter** для ввода цифр мышью и получения результата распознавания;
- предобработка пользовательского ввода (поиск отдельных цифр на холсте, приведение к 28×28);
- сохранение метрик и графиков обучения (**accuracy/loss**) и логов обучения.
Проект разработан в рамках выполнения курсовой работы и предназначен для учебных и демонстрационных целей.
Проект предназначен для учебных и демонстрационных целей в рамках курсовой работы.
---
@@ -38,10 +38,10 @@
## 🧠 Используемые технологии
- **Язык программирования:** Python 3
- **Машинное обучение:** PyTorch
- **Нейронные сети:** сверточная нейронная сеть (CNN)
- **Графический интерфейс:** Tkinter
- **Язык программирования:** Python 3.10+ (рекомендуется 3.11)
- **Машинное обучение:** PyTorch, torchvision
- **Нейронные сети:** CNN (сверточная нейронная сеть)
- **GUI:** Tkinter
- **Обработка изображений:** Pillow
- **Визуализация:** Matplotlib
@@ -49,20 +49,177 @@
## 🗂 Структура проекта
> Важно: рабочие файлы находятся в папке `src/`, а `.gitignore` расположен в корне репозитория.
```text
raspoznavanie-obrazov-python-cnn/
├── app.py # Графический интерфейс (Tkinter)
├── .gitignore
├── README.md
└── src/
├── app.py # GUI (Tkinter): рисование и распознавание
├── model.py # Архитектура CNN
├── train.py # Обучение модели и сохранение артефактов
├── preprocess.py # Предобработка изображений
├── utils.py # Вспомогательные функции (логирование, графики)
├── preprocess.py # Предобработка изображений (холст -> тензор MNIST)
├── utils.py # Утилиты (логирование, сохранение метрик/графиков)
├── test_cuda.py # Проверка доступности CUDA (опционально)
├── requirements.txt # Зависимости проекта
├── artifacts/ # Результаты обучения
│ ├── mnist_cnn.pt # Обученная модель
├── artifacts/ # Результаты обучения (создаётся автоматически)
│ ├── mnist_cnn.pt # Обученная модель (веса)
│ ├── metrics.json # Метрики обучения
│ ├── training_plot.png # График loss и accuracy
── train.log # Лог обучения
── train.log # Лог обучения
│ └── last_debug.png # Отладочный пример 28x28 (последний ввод)
└── data/ # Данные MNIST (загружаются автоматически)
└── data/ # Датасет MNIST (скачивается автоматически)
````
---
## ⚙️ Установка и запуск
### 1) Клонирование репозитория
```bash
git clone <URL_репозитория>
cd raspznavanie-obrazov-python-cnn
```
### 2) Создание виртуального окружения
**Windows (PowerShell):**
```powershell
python -m venv .venv
.\.venv\Scripts\Activate.ps1
```
**Windows (cmd):**
```bat
python -m venv .venv
.\.venv\Scripts\activate.bat
```
**Linux / macOS:**
```bash
python3 -m venv .venv
source .venv/bin/activate
```
### 3) Установка зависимостей
> Файл `requirements.txt` находится в `src/`.
```bash
pip install -r src/requirements.txt
```
---
## ▶️ Запуск приложения (GUI)
Запускать можно из корня репозитория или из папки `src/`.
### Вариант A (из корня репозитория)
```bash
python src/app.py
```
### Вариант B (из папки src)
```bash
cd src
python app.py
```
---
## 🏋️ Обучение и переобучение модели
### Автоматически при первом запуске
Если файла модели нет (`src/artifacts/mnist_cnn.pt`), приложение автоматически запустит обучение при первом старте.
### Переобучение из интерфейса
В GUI есть кнопка **«Переобучить (с аугментацией)»**, которая запускает обучение заново и сохраняет новую модель.
### Ручной запуск обучения (без GUI)
**Из корня:**
```bash
python src/train.py
```
**Из папки `src/`:**
```bash
cd src
python train.py
```
После обучения результаты сохраняются в:
* `src/artifacts/mnist_cnn.pt` — веса модели;
* `src/artifacts/metrics.json` — метрики обучения;
* `src/artifacts/training_plot.png` — график `loss` и `accuracy`;
* `src/artifacts/train.log` — лог обучения.
---
## 🧾 Как пользоваться приложением
1. Запустите `app.py`.
2. Нарисуйте на холсте **одну или несколько цифр**.
3. Пишите цифры **раздельно**, чтобы алгоритм корректно выделил их как отдельные компоненты.
4. Нажмите **«Распознать число»**.
5. Результат появится справа:
* крупно — итоговая строка (например, `12`);
* ниже — уверенность по каждой цифре.
Кнопка **«Очистить»** сбрасывает холст.
---
## ✅ Проверка CUDA (опционально)
Если у Вас есть видеокарта NVIDIA и установлен CUDA, можно проверить доступность:
```bash
python src/test_cuda.py
```
---
## 🛠 Типовые проблемы и решения
### 1) `ModuleNotFoundError: No module named ...`
Запускайте скрипты одним из корректных способов:
* `python src/app.py` из корня репозитория;
* `cd src` и `python app.py`.
### 2) Долго скачивается MNIST
При первом обучении `torchvision` скачает MNIST в `src/data/`. Это нормально.
### 3) Плохое распознавание нескольких цифр
Пишите цифры **раздельно** и не соединяйте их штрихами.
Алгоритм выделяет цифры как отдельные связные компоненты.
---
## 📄 Лицензия
Проект выполнен в учебных целях.
```
```