Розробка системи автоматичної інвентаризації через камери

Розробка системи автоматичної інвентаризації через камери

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1003

Розробка системи автоматичної інвентаризації через камери

Уявіть: склад з 10 000 SKU, ручна інвентаризація раз на квартал зупиняє відвантаження на три дні. Розбіжності виявляються постфактум — виправляти їх уже пізно. Ми вирішуємо цю проблему системою на комп'ютерному зорі: камери аналізують полиці в реальному часі, алгоритми YOLO (You Only Look Once) детектують кожен товар. Така система працює без зупинки складу і дає точність до 98%. Для складу з 10 000 SKU економія від впровадження перевищує $18k–26kів на рік. Ultralytics YOLOv8: Instance Segmentation, Object Detection, and Image Classification.

Як працює камерна інвентаризація?

Стаціонарні камери над полицями роблять знімки за розкладом (кожні 6–12 годин). Зображення проходять через модель виявлення об'єктів — ми використовуємо YOLOv8 (навчена на 100+ класах товарів). Результат — список SKU з кількістю по кожній полиці. Ці дані звіряються з очікуваними залишками з ERP. Розбіжності фіксуються автоматично, а система може ініціювати замовлення відсутніх позицій. YOLOv8 обробляє кадр у 2 рази швидше за попередню версію, що критично при потоці в сотні полиць. Опціонально використовується NVIDIA Triton для пакетного інференсу — це знижує latency p99 до 50 мс.

Чому точність 92–96% недостатня і як ми її підвищуємо?

Для більшості рітейлерів точність 95% прийнятна, але при обігу в мільйони доларів кожен відсоток розбіжності — це прямі втрати. Ми піднімаємо точність до 98% за рахунок трьох прийомів:

  • Мультиракурсна зйомка: камера робить кадри під різними кутами, щоб перекрити тіні та перекриття.
  • Аугментація даних: модель донавчається на ваших фотографіях з урахуванням освітлення та упаковки.
  • Reconciliation з касовими даними: система порівнює фізичний підрахунок з продажами та автоматично виправляє системні залишки.

Як підвищити точність до 98%?

Ключовий прийом — мультиракурсна зйомка. Одна камера не бачить товари за іншими, тому ми встановлюємо 2–3 камери на прохід. Для кожного кадру застосовуємо перспективне перетворення, щоб отримати плоский вигляд полиці. Потім об'єднуємо детекції з різних ракурсів, виключаючи дублікати по IoU (Intersection over Union). Це знижує помилки окклюзії на 40%.

Як відбувається звірка з системою обліку?

def reconcile(camera_counts: dict, system_counts: dict, tolerance_percent: float = 5.0) -> list[dict]: """Нахождение расхождений между физическим и системным учётом""" discrepancies = [] all_skus = set(camera_counts) | set(system_counts) for sku in all_skus: camera_qty = camera_counts.get(sku, 0) system_qty = system_counts.get(sku, 0) if system_qty > 0: diff_pct = abs(camera_qty - system_qty) / system_qty * 100 else: diff_pct = 100 if camera_qty > 0 else 0 if diff_pct > tolerance_percent: discrepancies.append({ 'sku': sku, 'camera': camera_qty, 'system': system_qty, 'diff_percent': round(diff_pct, 1), 'severity': 'high' if diff_pct > 20 else 'medium' }) return sorted(discrepancies, key=lambda x: x['diff_percent'], reverse=True) 

Що ми робимо: архітектура та стек

Серце системи — детектор на базі YOLO (PyTorch). Кадри передаються на сервер з GPU (NVIDIA T4 або A10), інференс займає <100 мс на зображення. Для плоского представлення полиць застосовуємо перспективне перетворення OpenCV. Для edge-пристроїв використовуємо TensorRT — це прискорює інференс в 1,5 раза без втрати точності.

class AutoInventorySystem: def __init__(self, detector_path: str, inventory_db_path: str): self.detector = YOLO(detector_path) self.db = InventoryDatabase(inventory_db_path) def run_inventory_cycle(self, shelf_images: dict) -> InventoryReport: """ shelf_images: {shelf_id: image} - фото всех полок """ report = InventoryReport() for shelf_id, image in shelf_images.items(): shelf_counts = self._count_shelf(image, shelf_id) report.add_shelf(shelf_id, shelf_counts) # Сравнение с ожидаемым остатком expected = self.db.get_expected_quantities() report.discrepancies = self._find_discrepancies( report.actual_counts, expected ) # Автоматическое обновление в ERP self.db.update_inventory(report.actual_counts) return report def _count_shelf(self, image: np.ndarray, shelf_id: str) -> dict: """Подсчёт товаров на одной полке""" detections = self.detector(image, conf=0.45) counts = {} for box in detections[0].boxes: sku = self.detector.model.names[int(box.cls)] counts[sku] = counts.get(sku, 0) + 1 return counts 

