Разработка CV-системы детекции повреждений (трещины, вмятины, царапины)

Недавно к нам обратилась страховая компания: им нужно было автоматически оценивать повреждения кузова по фото с мобильного телефона. Основная боль — мелкие царапины и вмятины, которые операторы пропускали. Мы разработали модель, которая находит дефекты размером от 0.5 мм и классифицирует их по степе

Направления 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
    1006

Недавно к нам обратилась страховая компания: им нужно было автоматически оценивать повреждения кузова по фото с мобильного телефона. Основная боль — мелкие царапины и вмятины, которые операторы пропускали. Мы разработали модель, которая находит дефекты размером от 0.5 мм и классифицирует их по степени серьёзности. Ошибка в локализации может стоить миллионов, поэтому мы добиваемся recall >95% при контролируемом уровне ложных срабатываний. За 5 лет на рынке мы выполнили более 50 проектов в области компьютерного зрения, включая детекцию дефектов для автомобильной и металлургической промышленности. Экономия ручного труда достигает 80%, а рекламации снижаются на 30%. Оценим ваш проект — свяжитесь с нами для консультации.

Типы повреждений и особенности детекции

Трещины — тонкие линейные структуры с малым соотношением ширины к длине. Стандартные детекторы плохо работают: bounding box большой, а дефект маленький. Лучше использовать сегментацию.

Вмятины — деформация поверхности без разрыва материала. Сложно детектировать в 2D; помогают нормированное освещение (рейкинговый свет) и 3D-реконструкция.

Царапины — аналогично трещинам, линейные структуры. Глубина влияет на серьёзность.

Как мы детектируем мелкие трещины и царапины?

Используем комбинацию YOLOv8 для instance segmentation и специализированной предобработки. Рейкинговый свет под малым углом создаёт тени от мельчайших неровностей, что позволяет выявлять дефекты толщиной в несколько пикселей. В пайплайн добавлены топ-хат трансформации и усиление контраста.

Архитектура системы

from ultralytics import YOLO import numpy as np import cv2 class DamageDetectionSystem: def __init__(self, config: dict): # Детектор повреждений (YOLOv8 instance segmentation) self.detector = YOLO(config['detection_model']) # Классификатор тяжести self.severity_classifier = load_severity_model(config['severity_model']) # Измеритель размеров (требует калибровки) self.pixels_per_mm = config.get('pixels_per_mm') def analyze(self, image: np.ndarray) -> dict: # Детекция и сегментация повреждений results = self.detector(image, conf=0.4, iou=0.5) damages = [] for i, (box, mask) in enumerate(zip( results[0].boxes, results[0].masks.data if results[0].masks else [] )): damage_type = self.detector.model.names[int(box.cls)] bbox = box.xyxy[0].tolist() area_px = int(mask.sum().item()) # Вырезаем регион для классификации тяжести x1, y1, x2, y2 = map(int, bbox) crop = image[y1:y2, x1:x2] severity = self.severity_classifier.predict(crop) # Реальные размеры если есть калибровка size_info = {} if self.pixels_per_mm: size_info['area_mm2'] = round(area_px / self.pixels_per_mm**2, 2) size_info['length_mm'] = self._estimate_length(mask) damages.append({ 'id': i, 'type': damage_type, 'severity': severity, 'bbox': bbox, 'area_pixels': area_px, 'confidence': float(box.conf), **size_info }) return { 'damages': damages, 'total_count': len(damages), 'has_critical': any(d['severity'] == 'critical' for d in damages), 'summary': self._generate_summary(damages) } 

Почему рейкинговый свет эффективен?

Для трещин и царапин стандартное фронтальное освещение недостаточно. Рейкинговый свет — источник под малым углом к поверхности — создаёт тени от мельчайших неровностей. Мы используем топ-хат трансформацию для выделения мелких деталей и выравнивание гистограммы для усиления контраста. Это повышает recall мелких дефектов на 15-20%.

