Классификация цветов, детекция животных и детекция объектов.
Репозиторий собран как портфолио-проект: самостоятельные Jupyter-ноутбуки, воспроизводимый запуск и явные инструкции по данным.
| Задача | Модель | Данные | Результат |
|---|---|---|---|
| Классификация цветов | MobileNetV2 + свой классификатор (Keras) | TensorFlow Flowers (flower_photos) |
85.56% accuracy на тесте |
| Детекция животных | YOLOv8n (Ultralytics) | Animals-10 | bounding boxes + подсчёт объектов |
| Детекция объектов | Haar Cascade (OpenCV) | номера авто, морды котов, настенные часы | bounding boxes на тестовых фото |
Python 3.11.
- Что внутри
- Структура
- Быстрый старт
- Ноутбук 1. Классификация цветов
- Ноутбук 2. Детекция животных
- Ноутбук 3. Детекция объектов
- Зависимости
Классификация цветов. Transfer learning на MobileNetV2: веса backbone заморожены, сверху — полносвязная голова. Датасет делится 80/20, обучение 20 эпох, затем оценка и инференс на отдельных фото.
Детекция животных. Предобученный YOLOv8n на изображении из Animals-10: визуализация боксов, подсчёт объектов по классам и обёртка ImageDetectionYOLO для прогона по папке.
Детекция объектов. Классические Haar-каскады OpenCV: автомобильные номера, морды котов и настенные часы.
cv_detection/
├── README.md
├── LICENSE
├── requirements.txt
├── .gitignore
├── .github/workflows/validate.yml
├── images/ # тестовые JPEG (номера, коты, часы; test_1…3 для цветов)
├── xml/ # Haar-каскады OpenCV
├── flower_photos/ # датасет цветов (скачать отдельно)
├── model/ # веса MobileNetV2 (скачать отдельно)
└── notebooks/
├── cv_flowers.ipynb
├── cv_detection.ipynb
└── object_detection.ipynb
В notebooks/ лежат только .ipynb. Запускайте ячейки из каталога notebooks/: пути к данным идут на уровень выше (../images, ../xml, ../flower_photos, ../model).
git clone https://github.com/mishafoniakov/cv_detection.git
cd cv_detection
python3.11 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
jupyter notebook notebooks/Ноутбук cv_flowers.ipynb читает три локальных пути из корня репозитория:
- Датасет TensorFlow Flowers —
flower_photos/<класс>/*.jpg(daisy, dandelion, roses, sunflowers, tulips) - Веса MobileNetV2 —
model/mobilenet_v2_weights_tf_dim_ordering_tf_kernels_1.0_128_no_top.h5 - Три тестовых JPEG —
images/test_1.jpg,images/test_2.jpg,images/test_3.jpg
Из корня репозитория:
curl -L http://download.tensorflow.org/example_images/flower_photos.tgz -o /tmp/flower_photos.tgz
tar -xzf /tmp/flower_photos.tgz -C .
mkdir -p model
curl -L "https://storage.googleapis.com/tensorflow/keras-applications/mobilenet_v2/mobilenet_v2_weights_tf_dim_ordering_tf_kernels_1.0_128_no_top.h5" \
-o model/mobilenet_v2_weights_tf_dim_ordering_tf_kernels_1.0_128_no_top.h5Затем положите test_1.jpg, test_2.jpg, test_3.jpg в images/. Сами датасет и веса .h5 в git не входят.
Animals-10 скачивается из ячейки через kagglehub (alessiocorrado99/animals10). Веса yolov8n.pt подтягивает Ultralytics при первом запуске. Для Kaggle может понадобиться API-токен.
Для object_detection.ipynb уже лежат:
- фото в
images/—number_*.jpg,cat_*.jpg,clock*.jpg - каскады в
xml/—haarcascade_russian_plate_number.xml,haarcascade_frontalcatface.xml,haarcascade_wallclock.xml
Дополнительно ничего скачивать не нужно.
Файл: notebooks/cv_flowers.ipynb
Пайплайн:
- Загрузка изображений по папкам-классам из
../flower_photos - Нормализация пикселей в
[0, 1], split 80/20 (random_state=42) - MobileNetV2 без головы,
trainable=False, веса из../model - Sequential: Flatten → Dense(64) → Dense(128) → Dense(64) → Dropout(0.5) → softmax
- Adam,
sparse_categorical_crossentropy, 20 эпох,batch_size=32, вход 128×128 - Оценка на тесте, графики accuracy/loss, инференс на
../images/test_1.jpg…test_3.jpg
Зафиксированный результат прогона: точность на тестовой выборке 85.56%.
Файл: notebooks/cv_detection.ipynb
Пайплайн:
- YOLOv8n (
yolov8n.pt) - Пример из
raw-img/elefante - Детекция, отрисовка боксов, подсчёт объектов по классам COCO
- Класс
ImageDetectionYOLO: подготовка кадра, инференс, визуализация - Прогон по первым 10 изображениям папки
Файл: notebooks/object_detection.ipynb
Пайплайн:
- Haar Cascade для российских автомобильных номеров
- Haar Cascade для морды кота
- Предобработка кадра и детекция настенных часов
- Отрисовка bounding boxes на фото из
../images, каскады из../xml
Список пакетов — в requirements.txt. Основные:
- классификация цветов: TensorFlow / Keras, scikit-learn, NumPy, pandas, Matplotlib
- детекция животных: Ultralytics, OpenCV, kagglehub
- детекция объектов: OpenCV, Matplotlib
Датасеты и веса в git не входят (см. .gitignore). Фото для Haar-детекции и XML-каскады — входят.