Як навчити AI модель розпізнавати товари в магазинах: комп’ютерний зір для роздрібної торгівлі

Практичний посібник із навчання AI-моделей для автоматичного розпізнавання товарів у роздрібних магазинах за допомогою комп'ютерного зору

Автоматичне розпізнавання товарів на полицях — це вже не фантастика, а реальний інструмент для оптимізації інвентаризації, запобігання крадіжкам і аналізу викладки. У цьому туторіалі ми з нуля навчимо власну модель комп’ютерного зору визначати конкретні SKU у кадрі — від збору датасету до розгортання API. Весь процес займе від 4 до 8 годин залежно від розміру датасету, а для старту потрібен лише ноутбук з доступом до інтернету та базові навички Python.

🛠️ Що знадобиться

  • Roboflow (roboflow.com) — платформа для анотації зображень і керування датасетом; безкоштовний план дозволяє до 10 000 зображень і 3 публічних проєкти
  • Google Colab Pro або Kaggle Notebooks — безкоштовне хмарне середовище з GPU (T4/A100) для тренування моделі без власного заліза
  • YOLOv9 або YOLOv10 — найактуальніші архітектури object detection станом на 2026 рік; відкритий код, ліцензія AGPL-3.0
  • Python 3.11+ — для написання inference-скриптів і підключення до камер
  • Смартфон або IP-камера — для збору початкових зображень товарів у реальних умовах магазину
  • FastAPI + Docker — для розгортання готової моделі як мікросервісу (опційно, для production)

📋 Покрокова інструкція

Крок 1: Збір та підготовка датасету зображень

Зайди в магазин і зроби фотографії обраних товарів — мінімум 80–150 зображень на кожен клас (наприклад: «кефір Яготинський», «сік Sandora апельсин 1л», «шоколад Roshen Корівка»). Фотографуй під різними кутами (прямо, збоку, 45°), при різному освітленні (денне, флуоресцентне, напівтемрява) та на різних рівнях полиці. Також додай негативні приклади — фото порожніх полиць і схожих товарів, які модель не має плутати. Збережи всі фото у папках за назвою класу, наприклад /dataset/kefir_yagotyn/, /dataset/juice_sandora/. Чим більше різноманіття в датасеті — тим вища точність у реальних умовах.

Крок 2: Анотація зображень у Roboflow

Зайди на roboflow.com → натисни «Create New Project» → обери тип «Object Detection» → введи назву проєкту, наприклад «retail-products-ua». Завантаж усі зображення через drag-and-drop або кнопку «Upload». Після завантаження перейди до розділу «Annotate» — для кожного зображення намалюй bounding box навколо товару, клікнувши і потягнувши мишею, потім введи назву класу (наприклад kefir_yagotyn). Використовуй функцію «Smart Polygon» — вона автоматично підхоплює контури об’єкта за одним кліком, що прискорює анотацію в 3–4 рази. Підводний камінь: не позначай частково обрізані товари на краях фото — це збиває модель; або позначай їх усі або не позначай жодного.

Крок 3: Аугментація та експорт датасету

У Roboflow перейди до «Generate» → обери розподіл: 70% train / 20% validation / 10% test → натисни «Add Augmentation Steps». Додай такі трансформації: Flip (horizontal), Brightness між -25% і +25%, Blur до 1.5px, Rotation від -15° до +15° — це штучно збільшить датасет у 3–5 разів без нових фотографій. Натисни «Generate» і дочекайся завершення (1–3 хвилини). Після цього натисни «Export Dataset» → обери формат «YOLOv9 PyTorch» → натисни «Show Download Code» і скопіюй рядок з API-ключем — він знадобиться в Colab. Переконайся, що фінальна кількість зображень у train-сеті не менше 500 на клас для прийнятної точності.

Крок 4: Тренування моделі в Google Colab

Відкрий Google Colab, зміни Runtime на GPU: Runtime → Change runtime type → T4 GPU → Save. Встанови залежності, виконавши в першій клітинці:

!pip install ultralytics roboflow supervision -q

У наступній клітинці завантаж датасет через скопійований раніше код із Roboflow. Потім запусти тренування командою:

!yolo task=detect mode=train model=yolov10n.pt data=/content/datasets/retail-products-ua/data.yaml epochs=100 imgsz=640 batch=16 patience=20 project=/content/runs name=retail_model

Параметр patience=20 зупиняє тренування автоматично якщо точність не росте 20 епох — це економить час. Тренування на T4 GPU займає приблизно 40–90 хвилин залежно від розміру датасету. Стеж за метриками mAP50 і mAP50-95 — цільове значення mAP50 вище 0.85 вважається хорошим для роздрібної торгівлі.

Крок 5: Валідація, тестування та розгортання моделі

Після тренування запусти валідацію командою !yolo task=detect mode=val model=/content/runs/retail_model/weights/best.pt data=data.yaml — Colab виведе confusion matrix і графіки precision-recall. Завантаж файл best.pt на свій комп’ютер через Files → Download. Для тестування в реальному часі через веб-камеру запусти локально:

yolo task=detect mode=predict model=best.pt source=0 conf=0.5 show=True

де source=0 — це індекс веб-камери, а conf=0.5 — поріг впевненості (підвищ до 0.65–0.7 щоб зменшити хибні спрацювання). Для production розгортання створи FastAPI-сервер: упакуй модель у Docker-контейнер командою docker build -t retail-detector . і розгорни на сервері або в хмарі — модель приймає зображення через POST /predict і повертає JSON з координатами bounding boxes і назвами товарів. Фінальний результат — працюючий детектор товарів, що розпізнає SKU за 30–80 мс на зображення.

