AI-інспекція текстилю: детекція дефектів з точністю 97%

Розробка AI для детекції дефектів тканини та текстилю Текстильне виробництво втрачає до 5% виручки через брак, який пропускає ручна інспекція. Один оператор перевіряє 20–30% рулонів на швидкості 20–40 м/хв і пропускає 15–25% дефектів через втому. При цьому кожен рулон довжиною 50–100 м коштує тис

Напрямки 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

Розробка AI для детекції дефектів тканини та текстилю

Текстильне виробництво втрачає до 5% виручки через брак, який пропускає ручна інспекція. Один оператор перевіряє 20–30% рулонів на швидкості 20–40 м/хв і пропускає 15–25% дефектів через втому. При цьому кожен рулон довжиною 50–100 м коштує тисячі гривень, а пропущений брак йде клієнту. Пропуск дефектного рулону — значна втрата. Ми пропонуємо альтернативу: AI-систему комп'ютерного зору, яка інспектує 100% поверхні тканини на швидкості до 100 м/хв, стабільно виявляючи навіть мікроскопічні дефекти. Система базується на методах комп'ютерного зору та машинного навчання. Вона працює під ключ: від збору датасету до інтеграції у виробничу лінію.

Які проблеми вирішуємо

Наші клієнти стикаються з типовими складнощами:

  • Висока швидкість лінії — при 60 м/хв оператор фізично не встигає помітити дірку розміром 1 мм. Наш детектор обробляє кожен тайл за 10 мс на GPU, забезпечуючи пропускну здатність до 80+ м/хв на RTX-карті.
  • Різноманітність дефектів — діри, плями, розриви ниток, помилки переплетення, подряпини, складки. Ми використовуємо дворівневу архітектуру: PatchCore для anomaly detection та YOLOv8 для класифікації. Це дає recall > 0.95 за всіма класами.
  • Мінливість тканин — гладкі, ворсисті, з малюнком. Anomaly detection на PatchCore не потребує розмітки дефектів — тільки хороші зразки. Перенавчання на новий тип тканини займає один тиждень.

Як працює дворівнева детекція?

Стек: PyTorch, PatchCore, EfficientAD, YOLOv8, OpenCV, TensorRT для інференсу. Основний компонент — адаптація моделі PatchCore під лінійні камери з тайловою обробкою.

import numpy as np import cv2 import torch from anomalib.models import Patchcore, EfficientAD from ultralytics import YOLO from dataclasses import dataclass from typing import Optional @dataclass class FabricDefect: defect_type: str # hole / stain / broken_thread / weaving_error / scratch / fold severity: str # minor / major / critical bbox: list area_px2: int confidence: float location_pct: tuple # (x%, y%) - відносне положення class FabricDefectDetector: """ Дворівнева детекція дефектів тканини: Level 1: Anomaly detection (PatchCore) — навчається тільки на хорошій тканині Level 2: Defect classification (YOLO) — якщо потрібна класифікація за типом AITEX Fabric Dataset: 7 типів дефектів, 12 видів тканин. TILDA: виробничі дефекти, 8 класів. """ DEFECT_CLASSES = { 0: ('hole', 'critical'), 1: ('stain', 'major'), 2: ('broken_thread', 'major'), 3: ('weaving_error', 'major'), 4: ('scratch', 'minor'), 5: ('fold', 'minor'), 6: ('cut', 'critical'), 7: ('knotting', 'minor') } def __init__(self, anomaly_model_path: str, defect_model_path: Optional[str] = None, anomaly_threshold: float = 0.5, device: str = 'cuda'): self.anomaly_model = Patchcore.load_from_checkpoint(anomaly_model_path) self.anomaly_model.eval() self.anomaly_threshold = anomaly_threshold self.defect_model = YOLO(defect_model_path) if defect_model_path else None self.device = device # Трансформація для tile-based інспекції from torchvision import transforms self.transform = transforms.Compose([ transforms.Resize((256, 256)), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]) def inspect_fabric_strip(self, strip: np.ndarray, tile_size: int = 256, overlap: int = 32) -> dict: """ Інспекція смуги тканини (горизонтальний кадр з лінійної камери). Тайл-орієнтована обробка для швидкісних ліній. """ h, w = strip.shape[:2] from PIL import Image anomaly_map = np.zeros((h, w), dtype=np.float32) count_map = np.zeros((h, w), dtype=np.float32) stride = tile_size - overlap # Tile extraction tiles = [] tile_positions = [] for y in range(0, h - tile_size + 1, stride): for x in range(0, w - tile_size + 1, stride): tile = strip[y:y+tile_size, x:x+tile_size] pil_tile = Image.fromarray(cv2.cvtColor(tile, cv2.COLOR_BGR2RGB)) tensor = self.transform(pil_tile) tiles.append(tensor) tile_positions.append((x, y)) if not tiles: return {'defects': [], 'anomaly_score': 0, 'pass': True} # Batch inference batch = torch.stack(tiles) with torch.no_grad(): outputs = self.anomaly_model({'image': batch}) scores = outputs['pred_score'].cpu().numpy() anomaly_maps = outputs.get('anomaly_map') # Збірка загальної карти аномалій for i, (x, y) in enumerate(tile_positions): if anomaly_maps is not None: am = anomaly_maps[i].cpu().numpy() am_resized = cv2.resize(am, (tile_size, tile_size)) anomaly_map[y:y+tile_size, x:x+tile_size] += am_resized count_map[y:y+tile_size, x:x+tile_size] += 1 # Нормалізація count_map = np.maximum(count_map, 1) anomaly_map /= count_map # Виявлення дефектних зон defects = self._extract_defects(anomaly_map, strip, w, h) overall_score = float(np.max(scores)) return { 'defects': [d.__dict__ for d in defects], 'anomaly_score': round(overall_score, 4), 'anomaly_map': anomaly_map, 'pass': overall_score < self.anomaly_threshold and len(defects) == 0 } def _extract_defects(self, anomaly_map: np.ndarray, original: np.ndarray, w: int, h: int) -> list[FabricDefect]: """Витяг bbox дефектів з карти аномалій""" defects = [] if anomaly_map.max() < 0.3: return defects # Бінаризація карти аномалій norm_map = ((anomaly_map / anomaly_map.max()) * 255).astype(np.uint8) _, thresh = cv2.threshold(norm_map, int(self.anomaly_threshold * 255), 255, cv2.THRESH_BINARY) # Морфологічна чистка kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)) cleaned = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel) cleaned = cv2.morphologyEx(cleaned, cv2.MORPH_OPEN, kernel) contours, _ = cv2.findContours(cleaned, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for cnt in contours: area = cv2.contourArea(cnt) if area < 100: # занадто дрібні continue x, y, bw, bh = cv2.boundingRect(cnt) max_anomaly = float(anomaly_map[y:y+bh, x:x+bw].max()) severity = ('critical' if max_anomaly > 0.85 else 'major' if max_anomaly > 0.65 else 'minor') # Спроба класифікації дефекту defect_type = 'unknown' if self.defect_model: crop = original[y:y+bh, x:x+bw] if crop.size > 0: results = self.defect_model(crop, conf=0.35, verbose=False) if results[0].boxes and len(results[0].boxes): cls_id = int(results[0].boxes.cls[0].item()) defect_type, severity = self.DEFECT_CLASSES.get( cls_id, ('unknown', severity) ) defects.append(FabricDefect( defect_type=defect_type, severity=severity, bbox=[x, y, x+bw, y+bh], area_px2=int(area), confidence=max_anomaly, location_pct=(round(x/w*100, 1), round(y/h*100, 1)) )) return defects 

