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

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

Направления 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
    1004

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

Представьте: склад с 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%. Свяжитесь с нами для предварительной оценки вашего склада — бесплатно. Получите индивидуальный расчёт и пилотный проект — убедитесь в точности системы на реальных данных.