На жвавому перехресті ручний підрахунок машин дає похибку до 30%, а петлеві датчики ламаються раз на півроку. Відеоаналітика на базі YOLO та ByteTracker вирішує обидві проблеми: точність підрахунку — 95–98%, а детекція інцидентів займає менше 5 секунд. Замовляючи таку систему під ключ, ви отримуєте моніторинг обсягу трафіку за напрямками, швидкості потоку, щільності, класифікації ТЗ та детекцію ДТП, зупинених автомобілів, порушень. Наші інженери мають понад 10 років досвіду в промисловому комп'ютерному зорі — це гарантує стабільну роботу в будь-яку погоду. На одному з проєктів для перехрестя в Мінську система замінила 12 петлевих датчиків, скоротивши витрати на обслуговування на 60%.
Як YOLO та ByteTracker забезпечують точність підрахунку трафіку?
Ми використовуємо YOLO (You Only Look Once) — сімейство нейромереж для real-time детекції об'єктів. У порівнянні з класичними методами (OpenCV + HOG) YOLO точніше в 2–3 рази і працює швидше. Наша базова модель — YOLOv8, навчена на наборі даних COCO і донавчена на записах з міських перехресть. Це дає точність класифікації 92–96% та recall 95–98%. У статті Ultralytics підтверджується, що YOLOv8 досягає mAP 0.53 на COCO — еталон для real-time детекції. Для покращення стійкості до погодних умов ми застосовуємо data augmentation: дощ, туман, зміна освітлення.
Чому важливий ByteTracker?
Для відстеження кожного автомобіля між кадрами ми впроваджуємо ByteTracker. Він ефективно працює при оклюзіях (коли одна машина перекриває іншу) та хибних спрацьовуваннях. Без трекера неможливо коректно порахувати потік і виміряти швидкість. ByteTracker використовує низькопорогові детекції, що знижує кількість розривів треків на 30% у порівнянні з простим IoU-трекінгом.
Як оцінюємо швидкість за відеопотоком?
Нижче — реалізація SpeedEstimator, який обчислює швидкість через зміну позиції треку за 5 кадрів. Похибка — ±5–10 км/год, достатньо для виявлення порушень та аналізу заторів.
class SpeedEstimator: def __init__(self, fps: float = 30.0, pixels_per_meter: float = 50.0): self.fps = fps self.ppm = pixels_per_meter self.track_positions = {} self.track_speeds = {} def estimate(self, track_id: int, position: tuple) -> float: """Speed in km/h through position change""" if track_id not in self.track_positions: self.track_positions[track_id] = [] self.track_positions[track_id].append(position) history = self.track_positions[track_id] if len(history) < 5: return 0.0 # Average offset over last 5 frames recent = history[-5:] total_dist_px = sum( np.linalg.norm(np.array(recent[i]) - np.array(recent[i-1])) for i in range(1, len(recent)) ) avg_dist_px_per_frame = total_dist_px / (len(recent) - 1) dist_m_per_frame = avg_dist_px_per_frame / self.ppm speed_ms = dist_m_per_frame * self.fps speed_kmh = speed_ms * 3.6 self.track_speeds[track_id] = speed_kmh return round(peed_kmh, 1) Калібрування камери виконується один раз: ми вимірюємо реальну відстань між двома точками на дорозі та обчислюємо коефіцієнт pixels_per_meter. При зміні ракурсу калібрування потрібно повторити, але для стаціонарних камер це робиться одноразово.
Детекція інцидентів
Система автоматично виявляє зупинені автомобілі (поріг швидкості <2 км/год більше 30 секунд), різкі гальмування, ДТП та неправильну поведінку пішоходів. Приклад детектора — нижче.
class IncidentDetector: def __init__(self, stopped_threshold_sec: float = 30.0): self.stopped_vehicles = {} self.stopped_threshold = stopped_threshold_sec self.incident_cooldown = {} def check_incidents(self, vehicles: list[dict], timestamp: float) -> list[dict]: incidents = [] for vehicle in vehicles: tid = vehicle['track_id'] speed = vehicle.get('speed_kmh', 0) pos = vehicle['center'] if speed < 2: if tid not in self.stopped_vehicles: self.stopped_vehicles[tid] = (pos, timestamp) else: stopped_pos, first_seen = self.stopped_vehicles[tid] duration = timestamp - first_seen if duration > self.stopped_threshold: if tid not in self.incident_cooldown or \ timestamp - self.incident_cooldown[tid] > 120: incidents.append({ 'type': 'stopped_vehicle', 'vehicle_id': tid, 'class': vehicle['class'], 'position': pos, 'duration_sec': duration }) self.incident_cooldown[tid] = timestamp else: self.stopped_vehicles.pop(tid, None) return incidents Будь-який автомобіль, що стоїть більше 30 секунд (налаштовується), реєструється як інцидент. Це допомагає запобігти вторинним ДТП та оптимізувати роботу евакуаторів. Аналізуючи різкі зміни швидкості та позиції, система може зафіксувати зіткнення. Додатково налаштовуються правила для виявлення виїзду на зустрічну смугу або руху по узбіччю.
Класифікація транспортних потоків
Вихідні метрики для транспортного відомства:
- PCE (Passenger Car Equivalent): вантажівка = 2.0 PCE, автобус = 1.5 PCE, мотоцикл = 0.5 PCE
- LOS (Level of Service): V/C ratio → рівень A–F
- Speed distribution: гістограма швидкостей
- Headway: інтервал між автомобілями
| Метрика системи | Значення |
|---|---|
| Точність класифікації ТЗ | 92–96% |
| Точність підрахунку (recall) | 95–98% |
| Точність швидкості | ±5–10 км/год |
| Latency виявлення інциденту | < 5 секунд |
Що входить у нашу роботу?
- Аналіз об'єкта — виїзд на місце, оцінка розташування камер, освітлення, вимог до інфраструктури.
- Проектування — вибір моделей, архітектури обробки, налаштування трекера та калібрування швидкості.
- Розробка та навчання — донавчання YOLO під специфіку об'єкта, інтеграція ByteTracker, створення веб-інтерфейсу.
- Тестування — прогін на історичних записах, замір точності, стрес-тест продуктивності.
- Деплой та інтеграція — встановлення на сервер, підключення до вашого ПЗ, налаштування сповіщень.
- Документація та навчання — передача інструкцій, навчання операторів, гарантійна підтримка 12 місяців.
Ми також версіонуємо моделі за допомогою MLflow та моніторимо дрейф даних, щоб система не втрачала точність з часом. Усі компоненти ліцензовані та сумісні з АСУДД.
Орієнтовні строки
| Масштаб | Строк |
|---|---|
| 1–4 перехрестя, базовий моніторинг | 5–7 тижнів |
| 10–30 точок, інтеграція з АСУДД | 10–16 тижнів |
| Міська система, 100+ камер | 18–28 тижнів |
Економія бюджету на моніторинг — до 50% у порівнянні з петлевими датчиками. Отримайте консультацію інженера та демонстрацію роботи системи на ваших даних. Зв'яжіться з нами — ми оцінимо ваш проєкт і підготуємо індивідуальну комерційну пропозицію. Замовте пілотний проєкт на 2 тижні, щоб переконатися в ефективності.







