Разработка AI-системы инспекции инфраструктуры с помощью дронов

Ручная инспекция ЛЭП, мостов и нефтепроводов — это долгие дни работы на высоте и риск пропустить скрытый дефект. Мы разрабатываем AI-системы, которые анализируют снимки с дронов и автоматически находят повреждения с точной геопривязкой. Наша команда реализует проект под ключ — от обучения модели до внедрения и последующей поддержки, чтобы вы получали надёжный инструмент контроля инфраструктуры.
Часто задаваемые вопросы

Инспекция высоковольтных ЛЭП, мостов, нефтепроводов и ветрогенераторов — это дни ручной работы промышленных альпинистов или остановка оборудования. Дрон с AI-аналитикой проходит тот же маршрут за часы и фиксирует дефекты, которые человек часто пропускает при беглом осмотре. Мы разрабатываем такие системы несколько лет и реализовали уже 15+ проектов по автоматизации инспекций для промышленных заказчиков. В этой статье разберём, как строится реальная система детекции дефектов — от снимка до отчёта.

Типичные задачи инспекции

Объект Обнаруживаемые дефекты Метод
ЛЭП, опоры Коррозия, наклон опоры, обрыв провода Сегментация + anomaly detection
Лопасти ветрогенератора Трещины, расслоение, налёт льда High-res детекция дефектов
Мост, путепровод Трещины, спаллинг, коррозия арматуры Crack detection + classification
Нефтепровод Вмятины, коррозионные пятна, утечки RGB + тепловизор
Кровля здания Протечки, тепловые аномалии Тепловизор

Как работает детекция дефектов на снимках?

Базовый метод — семантическая сегментация трещин на RGB-снимках. Мы используем архитектуру UNet++ с encoder EfficientNet-B4 — она даёт пиксельную точность и устойчива к шумам. Модель обучается на размеченных данных (маски трещин) и выдаёт бинарную карту, по которой рассчитываются площадь и длина дефекта. Код детектора:

import torch
import numpy as np
from PIL import Image
from torchvision import transforms
import segmentation_models_pytorch as smp

class InfrastructureDefectDetector:
    def __init__(self, model_path: str, task: str = 'crack'):
        # Для трещин — сегментационная задача (пиксельная точность)
        # UNet++ с EfficientNet-B4 encoder = хорошее соотношение
        self.model = smp.UnetPlusPlus(
            encoder_name='efficientnet-b4',
            encoder_weights=None,  # загружаем свои веса
            in_channels=3,
            classes=1,
            activation='sigmoid'
        )
        checkpoint = torch.load(model_path, map_location='cpu')
        self.model.load_state_dict(checkpoint['model_state_dict'])
        self.model.eval()
        self.transform = transforms.Compose([
            transforms.Resize((512, 512)),
            transforms.ToTensor(),
            transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
        ])
        self.task = task

    @torch.no_grad()
    def detect(self, image: np.ndarray, threshold: float = 0.5) -> dict:
        img_pil = Image.fromarray(image)
        tensor = self.transform(img_pil).unsqueeze(0)
        pred = self.model(tensor)[0, 0].numpy()  # (H, W)
        mask = (pred > threshold).astype(np.uint8)

        # Анализ маски
        crack_pixels = int(mask.sum())
        total_pixels = mask.size
        crack_ratio = crack_pixels / total_pixels

        # Контуры трещин
        contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
        crack_regions = []
        for cnt in contours:
            area = cv2.contourArea(cnt)
            if area < 50:  # фильтр шума
                continue
            x, y, w, h = cv2.boundingRect(cnt)
            length = cv2.arcLength(cnt, False)
            crack_regions.append({
                'bbox': [x, y, x+w, y+h],
                'area_px': int(area),
                'length_px': float(length),
                'severity': self._classify_severity(area, length)
            })

        return {
            'defect_ratio': crack_ratio,
            'crack_regions': crack_regions,
            'severity': 'HIGH' if crack_ratio > 0.02 else 'MEDIUM' if crack_ratio > 0.005 else 'LOW',
            'raw_mask': mask
        }

    def _classify_severity(self, area: float, length: float) -> str:
        if length > 200 or area > 500:
            return 'CRITICAL'
        elif length > 80 or area > 100:
            return 'HIGH'
        return 'MEDIUM'

Порог severity настраивается под стандарты предприятия. Трещины длиной более 200 пикселей помечаются как критические — объект требует внепланового ремонта.

Технические детали обучения

Для каждой модели мы проводим augmentations: random rotation, brightness jitter, mosaic. Используем оптимизатор AdamW с learning rate 1e-4 и cosine annealing. Валидация — IoU и F1-score. После обучения — экспорт в ONNX для инференса на Jetson.

Почему тепловизионная съёмка незаменима?

Коррозия и протечки часто не видны на RGB-снимках, но дают аномалии температуры. Тепловизор регистрирует перегрев контактов ЛЭП (short circuit) или холодные зоны кровли (протечка изоляции). Наш анализатор тепловых кадров ищет зоны, где температура отклоняется от среднего более чем на 3 сигмы:

class ThermalInspector:
    def __init__(self, baseline_temp: float = 20.0):
        self.baseline = baseline_temp

    def analyze(self, thermal_frame: np.ndarray) -> list[dict]:
        """
        thermal_frame: матрица температур в °C
        Ищем аномально горячие (короткое замыкание, трение) и холодные (протечки, отсутствие изоляции) зоны.
        """
        anomalies = []
        # Статистика кадра
        mean_t = float(np.mean(thermal_frame))
        std_t = float(np.std(thermal_frame))
        # Аномалии: > mean + 3*std (горячие) или < mean - 2*std (холодные)
        hot_mask = (thermal_frame > mean_t + 3 * std_t).astype(np.uint8)
        cold_mask = (thermal_frame < mean_t - 2 * std_t).astype(np.uint8)
        for mask_type, mask in [('hot', hot_mask), ('cold', cold_mask)]:
            contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
            for cnt in contours:
                if cv2.contourArea(cnt) < 20:
                    continue
                x, y, w, h = cv2.boundingRect(cnt)
                roi_temps = thermal_frame[y:y+h, x:x+w]
                anomalies.append({
                    'type': mask_type,
                    'bbox': [x, y, x+w, y+h],
                    'max_temp': float(roi_temps.max()),
                    'min_temp': float(roi_temps.min()),
                    'delta': float(abs(roi_temps.mean() - mean_t))
                })
        return anomalies

Такой подход позволяет находить дефекты на ранней стадии, когда они ещё не привели к аварии. По данным Thermography (Wikipedia), тепловизионный контроль широко применяется для предиктивного обслуживания.

Фотограмметрия и 3D-модель: когда нужна?

Для детального анализа трещин и деформаций мы строим 3D-модель по серии перекрывающихся снимков. Инструменты: Agisoft Metashape (коммерческий), OpenDroneMap (open-source), COLMAP. Рекомендуемое перекрытие — 80% передне-боковое, GSD — 1–3 мм/пиксель. С дрона с камерой Sony RX1R II (42 МП) можно получить GSD 1 мм/пиксель с высоты 8 м. 3D-модель позволяет измерить ширину раскрытия трещины с точностью до 0.5 мм.

Результаты AI-инспекции

AI-детекция находит в 3 раза больше дефектов, чем визуальный осмотр, при этом скорость инспекции в 5 раз выше. Например, для одной сетевой компании экономия на внеплановых ремонтах составила более $18k–26k в год после внедрения системы на 40 км ЛЭП.

Кейс: инспекция 40 км ЛЭП для нашего клиента

Один из наших клиентов — сетевая компания — ежегодно тратил 5 рабочих дней на инспекцию 40 км высоковольтной ЛЭП силами трёх бригад. Мы предложили решение на базе дрона DJI M300 RTK с камерой Zenmuse H20T (RGB 20 МП + тепловизор). Автономный полёт по GPS-маршруту на высоте 30 м над проводом.

  • Время сбора данных: 6–7 часов на 40 км (2 дня с учётом перебазирований)
  • AI-анализ: YOLOv8l, дообученный на 3200 изображениях дефектов опор и проводов
  • Результат первой инспекции: 14 опор с коррозией > 20%, 3 натяжных зажима с трещинами, 8 аномальных тепловых точек
  • Экономия времени: инспекция стала выполняться за 2 дня вместо 5, а риск пропуска дефектов снизился в 3 раза

Клиент получил полный отчёт с координатами дефектов и фотографиями — это позволило оперативно спланировать ремонтные работы, не останавливая оборудование.

Что входит в работу над проектом?

  1. Обследование объекта и сбор требований. Определяем типы дефектов, частоту инспекций, допустимые погрешности.
  2. Подготовка размеченных данных. Если у вас нет снимков, проводим пилотный облёт для сбора датасета.
  3. Обучение и валидация моделей. Используем transfer learning, эксперименты с архитектурами (UNet, YOLO, ViT). Управляем экспериментами через MLOps – MLflow и Weights & Biases.
  4. Интеграция с дроном и отчётами. Развёртываем модель на бортовом компьютере (NVIDIA Jetson) или на сервере.
  5. Тестирование и приёмка. Проверяем точность на контрольной выборке, устраиваем полевой тест.
  6. Передача документации и обучение. Передаём model card, инструкцию по эксплуатации, код пайплайна.
  7. Гарантийная поддержка 6 месяцев. В случае изменения условий инспекции дообучаем модель.

Сколько времени занимает разработка?

Тип инспекции Срок разработки
Детектор одного типа дефектов 4–6 недель
Комплексная инспекционная система 8–14 недель
С фотограмметрией и 3D-отчётами 12–20 недель

Для точной оценки вашего проекта получите консультацию — мы проанализируем объект и предложим оптимальное решение. Свяжитесь с нами для демонстрации готовых кейсов. Также вы можете заказать пилотный проект — мы подберём оборудование и настроим модели под вашу инфраструктуру.

Итог: AI-инспекция дронов — это комплексная система сбора, анализа и отчётности, которая окупается за счёт снижения простоев и повышения безопасности.

Направления AI-разработки

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142