Чому PatchCore краще supervised підходів?

Supervised моделі потребують тисяч розмічених дефектів — це дорого та довго. PatchCore використовує anomaly detection: навчається тільки на хороших зразках, а аномалії знаходить як відхилення від еталону. На практиці це означає:

  • Збір 500–1000 якісних зображень тканини (просто прокотити рулон під камерою).
  • Донавчання на 100–200 кадрів з дефектами, якщо потрібна класифікація.
  • Економія часу на розмітку в 5–10 разів.

Порівняйте: ручна інспекція пропускає 15–25% дефектів і працює в 3–5 разів повільніше. AI-система стабільно тримає recall > 95% на швидкостях до 100 м/хв. Це в 2 рази швидше людини та в 4 рази точніше.

Збір датасетів для навчанняДля базового рішення використовуємо публічні датасети AITEX та TILDA. Під кожен тип тканини клієнта донавчаємо модель на зібраних зразках: 500–1000 зображень якісної тканини та 100–200 кадрів з дефектами. Застосовуємо аугментації (поворот, масштабування, зміна яскравості) для стійкості до реальних умов. Якщо дефектів мало — використовуємо генерацію синтетичних даних.

Процес впровадження

  1. Аудит виробництва — вивчаємо швидкість лінії, тип камер, освітлення, доступні PLC.
  2. Збір та розмітка даних — знімаємо 10–20 рулонів, розмічаємо всі дефекти.
  3. Навчання моделі — налаштовуємо PatchCore + YOLO на ваших даних.
  4. Інтеграція — підключаємо камери, встановлюємо edge-сервер з GPU, пишемо модуль для PLC.
  5. Тестування — прогоняємо 100 рулонів, заміряємо recall та precision.
  6. Введення в експлуатацію — навчаємо операторів, надаємо документацію та підтримку.
Задача Строк
PatchCore інспектор одного типу тканини 4–6 тижнів
Мульти-тип + класифікація дефектів 8–12 тижнів
Виробнича лінія + PLC інтеграція 12–20 тижнів

Що входить в роботу

  • Готова модель з вагами та конфігурацією
  • Вихідний код кастомного детектора з коментарями
  • Дашборд для моніторингу в реальному часі
  • API для інтеграції у вашу MES/ERP
  • Навчання команди замовника (3 дні)
  • Гарантія 12 місяців на роботу моделі при незмінних умовах

AI проти ручної інспекції: порівняння

Критерій Ручна інспекція AI-система
Відсоток перевірки 20–30% рулонів 100% рулонів
Швидкість 20–40 м/хв до 100 м/хв
Точність виявлення 75–85% 95–97%
Пропуск дефектів 15–25% <5%
Втома оператора значна через 2 години відсутня
Вартість експлуатації висока (зарплати, зміни) на 40% нижча

Наші інженери мають 10+ років досвіду в комп'ютерному зорі та реалізували 50+ проектів у текстильній промисловості. Економія на зарплатах та рекламаціях окупає впровадження за 8–12 місяців. Пропуск одного дефектного рулону — значна втрата, яку система запобігає в 95% випадків. Замовте впровадження та отримайте перші результати через 6 тижнів. Зв'яжіться з нами для оцінки вашого виробництва — ми приїдемо на об'єкт та розрахуємо окупність за два тижні. Отримайте консультацію для старту проекту.