AI-система інспекції дорожнього покриття
Ями, тріщини, вибоїни — щорічні витрати на їх усунення обчислюються мільярдами. Проблема в тому, що до моменту візуального виявлення дорожніми робітниками дефект уже переходить у критичну стадію. Традиційний ручний огляд — це тижні роботи та суб'єктивні оцінки. Ми розробляємо AI-інспекцію з камер транспортних засобів або спеціальних машин. Вона дозволяє виявляти ранні ознаки деградації покриття та пріоритизувати ремонт. Наші сертифіковані інженери мають понад 7 років досвіду в Computer Vision і реалізували понад 15 проєктів з інспекції доріг. Економія бюджету на ремонт порівняно з ручним обстеженням сягає 40%. Строк окупності системи становить менше двох місяців за рахунок зниження витрат на виїзні бригади та лабораторні аналізи.
Як працює AI-інспекція дорожнього покриття?
Система обробляє відеопотік з камер, встановлених на автомобілі. Кожен кадр проходить через дві нейромережі: сегментаційну (UNet++ для тріщин) та детекційну (YOLOv8 для ям). Результати накладаються на GPS-треки, формуючи карту дефектів з індексом стану покриття (PCI — Pavement Condition Index, стандарт ASTM D6433). Це в 10 разів швидше за ручне обстеження. Пайплайн оптимізовано для роботи в реальному часі: latency p99 не перевищує 150 мс на кадр.
Які дефекти можна виявити?
Стандарт ASTM D6433 виділяє 20 типів дистресу. На практиці ми працюємо з 7–8 ключовими:
| Тип дефекту | Метод виявлення | Складність |
|---|---|---|
| Ями (potholes) | Object detection (bbox) | Середня |
| Поздовжні тріщини | Segmentation | Висока |
| Поперечні тріщини | Segmentation | Середня |
| Сітчасті тріщини (alligator) | Texture classification | Висока |
| Колійність (rutting) | 3D профіль / stereo | Дуже висока |
| Вибоїни (raveling) | Texture + anomaly | Середня |
| Просадка (depression) | 3D профіль | Висока |
Чому наша система точніша за ручний огляд?
Ручний огляд доріг залежить від кваліфікації інспектора та умов освітлення. Наша AI-система використовує дві нейромережі: сегментаційну UNet++ для тріщин (точність mIoU 0.78 на тестових даних) та детекційну YOLOv8m для ям ([email protected] 0.85). Оцінка PCI корелює з ручною на рівні r=0.87 — це означає, що автоматизований підхід не поступається експертній оцінці, а за швидкістю перевершує в 10 разів.
Модель детекції та сегментації
import torch import numpy as np import segmentation_models_pytorch as smp from ultralytics import YOLO import cv2 class PavementInspector: def __init__(self, seg_model_path: str, det_model_path: str): # Сегментація тріщин: UNet++ з ResNet50 енкодером # Дообучений на RDD2022 (Road Damage Dataset, 47k зображень) self.seg_model = smp.UnetPlusPlus( encoder_name='resnet50', encoder_weights=None, in_channels=3, classes=4, # background, longitudinal, transverse, alligator ) seg_ckpt = torch.load(seg_model_path) self.seg_model.load_state_dict(seg_ckpt) self.seg_model.eval() # YOLOv8m для ям та вибоїн (bbox достатньо) self.det_model = YOLO(det_model_path) # Маппінг класів сегментації self.seg_classes = { 0: 'background', 1: 'longitudinal_crack', 2: 'transverse_crack', 3: 'alligator_crack' } # Маппінг для оцінки тяжкості (PCI-based) self.severity_thresholds = { 'pothole': {'low': 0.01, 'medium': 0.05}, # % площі кадру 'crack': {'low': 0.02, 'medium': 0.08} } @torch.no_grad() def inspect(self, frame: np.ndarray) -> dict: h, w = frame.shape[:2] # 1. Сегментація тріщин input_tensor = self._preprocess(frame) seg_output = self.seg_model(input_tensor) seg_mask = seg_output.argmax(dim=1)[0].numpy() crack_analysis = self._analyze_cracks(seg_mask, w * h) # 2. Детекція ям det_results = self.det_model(frame, conf=0.45) potholes = self._analyze_potholes(det_results, w * h) # 3. Індекс стану покриття (спрощений PCI) pci = self._compute_pci(crack_analysis, potholes) return { 'crack_analysis': crack_analysis, 'potholes': potholes, 'pci_score': pci, 'condition': self._pci_to_condition(pci), 'seg_mask': seg_mask } def _analyze_cracks(self, mask: np.ndarray, total_pixels: int) -> dict: analysis = {} for cls_id, cls_name in self.seg_classes.items(): if cls_id == 0: continue crack_pixels = int((mask == cls_id).sum()) ratio = crack_pixels / total_pixels analysis[cls_name] = { 'pixel_count': crack_pixels, 'area_ratio': ratio, 'severity': 'high' if ratio > 0.08 else 'medium' if ratio > 0.02 else 'low' } return analysis def _compute_pci(self, cracks: dict, potholes: list) -> float: """ PCI 0–100: 100 = ідеальне покриття, 0 = повна деградація. Спрощена формула на основі ASTM D6433. """ deduct = 0.0 for crack_type, data in cracks.items(): ratio = data['area_ratio'] if ratio > 0.08: deduct += 25 elif ratio > 0.02: deduct += 12 elif ratio > 0.005: deduct += 5 for pothole in potholes: area = pothole['area_ratio'] if area > 0.03: deduct += 30 elif area > 0.01: deduct += 15 return max(0, 100 - deduct) def _pci_to_condition(self, pci: float) -> str: if pci >= 85: return 'excellent' elif pci >= 70: return 'good' elif pci >= 55: return 'fair' elif pci >= 40: return 'poor' elif pci >= 25: return 'very_poor' else: return 'failed' Мобільна інспекція: камера на транспортному засобі
Для доріг загального користування встановлюємо камеру під переднім бампером або в решітці радіатора. Запис відбувається зі швидкістю 25 fps з прив'язкою до GPS. Додатково підключаємо акселерометр для автоматичної фіксації ям за вібрацією.
class MobileRoadSurvey: def __init__(self, gps_logger, inspector: PavementInspector): self.gps = gps_logger self.inspector = inspector self.survey_log = [] def process_frame_with_geotagging(self, frame: np.ndarray, timestamp: float) -> dict: gps_coords = self.gps.get_coords(timestamp) results = self.inspector.inspect(frame) record = { 'timestamp': timestamp, 'lat': gps_coords['lat'], 'lon': gps_coords['lon'], 'pci': results['pci_score'], 'condition': results['condition'], 'defects': results } self.survey_log.append(record) return record Кейс з нашої практики: інспекція 120 км доріг міста
Задача: пріоритизація дорожнього ремонту. Наш клієнт — міська адміністрація. Інструмент: Ford Transit з 4 камерами (перед + 2 борти + зад), GPS RTK. За 3 дні зйомки покрито 120 км.
- Оброблено: 1.2 млн кадрів
- Виявлено: 3400 ям (P > 0.5), 47 км тріщин (сегментація)
- З них критичних (PCI < 25): 8.2 км — першочерговий ремонт
- Економія порівняно з ручним обстеженням: 12 робочих днів → 6 годин обробки + 3 години верифікації, що дозволило значно заощадити на зарплаті інспекторів
Результат дозволив заощадити бюджет і спрямувати ресурси на найбільш проблемні ділянки. Досвід цієї інтеграції ми застосовуємо в нових проєктах. Зв'яжіться з нами, щоб обговорити ваш проєкт.
Що входить в роботу
- Аудит даних: збір та розмітка датасету (мінімум 10 000 кадрів)
- Навчання моделей: fine-tuning YOLOv8 та UNet++ під ваші дороги та клімат
- Інтеграція з GIS: прив'язка дефектів до координат, побудова карт PCI
- Встановлення обладнання: камери, GPS, акселерометр
- Навчання операторів та техпідтримка
- Гарантія на модель: безкоштовне донавчання при зміні сезону
Процес роботи
- Аналітика: виїзд на об'єкт, оцінка умов зйомки, збір еталонних даних.
- Проєктування: вибір архітектури моделі, налаштування пайплайну обробки.
- Реалізація: навчання моделей, інтеграція з бортовим ПЗ.
- Тестування: пробний заїзд, верифікація результатів з ручним оглядом.
- Деплой: встановлення системи на транспорт, запуск в експлуатацію.
Після деплою система може працювати в режимі автоматичного моніторингу доріг з регулярним відправленням звітів у GIS.
Строки орієнтовно
| Тип проєкту | Строк |
|---|---|
| Детектор ям (базовий) | 3–5 тижнів |
| Повна інспекційна система (+ тріщини, PCI) | 7–12 тижнів |
| Мобільна система з GIS-інтеграцією | 10–16 тижнів |
Вимоги до камер та обладнання
Для базової конфігурації достатньо однієї камери з роздільною здатністю Full HD (1920x1080) та кутом огляду не менше 100°. Для стереовимірювання колійності потрібні дві камери з відомою базою. GPS-приймач обов'язковий (точність 2-5 м, RTK за потреби). Акселерометр опціональний, але підвищує точність фіксації ям.Гарантуємо якість: всі моделі проходять валідацію на реальних даних. Наші сертифіковані інженери мають досвід впровадження в 5 містах. Замовте пілотний проєкт, щоб переконатися в ефективності. Отримайте консультацію — зв'яжіться з нами.







