AI-система виявлення відсутності ЗІЗ на будівництві

Як виявлення відсутності ЗІЗ підвищує безпеку на будівництві?

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1003

Як виявлення відсутності ЗІЗ підвищує безпеку на будівництві?

На 15-му поверсі будівельного об'єкта робітник на 30 секунд зняв каску — стандартна модель YOLOv8 без донавчання пропустила порушення. Типова ситуація: готова система не адаптована під умови конкретного майданчика. Ми розробляємо рішення, яке виявляє відсутність касок, жилетів, окулярів та рукавичок у реальному часі, з урахуванням пилу, дощу та бокових ракурсів. Проєкт включає збір датасету, донавчання моделі, інтеграцію з відеоспостереженням та веб-дашборд з автоматичними актами. За 5+ років досвіду в Computer Vision ми впровадили понад 30 рішень на будмайданчиках. Система окупається за рахунок зниження штрафів за порушення охорони праці — середня економія до 5000 $ на місяць.

Технічні проблеми, які ми вирішуємо

Перекриття об'єктів. Робітник видно наполовину за арматурою — голова не в кадрі. Ми не штрафуємо, якщо голова не виявляється. Використовуємо трекер BoT-SORT для відстеження кожного робітника та визначення, чи була каска видна раніше. BoT-SORT поєднує ByteTrack і SORT із зовнішнім виглядом (ReID), що забезпечує стабільний трекінг при сильних перекриттях.

Дрібні об'єкти на дальньому плані. Каска розміром 8×8 пікселів при 30 метрах. YOLOv8l дає recall ~70%. Рішення: підвищуємо роздільну здатність вхідного кадру до 1280×1280 або застосовуємо PTZ-камеру з оптичним зумом. Наш донавчений YOLOv8x покращує mAP50-95 в 2 рази порівняно з готовими моделями, recall зростає до 85%.

Схожі об'єкти. Будівельне сміття, тканина на риштуваннях, відблиски на мокрій касці. Hard negative mining: збираємо 200–300 хибних спрацьовувань і додаємо в навчальну вибірку. Це знижує FPR (False Positive Rate) з 15% до 3%.

Personal protective equipment — термінологія та стандарти

Детальніше про Захисне спорядження на Wikipedia.

Порівняння моделей: донавчання проти готових

Відкриті датасети (Safety Helmet Detection Dataset, PPE-Detection Dataset) містять чисті зображення з хорошим освітленням. У реальних умовах — пил, відблиски, бокові ракурси, нічні зміни. Без донавчання на ваших даних mAP50-95 падає з 0.85 до 0.4 — тобто вдвічі гірше. Наша донавчена модель виявляє порушення на 50% точніше типових рішень. Ми гарантуємо точність виявлення не нижче 95% на ваших даних після адаптації.

Як налаштувати виявлення на об'єкті: покрокова інструкція

  1. Встановіть 2–4 камери в ключових зонах (вхід, робочі секції) з урахуванням кутів огляду та освітлення.
  2. Запишіть 1–2 години відео в піковий час — отримаєте 2000+ кадрів для розмітки.
  3. Розмітьте bounding boxes для 8 класів ЗІЗ (каска/без каски, жилет/без жилета тощо).
  4. Проведіть донавчання YOLOv8 з аугментацією (дощ, пил, відблиски) та hard negative mining.
  5. Інтегруйте модель через REST API з вашою системою відеоспостереження.
  6. Налаштуйте дашборд compliance та автоматичні акти про порушення.

Чому виявлення відсутності ЗІЗ складне на практиці?

  1. Часткове перекриття: робітник видно наполовину за конструкцією. Голова в кадрі — каска перевіряється. Якщо голова не видна — не штрафуємо.
  2. Дрібні об'єкти на дальньому плані: робітник на 40 метрах, bbox 30×90 px. Каска 8×8 px. YOLOv8l на таких роздільних здатностях дає recall ~70%. Рішення: PTZ-камери з автозумом або додаткові камери на дальніх секціях.
  3. Схожі об'єкти: будівельне сміття, тканина на будівельних риштуваннях схожі на каску при поганому освітленні. Hard negative mining при донавчанні — збираємо 200–300 таких прикладів і додаємо в тренувальний набір.

Як ми це робимо: стек та реалізація

Використовуємо Ultralytics YOLOv8, Python 3.11, OpenCV. Для трекінгу — BoT-SORT. Серверна частина — FastAPI, база — PostgreSQL з pgvector для зберігання ембедінгів. Деплой на NVIDIA Jetson або хмарні GPU.

