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:
- Site audit: capture baselines, mark zones, map cameras.
- Detector training: fine-tune YOLO on specific elements (formwork, rebar, concrete, etc.).
- BIM integration: connect to Autodesk BIM 360, Procore, or another platform via API.
- Pilot launch: monitor one zone for 2–3 weeks, calibrate the model.
- 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.







