AI-Powered Construction Progress Monitoring via Video

We design and deploy artificial intelligence systems: from prototype to production-ready solutions. Our team combines expertise in machine learning, data engineering and MLOps to make AI work not in the lab, but in real business.
Showing 1 of 1All 1566 services
AI-Powered Construction Progress Monitoring via Video
Complex
~2-4 weeks
Frequently Asked Questions

AI Development Areas

AI Solution Development Stages

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1319
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1226
  • image_websites_belfingroup_462_0.webp
    Website development for BELFINGROUP
    927
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1161
  • image_logo-advance_0.webp
    B2B Advance company logo design
    622
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    897

AI-Powered Construction Progress Monitoring via Video

Schedule slippage on a construction site means penalties and broken contracts. Manual monitoring requires an inspector's site visit, takes hours, and is subjective. On sites from 10,000 m² and up, a manual walkthrough can take up to 6 hours a day, with subjective assessment diverging from real progress by 15–20%. We develop neural network systems that automatically evaluate progress from camera or drone video, compare it with the BIM plan, and identify deviations. Our expertise: 15 years in AI and 80+ projects in construction computer vision. Time savings for control: up to 20%, accuracy: 97%. According to industry reports, automated monitoring reduces planning errors by 40%.

Why AI Monitoring Outperforms Traditional Methods

Traditional methods (inspector visits, satellite imagery, manual checklists) suffer from subjectivity, reporting delays, and scalability issues. AI monitoring uses computer vision and 4D BIM for real-time objective assessment. Comparison:

Method Speed (1000 m²) Accuracy Scalability
Manual walkthrough 4–6 hours ±15% Limited
AI monitoring 5 minutes ±3% Unlimited

How We Implement a Monitoring System on Your Site

The rollout process includes five steps:

  1. Site audit: capture baselines, mark zones, map cameras.
  2. Detector training: fine-tune YOLO on specific elements (formwork, rebar, concrete, etc.).
  3. BIM integration: connect to Autodesk BIM 360, Procore, or another platform via API.
  4. Pilot launch: monitor one zone for 2–3 weeks, calibrate the model.
  5. Scale: deploy across all cameras, set up reports and alerts.

Technical Implementation: 4D BIM + Computer Vision

The key component is a detector of structural elements, trained on thousands of labeled images from construction sites. We use YOLOv8, PyTorch, and SSIM for orthophoto comparison. Below is a Python class example.

Technical details of detector training The model is fine-tuned on a dataset of 15,000 labeled frames collected from sites of varying complexity. Augmentation is used: rotations, lighting changes, noise. Batch size: 32, learning rate: 0.001, optimizer: Adam. Training takes 12–15 hours on an NVIDIA A100. We achieve [email protected] = 0.92 on validation.
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'

Drones for Progress Monitoring: Automated Surveys

For large sites, we use drones with RTK receivers (e.g., DJI Phantom 4). Automated flights along predefined waypoints produce orthophoto maps. Comparing current and previous week's orthophoto via SSIM analysis quantifies the area of changed elements.

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

Integration with Procore, Autodesk Construction Cloud

Monitoring results are integrated into construction platforms via API:

  • Procore — automatic observations for detected delays
  • Autodesk BIM 360 — update progress in the 4D model
  • MS Project / Primavera P6 — actual vs. plan as task updates

Collection and Labeling of Training Data

To train the detector, we combine synthetic data (renders from BIM models) and real images from 20 sites. Labeling is done by construction engineers: they outline formwork, rebar, concrete structures, brickwork, etc. Each frame undergoes verification — 30% of data is reviewed by a second expert. This ensures labeling quality and detection accuracy.

Case Study: Shopping Center, 45,000 m²

Our client was a developer of a large shopping center. Weekly drone surveys (DJI Phantom 4 RTK), 350–400 images per flight. AI progress analysis across 12 zones.

Over 12 weeks, the system detected a delay in Section D (monolithic works): expected progress 65%, actual from video analysis 48%. This allowed schedule correction 3 weeks before the critical deadline by reallocating crews. Total savings on penalties and material waste exceeded 2 million rubles.

What Is Included in the Development

Stage Result
Detector training Model recognizing 10+ element classes
Camera integration API for streaming video upload
Pilot launch Reports for one zone, calibration
Full deployment Monitoring all zones, alerts, dashboard
Technical support 3 months of warranty maintenance

Estimated Implementation Timelines

Project Type Duration
Basic construction element detector 4–6 weeks
Progress monitoring system (cameras + reports) 8–12 weeks
Full platform with drone + BIM integration 14–22 weeks

Cost is calculated individually based on the site's needs.

Contact us to discuss your site and get a preliminary estimate. Order a pilot launch on one zone to see the solution's effectiveness firsthand.