def process_raking_light_image(image_path: str) -> np.ndarray: """Нормализованное изображение с рейкинговым светом""" # При правильном освещении на стенде — дополнительная обработка: img = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE) # Топ-hat трансформация для выделения мелких деталей kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (25, 25)) tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel) # Усиление контраста enhanced = cv2.equalizeHist(tophat) return enhanced 

Как измерять размеры дефектов?

После детекции нужно оценить реальные размеры — длину трещины или площадь вмятины. Для этого калибруем камеру по эталонному объекту. Параметр pixels_per_mm заносится в конфиг системы. Затем по маске дефекта вычисляем физические размеры. Для трещин используем скелетизацию маски — так точнее.

def measure_crack_length(mask: np.ndarray, pixels_per_mm: float) -> float: """Измерение длины трещины по скелету маски""" from skimage.morphology import skeletonize skeleton = skeletonize(mask > 0) # Длина скелета = приблизительная длина трещины length_px = skeleton.sum() return round(length_px / pixels_per_mm, 2) 

Для точного измерения размеров требуется калибровка по эталону. Мы используем шахматную доску с известным шагом, определяем матрицу камеры и коэффициент pixels_per_mm.

Датасеты и метрики

Публичные датасеты:

  • NEU Surface Defect — 6 классов дефектов стали, 1800 изображений
  • DAGM — текстурные дефекты, 10 категорий
  • AITEX Fabric — дефекты тканей
  • Concrete Crack Images — трещины в бетоне
# Пример обучения на NEU Surface Defect from ultralytics import YOLO model = YOLO('yolov8m-seg.pt') model.train( data='neu_defect.yaml', epochs=150, imgsz=640, batch=16, workers=8, optimizer='AdamW', lr0=5e-4, augment=True, degrees=180, # дефекты могут быть в любой ориентации fliplr=0.5, flipud=0.5, mosaic=1.0 ) 

Метрики на различных материалах

Материал [email protected] Сложность
Металл (царапины, трещины) 88–94% Средняя
Стекло (трещины) 82–89% Высокая
Пластик (вмятины) 84–91% Высокая
Бетон (трещины) 90–96% Средняя

Что входит в работу?

  1. Анализ требований и сбор датасета (съёмка дефектов на вашем оборудовании или используем готовые датасеты)
  2. Разработка модели детекции и сегментации, обучение с аугментацией
  3. Интеграция в вашу ИТ-инфраструктуру (REST API, Docker-контейнер)
  4. Калибровка камеры и настройка освещения (рейкинговый стенд при необходимости)
  5. Документация и обучение операторов
  6. Гарантийная поддержка 3 месяца

Средняя стоимость разработки такой системы зависит от сложности и объёма данных. Для типового проекта с 2-3 типами дефектов бюджет составляет от $15,000 до $50,000. Экономия на ручном контроле может превышать $80,000 в год. Получите предварительную оценку — свяжитесь с нами.

Сроки внедрения

Задача Срок
2–3 типа дефектов, supervised 3–5 недель
Размерный анализ + калибровка 5–8 недель
Промышленная система с освещением 8–14 недель

Чек-лист: готовность производства к AI-детекции дефектов

Перед запуском проекта проверьте по пунктам:

  • Наличие контролируемого освещения на стенде (рейкинговый или диффузный свет).
  • Стабильное крепление камеры с разрешением не ниже 5 МП для дефектов от 0.5 мм.
  • Исторический архив снимков: не менее 200–300 примеров каждого типа дефекта.
  • Чёткие критерии приёмки: максимально допустимый процент ложных срабатываний и пропусков.
  • Готовность к разметке данных (аннотация масок) или наличие предварительно размеченного датасета.
  • Определённый SLA: допустимое время инспекции одного объекта.

Мы гарантируем прозрачное сопровождение на всех этапах. Закажите консультацию инженера — обсудим детали вашего проекта. Получите решение, которое реально работает.

NEU Surface Defect dataset (Song et al., 2019)