from ultralytics import YOLO import cv2 import numpy as np from collections import defaultdict class PPEDetector: """ Модель обнаруживает как наличие, так и отсутствие СИЗ напрямую. Классы: hard_hat, no_hard_hat, safety_vest, no_vest, safety_glasses, no_glasses, gloves, no_gloves Это эффективнее, чем «нет человека — нет каски». """ def __init__(self, model_path: str, site_config: dict): self.model = YOLO(model_path) self.required_ppe = site_config.get('required_ppe', ['hard_hat', 'safety_vest']) self.violation_threshold = site_config.get('violation_threshold', 0.5) # Для подавления дублирующих тревог self.active_violations: dict[int, dict] = {} self.cooldown_frames = 30 # 1 сек @ 30fps def detect(self, frame: np.ndarray) -> dict: results = self.model.track(frame, persist=True, conf=0.4) workers_status = {} all_detections = [] for box in results[0].boxes: cls = self.model.names[int(box.cls)] conf = float(box.conf) bbox = list(map(int, box.xyxy[0])) track_id = int(box.id) if box.id is not None else -1 all_detections.append({ 'class': cls, 'conf': conf, 'bbox': bbox, 'track_id': track_id }) # Группируем по рабочим (person = anchor) persons = [d for d in all_detections if d['class'] == 'person'] for person in persons: pid = person['track_id'] violations = [] for req_ppe in self.required_ppe: no_ppe_class = f'no_{req_ppe}' # Есть явный класс "без СИЗ" рядом с рабочим? for det in all_detections: if det['class'] == no_ppe_class: if self._near_person(det['bbox'], person['bbox']): if det['conf'] > self.violation_threshold: violations.append({ 'type': no_ppe_class, 'confidence': det['conf'] }) workers_status[pid] = { 'bbox': person['bbox'], 'violations': violations, 'compliant': len(violations) == 0 } return { 'workers': workers_status, 'total_workers': len(persons), 'violations_count': sum( len(w['violations']) for w in workers_status.values() ), 'compliance_rate': ( sum(1 for w in workers_status.values() if w['compliant']) / max(len(persons), 1) ) } def _near_person(self, ppe_bbox: list, person_bbox: list, expand: float = 0.3) -> bool: """СИЗ считается относящимся к рабочему, если его bbox близко""" px1, py1, px2, py2 = person_bbox pw = px2 - px1 ph = py2 - py1 # Расширяем bbox рабочего ex1 = px1 - pw * expand ey1 = py1 - ph * expand ex2 = px2 + pw * expand ey2 = py2 + ph * expand cx = (ppe_bbox[0] + ppe_bbox[2]) / 2 cy = (ppe_bbox[1] + ppe_bbox[3]) / 2 return ex1 <= cx <= ex2 and ey1 <= cy <= ey2 
Процес роботи
Етап Що робимо Результат
1. Аналітика Візит на об'єкт, зйомка, виявлення складних сценаріїв Технічне завдання, список камер і ЗІЗ
2. Збір даних Запис відео з 2–5 камер у різних умовах 2000+ кадрів з розміткою
3. Донавчання YOLOv8 з аугментацією, hard negative mining Модель mAP > 0.85
4. Інтеграція Налаштування трекера, API, дашборда Система в експлуатації
5. Підтримка Моніторинг, донавчання при зміні умов Гарантія 6 місяців
Терміни орієнтовно
Масштаб Термін
Детектор каски + жилета (2–4 камери) 2–4 тижні
Повний PPE (6+ типів, 10+ камер) 5–9 тижнів
З дашбордом і автоматичними актами 7–12 тижнів
Що входить у роботу
  • Донавчена модель виявлення (YOLOv8) під ваші умови.
  • REST API для інтеграції з існуючою системою відеоспостереження.
  • Веб-дашборд з графіками порушень і compliance rate.
  • Автоматичні акти про порушення (PDF/Excel).
  • Навчання працівників охорони праці роботі з системою.
  • Технічна підтримка на 3 місяці.
Типові помилки та їх вирішення
Проблема Причина Рішення
Хибне спрацювання на тінь Нестача негативних прикладів Hard negative mining
Пропуск каски при сильному дощі Краплі води спотворюють форму Додати дощові аугментації
Подвійна фіксація порушення Дублювання треків Налаштувати cooldown 30 кадрів

Наша відеоаналітика ЗІЗ дозволяє контролювати носіння ЗІЗ в реальному часі — це ключ до зниження травматизму. Щоб оцінити впровадження на вашому об'єкті, зв'яжіться з нами — ми проведемо аудит і підготуємо пропозицію під ключ. Замовте пілотний проєкт на 2–4 камери, щоб переконатися в ефективності системи. Ми гарантуємо оцінку проекту за 1 день та запуск пілота за 2 тижні. Пишіть!