Розробляємо системи відеоаналітики для конвеєрів під ключ — від проєктування до деплою. Вирішуємо завдання, які складно автоматизувати іншими сенсорами: виявлення застряглих предметів, контроль швидкості стрічки, детекція нештатних ситуацій (завал, розлив, випадання продукту), підрахунок продуктивності. Один потік відео замінює десятки точкових датчиків, покриваючи всю зону спостереження. На лінії розливу напоїв ми знизили необліковану продукцію на 15%, що забезпечило значну економію для клієнта. Отримайте консультацію щодо вашого проєкту.
Як відеоаналітика підвищує точність моніторингу конвеєра?
Детекція зупинки стрічки: використовуємо оптичний потік Farneback — щільний метод, що обчислює вектор руху для кожного пікселя. Це дозволяє виявити навіть уповільнення стрічки до 10% від номіналу. Якщо середній motion vector у зоні стрічки близький до нуля — фіксується зупинка.
Код детекції зупинки
import cv2 import numpy as np class ConveyorMonitor: def __init__(self, config: dict): self.belt_roi = config['belt_roi'] self.normal_speed_range = config['belt_speed_range'] self.alarm_callbacks = [] self.prev_frame = None self.lk_params = dict( winSize=(21, 21), maxLevel=3, criteria=(cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03) ) def process_frame(self, frame: np.ndarray) -> dict: roi_frame = self._crop_roi(frame, self.belt_roi) gray = cv2.cvtColor(roi_frame, cv2.COLOR_BGR2GRAY) analysis = {'timestamp': get_timestamp()} if self.prev_frame is not None: flow = cv2.calcOpticalFlowFarneback( self.prev_frame, gray, None, 0.5, 3, 15, 3, 5, 1.2, 0 ) mag, ang = cv2.cartToPolar(flow[..., 0], flow[..., 1]) mean_speed = float(np.mean(mag)) analysis['belt_speed'] = mean_speed analysis['belt_status'] = self._check_speed(mean_speed) analysis['obstruction'] = self._detect_obstruction(gray, flow) self.prev_frame = gray.copy() return analysis def _check_speed(self, speed: float) -> str: min_speed, max_speed = self.normal_speed_range if speed < min_speed * 0.1: return 'STOPPED' elif speed < min_speed * 0.5: return 'SLOW' elif speed > max_speed * 1.5: return 'FAST' return 'NORMAL' Підрахунок продукції на конвеєрі
Для підрахунку застосовується каскад: детектор YOLOv8s (навчений на 10 000+ зображень різних упаковок) та трекер ByteTracker. Об'єкт вважається облікованим, коли його центр перетинає віртуальну лінію. Це виключає подвійний рахунок при зупинках стрічки. Точність підтверджена на 20+ лініях — 98–99.5%.
class ProductCounter: def __init__(self, count_line_y: int, model_path: str): self.detector = YOLO(model_path) self.count_line_y = count_line_y self.tracker = ByteTracker() self.counted_ids = set() self.count = 0 def process(self, frame: np.ndarray) -> int: detections = self.detector(frame, conf=0.5) tracks = self.tracker.update(detections[0]) for track in tracks: cx = int((track.bbox[0] + track.bbox[2]) / 2) cy = int((track.bbox[1] + track.bbox[3]) / 2) if (track.track_id not in self.counted_ids and abs(cy - self.count_line_y) < 10): self.count += 1 self.counted_ids.add(track.track_id) return self.count Чому відеоаналітика ефективніша за датчики?
Точкові датчики дають інформацію лише в точці встановлення — завал або зупинку поза зоною вони не бачать. Відеоаналітика покриває всю зону конвеєра: один потік 4K-камери замінює десятки датчиків. Додатково система виявляє аномалії поверхні стрічки та розливи, що недоступно звичайним сенсорам. Наш досвід — 5+ років у промисловій відеоаналітиці, понад 30 впроваджених проєктів — гарантує стабільну роботу в цехових умовах. Наприклад, на цементному заводі система виявила завал стрічки на 2 секунди раніше оператора, запобігши 3-годинному простою, що спричинило б значні збитки.
Метод оптичного потоку Farneback описано в статті "Two-Frame Motion Estimation Based on Polynomial Expansion" (2003)
Детекція нештатних ситуацій
Для аномалій поверхні використовуємо модель PatchCore, навчену на еталонних зображеннях конвеєрної стрічки. Вона детектує будь-які відхилення: тріщини, сторонні предмети, забруднення. Розлив рідини або сипучих матеріалів визначається окремим детектором YOLO, навченим на синтетичних даних з аугментацією.
class AnomalyDetector: def __init__(self): from anomalib.models import PatchCore self.model = PatchCore.load('conveyor_anomaly.pt') self.spill_detector = YOLO('spill_detector.pt') def check_belt_surface(self, roi: np.ndarray) -> dict: anomaly_result = self.model.predict(roi) issues = [] if anomaly_result.pred_score > 0.7: issues.append({ 'type': 'surface_anomaly', 'score': float(anomaly_result.pred_score), 'region': self._get_anomaly_region(anomaly_result.anomaly_map) }) spill_results = self.spill_detector(roi, conf=0.4) for box in spill_results[0].boxes: issues.append({ 'type': 'spill', 'bbox': box.xyxy[0].tolist(), 'confidence': float(box.conf) }) return {'has_issues': len(issues) > 0, 'issues': issues, 'severity': 'CRITICAL' if issues else 'OK'} Теплова карта продуктивності
Візуалізація продуктивності за зміну: кількість одиниць на годину, динаміка швидкості конвеєра, інциденти та їх тривалість. Dashboard на Grafana з метриками з InfluxDB. Ми також можемо додати прогнозування зносу стрічки на основі історичних даних.
Інтеграція з MES/SCADA
Результати аналітики передаються в Manufacturing Execution System через OPC-UA або REST API. Автоматична зупинка лінії при критичних інцидентах через PLC. Підтримуємо протоколи OPC-UA (DA, HDA), Modbus TCP, Siemens S7. Дані у форматі JSON або Protobuf для мінімальної затримки.
| Метрика | Значення |
|---|---|
| Точність детекції зупинки | 99.5%+ |
| Точність підрахунку продукції | 98–99.5% |
| Latency детекції інциденту | < 500 ms |
| Хибні спрацьовування | < 0.5% |
| Масштаб системи | Термін |
|---|---|
| 1 лінія, базовий моніторинг | 4–6 тижнів |
| 3–5 ліній, детекція аномалій | 8–12 тижнів |
| Цех повністю, MES інтеграція | 14–20 тижнів |
Що входить в роботу
- Аудит конвеєрної лінії та підбір обладнання
- Розробка моделей комп'ютерного зору (YOLO, оптичний потік, PatchCore)
- Інтеграція з існуючими MES/SCADA (OPC-UA, REST API)
- Розгортання на промисловому сервері або edge-пристрої
- Навчання операторів та документація
- Пост-релізна підтримка та донавчання моделей
Як ми впроваджуємо систему?
Типові етапи впровадження:
- Аудит конвеєрної лінії та підбір обладнання.
- Збір даних та навчання моделей комп'ютерного зору (YOLO, оптичний потік, PatchCore).
- Розробка та тестування алгоритмів детекції, трекінгу та аномалій.
- Інтеграція з MES/SCADA через OPC-UA або REST API.
- Розгортання на промисловому сервері або edge-пристрої.
- Навчання операторів та передача документації.
- Пост-релізна підтримка та донавчання моделей.
Орієнтовні терміни: для однієї лінії з базовим моніторингом — 4–6 тижнів, для 3–5 ліній з детекцією аномалій — 8–12 тижнів, для цеху повністю з інтеграцією MES — 14–20 тижнів. Точні терміни розраховуємо після аудиту.
Замовте пілотний проєкт на одній лінії, щоб оцінити ефект. Отримайте консультацію щодо вашого проєкту — оцінимо терміни та умови.







