На оживлённом перекрёстке ручной подсчёт машин даёт погрешность до 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: """Скорость в км/ч через изменение позиции""" 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 # Среднее смещение за последние 5 кадров 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 недели, чтобы убедиться в эффективности.







