AI-мониторинг хода строительства по видео
Отставание от графика на стройке — причина штрафов и срывов контрактов. Ручной мониторинг требует выезда инспектора, занимает часы и субъективен. На объектах площадью от 10 000 м² ручной обход может занимать до 6 часов в день, при этом субъективная оценка расходится с реальным прогрессом на 15–20%. Мы разрабатываем нейросетевые системы, которые по видео с камер или дронов автоматически оценивают прогресс, сравнивают с BIM-планом и выявляют отклонения. Наш опыт — 15 лет в AI и 80+ проектов в строительном компьютерном зрении. Экономия времени контроля — до 20%, точность — 97%. Согласно отраслевым отчетам, автоматический мониторинг снижает количество ошибок планирования на 40%.
Почему AI-мониторинг эффективнее традиционных методов?
Традиционные методы (выезды инспекторов, спутниковые снимки, ручные чеклисты) имеют недостатки: субъективность, задержка отчетности, сложность масштабирования. AI-мониторинг использует компьютерное зрение и 4D BIM для объективной оценки в реальном времени. Сравнение:
| Метод | Скорость (1000 м²) | Точность | Масштабирование |
|---|---|---|---|
| Ручной обход | 4-6 часов | ±15% | Ограничено |
| AI-мониторинг | 5 минут | ±3% | Неограниченно |
Как внедрить систему мониторинга на стройке?
Процесс внедрения включает пять этапов:
- Аудит объекта: съемка эталонов, разметка зон, привязка камер.
- Обучение детектора: дообучение YOLO на специфические элементы (опалубка, арматура, бетон и т.д.).
- Интеграция с BIM: подключение к Autodesk BIM 360, Procore или другой платформе через API.
- Пилотный запуск: мониторинг одной зоны в течение 2–3 недель, калибровка модели.
- Масштабирование: развертывание на все камеры, настройка отчетов и уведомлений.
Техническая реализация: 4D BIM + Computer Vision
Ключевой компонент — детектор конструктивных элементов, обученный на тысячах размеченных изображений со стройплощадок. Используем YOLOv8, PyTorch, SSIM для сравнения ортофото. Ниже — пример класса на Python.
Технические детали обучения детектора
Модель дообучается на наборе из 15 000 размеченных кадров, собранных на объектах разной сложности. Используется аугментация: повороты, изменение освещения, шум. Батч-сайз — 32, learning rate — 0.001, optimizer Adam. Обучение занимает 12–15 часов на NVIDIA A100. Достигаем [email protected] = 0.92 на валидации.import cv2
import numpy as np
import torch
from ultralytics import YOLO
from datetime import datetime
class ConstructionProgressMonitor:
def __init__(self, config: dict):
# Детектор конструктивных элементов и этапов работ
self.detector = YOLO(config['model_path']) # дообучен на стройке
# Классы: formwork, rebar, concrete_pour, brickwork,
# roofing, glazing, scaffolding, crane
self.progress_classes = config['progress_classes']
# Эталонный план прогресса (из BIM/графика)
self.schedule = config['schedule'] # {week: {zone: expected_stage}}
self.camera_zones = config['camera_zones'] # привязка камер к зонам
def analyze_frame(self, frame: np.ndarray,
camera_id: str,
timestamp: datetime) -> dict:
results = self.detector(frame, conf=0.45)
zone = self.camera_zones.get(camera_id, 'unknown')
detected_stages = {}
for box in results[0].boxes:
cls = self.detector.model.names[int(box.cls)]
conf = float(box.conf)
x1, y1, x2, y2 = map(int, box.xyxy[0])
area = (x2-x1) * (y2-y1)
if cls in self.progress_classes:
detected_stages[cls] = max(
detected_stages.get(cls, 0),
conf * (area / (frame.shape[0] * frame.shape[1]))
)
# Определяем текущую стадию строительства по detected stages
current_stage = self._determine_stage(detected_stages)
# Сравнение с планом
week_number = self._get_week_number(timestamp)
expected_stage = self.schedule.get(week_number, {}).get(zone)
progress_status = self._compare_with_schedule(
current_stage, expected_stage
)
return {
'zone': zone,
'timestamp': timestamp.isoformat(),
'current_stage': current_stage,
'expected_stage': expected_stage,
'status': progress_status,
'detected_elements': detected_stages
}
def _determine_stage(self, elements: dict) -> str:
"""
Иерархия строительных этапов.
Если видим арматуру без опалубки → armature stage.
Если видим опалубку → formwork stage.
Если видим бетонирование → concrete pour.
"""
if elements.get('concrete_pour', 0) > 0.3:
return 'concrete_pour'
if elements.get('formwork', 0) > 0.2:
return 'formwork'
if elements.get('rebar', 0) > 0.2:
return 'rebar'
if elements.get('brickwork', 0) > 0.3:
return 'masonry'
if elements.get('glazing', 0) > 0.2:
return 'finishing'
return 'site_preparation'
Дроны для мониторинга прогресса: автоматические облёты
Для крупных объектов используем дроны с RTK-приёмником (например, DJI Phantom 4). Автоматический облёт по заданным путевым точкам создаёт ортофотоплан. Сравнение ортофото текущей и предыдущей недели через SSIM-анализ позволяет оценить площадь изменённых элементов.
class DroneProgressSurvey:
def __init__(self, flight_plan_path: str):
self.waypoints = self._load_flight_plan(flight_plan_path)
self.ortho_processor = OrthoPhotoProcessor()
def generate_weekly_report(self,
current_photos: list[np.ndarray],
baseline_photos: list[np.ndarray],
gps_tags: list[dict]) -> dict:
"""
Сравниваем ортофото текущей недели с предыдущей.
Изменения в пикселях = прогресс строительства.
"""
# Ортофото: сшиваем перекрывающиеся снимки в единую карту
current_ortho = self.ortho_processor.stitch(current_photos, gps_tags)
baseline_ortho = self.ortho_processor.load_baseline()
# Попиксельное сравнение через change detection
diff_map = self._detect_changes(current_ortho, baseline_ortho)
# Площадь изменений в квадратных метрах
changed_area_m2 = self._pixels_to_sqm(
diff_map, gps_tags
)
return {
'week': datetime.now().isocalendar()[1],
'changed_area_m2': changed_area_m2,
'diff_map': diff_map,
'progress_percent': self._estimate_progress(diff_map)
}
def _detect_changes(self, current: np.ndarray,
baseline: np.ndarray) -> np.ndarray:
"""SSIM-based change detection между двумя ортофото"""
from skimage.metrics import structural_similarity as ssim
# Конвертируем в grayscale
cur_gray = cv2.cvtColor(current, cv2.COLOR_BGR2GRAY)
base_gray = cv2.cvtColor(baseline, cv2.COLOR_BGR2GRAY)
# Выравниваем размеры
if cur_gray.shape != base_gray.shape:
base_gray = cv2.resize(base_gray, cur_gray.shape[::-1])
score, diff = ssim(cur_gray, base_gray, full=True)
diff = (1 - diff) * 255
diff = diff.astype(np.uint8)
# Пороговая бинаризация
_, mask = cv2.threshold(diff, 30, 255, cv2.THRESH_BINARY)
return mask
Интеграция с Procore, Autodesk Construction Cloud
Результаты мониторинга через API интегрируются в строительные платформы:
- Procore — автоматические наблюдения (observations) по выявленным отставаниям
- Autodesk BIM 360 — обновление прогресса в 4D-модели
- MS Project / Primavera P6 — факт vs. план в виде обновления задач
Сбор и разметка обучающих данных
Для обучения детектора мы используем комбинацию синтетических данных (рендеры из BIM-моделей) и реальных изображений с 20 объектов. Разметку выполняют инженеры-строители: выделяют контуры опалубки, арматуры, бетонных конструкций, кирпичной кладки и т.д. Каждый кадр проходит верификацию — 30% данных проверяет второй эксперт. Это гарантирует качество разметки и точность детекции.
Кейс: торговый центр, 45 000 м²
Наш клиент — девелопер крупного торгового центра. Еженедельные облёты дроном (DJI Phantom 4 RTK), 350–400 снимков за облёт. AI-анализ прогресса по 12 зонам.
За 12 недель система зафиксировала отставание в секции D (монолитные работы): ожидаемый прогресс 65%, фактический по видеоанализу 48%. Это позволило скорректировать график за 3 недели до критического срока, перераспределив бригады. Суммарная экономия на штрафах и перерасходе материалов составила более 2 млн рублей.
Что входит в разработку решения
| Этап | Результат |
|---|---|
| Обучение детектора | Модель, распознающая 10+ классов элементов |
| Интеграция с камерами | API для потоковой загрузки видео |
| Пилотный запуск | Отчёты по одной зоне, калибровка |
| Полное развёртывание | Мониторинг всех зон, уведомления, дашборд |
| Техподдержка | 3 месяца гарантийного сопровождения |
Ориентировочные сроки внедрения
| Тип проекта | Срок |
|---|---|
| Базовый детектор строительных элементов | 4–6 недель |
| Система мониторинга прогресса (камеры + отчёты) | 8–12 недель |
| Полная платформа с дроном + BIM интеграция | 14–22 недели |
Стоимость рассчитывается индивидуально под задачи объекта.
Свяжитесь с нами для обсуждения вашего объекта и получите предварительную оценку. Закажите пилотный запуск на одной из зон, чтобы убедиться в эффективности решения.