Обробка перспективних спотворень

Для shelf-камер з широким кутом — корекція спотворень і створення плоского вигляду полиці:

def create_shelf_rectified_view(image: np.ndarray, shelf_corners: list, output_size: tuple = (2000, 400)) -> np.ndarray: """ Плоское (top-down) представление полки для удобного анализа shelf_corners: 4 угла полки в изображении """ pts_src = np.array(shelf_corners, dtype='float32') w, h = output_size pts_dst = np.array([ [0, 0], [w - 1, 0], [w - 1, h - 1], [0, h - 1] ], dtype='float32') M = cv2.getPerspectiveTransform(pts_src, pts_dst) rectified = cv2.warpPerspective(image, M, (w, h)) return rectified 

Інвентаризація через дрони

Для складів з високими стелажами — дрон з камерою:

class DroneInventoryController: def __init__(self, drone_api, inventory_system): self.drone = drone_api self.inventory = inventory_system self.waypoints = [] # заранее запрограммированные точки съёмки async def run_inventory_mission(self) -> InventoryReport: images = {} await self.drone.takeoff() for waypoint in self.waypoints: await self.drone.fly_to(waypoint) await self.drone.stabilize(seconds=1.0) # Фото с нескольких ракурсов для лучшего покрытия for angle_offset in [0, -15, 15]: await self.drone.rotate(angle_offset) image = await self.drone.capture_image() images[f"{waypoint['shelf_id']}_{angle_offset}"] = image await self.drone.land() return self.inventory.run_inventory_cycle(images) 

Інтеграція з ERP/WMS системами

Оновлення залишків через API:

import requests class ERPIntegration: def __init__(self, erp_url: str, api_key: str): self.base_url = erp_url self.headers = {'Authorization': f'Bearer {api_key}'} def update_stock_levels(self, inventory: dict, location_id: str) -> dict: """Обновление остатков в ERP системе""" stock_updates = [ { 'sku': sku, 'quantity': qty, 'location_id': location_id, 'source': 'camera_inventory', 'timestamp': get_iso_timestamp() } for sku, qty in inventory.items() ] response = requests.post( f'{self.base_url}/api/inventory/bulk-update', json={'updates': stock_updates}, headers=self.headers ) return response.json() 
Тип інвентаризації Точність Час
Стаціонарні камери (рітейл) 92–96% Постійно
Дрон (склад 1000 м²) 90–95% 20–40 хв
Мобільний робот 94–98% 30–60 хв

Процес роботи

  1. Аналітика: обстежуємо склад, визначаємо кількість полиць, ракурси, освітлення. Обираємо обладнання.
  2. Проектування: розробляємо архітектуру (камери → сервер → ERP). Налаштовуємо модель YOLO під ваш асортимент.
  3. Реалізація: монтуємо камери, розгортаємо ПЗ, пишемо інтеграцію.
  4. Тест: пілотний запуск, звірка з ручною інвентаризацією, калібрування.
  5. Деплой: введення в промислову експлуатацію, навчання персоналу.
  6. Моніторинг та оптимізація: після запуску відстежуємо точність, при необхідності донавчаємо модель під нові SKU.

Що входить в роботу

  • Документація: схема встановлення камер, API-специфікація, інструкція оператора.
  • Навчання: 2 дні для команди складу та 1 день для IT-спеціалістів.
  • Підтримка: гарантія 12 місяців на ПЗ, 3 місяці безкоштовного супроводу.
  • Метрики: дашборд з точністю, кількістю розбіжностей, часом інвентаризації.

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

  • Окклюзія: товари перекривають один одного. Рішення — мультиракурсна зйомка.
  • Зміна освітлення: модель донавчається на нічних кадрах.
  • Нові SKU: автоматична реєстрація через image-пошук (embeddings).
Масштаб Термін
Склад/магазин, стаціонарні камери 6–9 тижнів
Дронова система + ERP 10–16 тижнів
Повноцінна автономна система 16–24 тижні

Стартова вартість пілотного проекту для одного складу — від $6k–12kів залежно від кількості камер та складності інтеграції. З нашим досвідом (50+ проектів з автоматизації складів) ми гарантуємо точність не нижче 95% з першого запуску. Економія часу на інвентаризацію — до 80%, зниження втрат від розбіжностей — до 30%. Зв'яжіться з нами для попередньої оцінки вашого складу — безкоштовно. Отримайте індивідуальний розрахунок і пілотний проект — переконайтеся в точності системи на реальних даних.