Розробка системи автоматичної інвентаризації через камери
Уявіть: склад з 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 хв |
Процес роботи
- Аналітика: обстежуємо склад, визначаємо кількість полиць, ракурси, освітлення. Обираємо обладнання.
- Проектування: розробляємо архітектуру (камери → сервер → ERP). Налаштовуємо модель YOLO під ваш асортимент.
- Реалізація: монтуємо камери, розгортаємо ПЗ, пишемо інтеграцію.
- Тест: пілотний запуск, звірка з ручною інвентаризацією, калібрування.
- Деплой: введення в промислову експлуатацію, навчання персоналу.
- Моніторинг та оптимізація: після запуску відстежуємо точність, при необхідності донавчаємо модель під нові SKU.
Що входить в роботу
- Документація: схема встановлення камер, API-специфікація, інструкція оператора.
- Навчання: 2 дні для команди складу та 1 день для IT-спеціалістів.
- Підтримка: гарантія 12 місяців на ПЗ, 3 місяці безкоштовного супроводу.
- Метрики: дашборд з точністю, кількістю розбіжностей, часом інвентаризації.
Типові помилки та як їх уникаємо
- Окклюзія: товари перекривають один одного. Рішення — мультиракурсна зйомка.
- Зміна освітлення: модель донавчається на нічних кадрах.
- Нові SKU: автоматична реєстрація через image-пошук (embeddings).
| Масштаб | Термін |
|---|---|
| Склад/магазин, стаціонарні камери | 6–9 тижнів |
| Дронова система + ERP | 10–16 тижнів |
| Повноцінна автономна система | 16–24 тижні |
Стартова вартість пілотного проекту для одного складу — від $6k–12kів залежно від кількості камер та складності інтеграції. З нашим досвідом (50+ проектів з автоматизації складів) ми гарантуємо точність не нижче 95% з першого запуску. Економія часу на інвентаризацію — до 80%, зниження втрат від розбіжностей — до 30%. Зв'яжіться з нами для попередньої оцінки вашого складу — безкоштовно. Отримайте індивідуальний розрахунок і пілотний проект — переконайтеся в точності системи на реальних даних.