⚠️ Типові помилки та як їх уникнути

  • Малий або однорідний датасет — якщо всі фото зроблені в одному магазині при однаковому освітленні, модель не працюватиме в інших умовах; збирай фото мінімум у 3–5 різних локаціях і в різний час доби
  • Незбалансовані класи — якщо для «кефіру» є 200 зображень, а для «соку» лише 30, модель ігноруватиме рідкісний клас; стеж щоб різниця між класами не перевищувала 2–3 рази, або використовуй параметр cls_weights при тренуванні
  • Занадто низький поріг confidence — значення conf=0.25 (за замовчуванням) дає багато хибних спрацювань на реальних відео; для роздрібної торгівлі встановлюй не менше conf=0.55–0.65
  • Анотація без контексту — якщо позначати тільки штрих-код або логотип замість усього товару, модель не розпізнаватиме упаковку цілком; завжди окреслюй bounding box навколо всього об’єкта з невеликим відступом у 5–10 пікселів
  • Пропуск аугментації для дрібних об’єктів — товари на верхніх полицях виглядають маленькими у кадрі; додай аугментацію «Mosaic» та «Scale» до 50% у Roboflow щоб модель навчилась їх знаходити

💡 Поради для кращого результату

Знімай товари у «природному середовищі». Фото на білому тлі дають модель, яка чудово працює в лабораторії і провалюється в реальному магазині. Завжди фотографуй товари безпосередньо на полицях поруч із сусідніми продуктами — саме так бачитиме їх камера в production.

Використовуй pseudo-labeling для масштабування. Після першого тренування запусти модель на нових неанотованих зображеннях, автоматично збережи передбачення з confidence вище 0.85 як нові анотації, перевір їх вручну і додай до датасету — це дозволяє швидко розширити датасет у 5–10 разів з мінімальними ручними зусиллями.

Моніторь дрейф моделі щомісяця. Виробники регулярно оновлюють дизайн упаковок — нова пляшка Sandora 2026 може мати іншу форму і колір. Налаштуй автоматичний збір «важких» зображень (де confidence між 0.4–0.6) і додавай їх до тренувального сету раз на місяць.

Тестуй при різному освітленні до деплою. Перевір модель вночі з увімкненим інфрачервоним підсвічуванням камери, вранці при прямому сонячному світлі у вікно і при стандартному флуоресцентному освітленні — якщо точність падає нижче 0.7 в будь-якому сценарії, додай відповідні приклади до датасету.

❓ Часті запитання (FAQ)

1. Скільки зображень мінімально потрібно для навчання?
Для базової точності достатньо 50–80 зображень на клас після аугментації, але для production-рівня (mAP50 > 0.85) рекомендується 150–300 реальних фото на клас. Якщо товарів понад 100, почни з 20 найважливіших SKU і розширюй датасет поступово.

2. Чи можна використати готові моделі замість навчання з нуля?
Так, існують публічні датасети типу Grocery Store Dataset або Open Images із сотнями категорій продуктів. Але для специфічних українських брендів або власних торгових марок без донавчання не обійтись — використовуй transfer learning від COCO-pretrained ваг, це те, що робить команда model=yolov10n.pt автоматично.

3. Яке залізо потрібне для inference в реальному часі?
Модель YOLOv10n (nano) обробляє 30 FPS на звичайному ноутбуці без GPU або 60+ FPS на NVIDIA Jetson Orin для edge-розгортання прямо в магазині. Для хмарного варіанту вистачає інстансу з 2 vCPU та 4 GB RAM — затримка складе 100–200 мс на запит.

4. Як інтегрувати детектор з касовою системою або WMS?
Найпростіший шлях — FastAPI-ендпоінт, який приймає Base64-зображення і повертає JSON зі списком виявлених товарів та їх координатами. Більшість сучасних WMS (1C, SAP Retail, Odoo) підтримують REST API і можуть приймати ці дані для автоматичного оновлення інвентаря.

5. Що робити якщо модель плутає схожі упаковки?
Додай до датасету більше «hard negatives» — зображення, де схожі товари стоять поруч. Також спробуй збільшити роздільну здатність вхідного зображення з 640 до 1280 пікселів (параметр imgsz=1280 при тренуванні) — це суттєво покращує розпізнавання дрібних деталей як шрифт і колір кришки.

🏁 Підсумок

Ти навчився збирати датасет у реальних умовах магазину, анотувати його в Roboflow, тренувати YOLOv10 модель у хмарі та розгортати її як готовий сервіс — весь пайплайн від фотографії на смартфоні до працюючого API займає один робочий день. Результат — персоналізована модель комп’ютерного зору, яка розпізнає конкретні SKU твого магазину з точністю 85–95% у реальних умовах.

Почни прямо зараз: зайди на roboflow.com, створи безкоштовний акаунт і завантаж перші 50 фотографій найважливіших товарів — вже через годину матимеш перший анотований датасет і зможеш запустити пробне тренування в Colab.

РОЗСИЛКА

📬 Щотижневий AI-дайджест

Найкращі статті про ШІ та автоматизацію — без спаму, лише суть

Без спаму · Відписатись будь-коли

Telegram