AI Fabric Inspection: Defect Detection with 97% Accuracy

AI for Fabric and Textile Defect Detection Textile production loses up to 5% of revenue due to defects missed by manual inspection. A single operator checks 20–30% of rolls at speeds of 20–40 m/min and misses 15–25% of defects due to fatigue. Each roll (50–100 m long) costs $50–100, an

AI Development Areas

Frequently Asked Questions

העבודות האחרונות

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1441
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Website development for BELFINGROUP
    998
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1264
  • image_logo-advance_0.webp
    B2B Advance company logo design
    713
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    1003

AI for Fabric and Textile Defect Detection

Textile production loses up to 5% of revenue due to defects missed by manual inspection. A single operator checks 20–30% of rolls at speeds of 20–40 m/min and misses 15–25% of defects due to fatigue. Each roll (50–100 m long) costs $50–100, and a defective roll shipped to a client is a significant loss. We offer an alternative: an AI computer vision system that inspects 100% of the fabric surface at speeds up to 100 m/min, consistently detecting even microscopic defects. This AI fabric inspection system is based on computer vision for textiles and machine learning methods. It works turnkey: from dataset collection to production line integration.

What problems we solve

Our clients face typical challenges:

  • High line speed — at 60 m/min, an operator physically cannot spot a 1 mm hole. Our detector processes each tile in 10 ms on a GPU, providing throughput up to 80+ m/min on an RTX card.
  • Defect diversity — holes, stains, broken threads, weaving errors, scratches, folds. We use a two-level architecture: PatchCore for anomaly detection and YOLOv8 for classification. This achieves recall > 0.95 across all classes.
  • Fabric variability — smooth, napped, patterned. PatchCore anomaly detection does not require defect labels — only good samples. Retraining for a new fabric type takes one week.

How two-level detection works

Stack: PyTorch, PatchCore, EfficientAD, YOLOv8, OpenCV, TensorRT for inference. The core component is adapting the PatchCore model for line-scan cameras with tile-based processing.

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%) - relative position class FabricDefectDetector: """ Two-level fabric defect detection: Level 1: Anomaly detection (PatchCore) — trained only on good fabric Level 2: Defect classification (YOLO) — if classification by type is needed AITEX Fabric Dataset: 7 defect types, 12 fabric types. TILDA: manufacturing defects, 8 classes. """ 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 # Transformation for tile-based inspection 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: """ Inspect a fabric strip (horizontal frame from line-scan camera). Tile-based processing for high-speed lines. """ 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') # Assemble global 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 # Normalization count_map = np.maximum(count_map, 1) anomaly_map /= count_map # Detect defective zones 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]: """Extract defect bboxes from anomaly map""" defects = [] if anomaly_map.max() < 0.3: return defects # Binarize anomaly map 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) # Morphological cleanup 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: # too small 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') # Attempt defect classification 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 

Why PatchCore is better than supervised approaches

Supervised models require thousands of labeled defects — expensive and time-consuming. PatchCore uses anomaly detection: trained only on good samples, anomalies are found as deviations from the norm. It stores a representative set of patch-level features from the training images in a memory bank. During inference, it computes the distance between each patch feature and its nearest neighbor in the bank, flagging regions with high distance as anomalies. In practice:

  • Collect 500–1000 high-quality fabric images (simply run a roll under a camera).
  • Fine-tune on 100–200 frames with defects if classification is needed.
  • Saves 5–10x labeling time.

Compare: manual inspection misses 15–25% of defects and works 3–5 times slower. The AI system consistently maintains recall > 95% at speeds up to 100 m/min. That's 2x faster than a human and 4x more accurate. Savings on claims can reach $18k–26k per year, and a typical system deployment of $15k–25k pays back in 8–12 months.

Dataset collection for trainingFor the base solution, we use public datasets AITEX and TILDA. For each client's fabric type, we fine-tune the model on collected samples: 500–1000 images of good fabric and 100–200 frames with defects. We apply augmentations (rotation, scaling, brightness changes) for robustness to real conditions. If defects are scarce — we generate synthetic data.

Deployment process

  1. Production audit — examine line speed, camera types, lighting, available PLCs.
  2. Data collection and labeling — capture 10–20 rolls, label all defects.
  3. Model training — fine-tune PatchCore + YOLO on your data.
  4. Integration — connect cameras, install edge server with GPU, write PLC module.
  5. Testing — run 100 rolls, measure recall and precision.
  6. Commissioning — train operators, provide documentation and support.
Task Timeline
PatchCore inspector for one fabric type 4–6 weeks
Multi-type + defect classification 8–12 weeks
Production line + PLC integration 12–20 weeks

What's included

  • Ready model with weights and configuration
  • Source code of custom detector with comments
  • Real-time monitoring dashboard
  • API for integration into your MES/ERP
  • Customer team training (3 days)
  • 12-month warranty on model performance under unchanged conditions

AI vs manual inspection: comparison

Criteria Manual inspection AI system
Inspection coverage 20–30% of rolls 100% of rolls
Speed 20–40 m/min up to 100 m/min
Detection accuracy 75–85% 95–97%
Miss rate 15–25% <5%
Operator fatigue significant after 2 hours none
Operating cost high (salaries, shifts) 40% lower

Our engineers have 10+ years of experience in computer vision and have implemented 50+ projects in the textile industry. Savings on salaries and claims pay back deployment in 8–12 months, with a typical ROI of $14k–20k per year. Missing one defective roll is a significant loss that the system prevents in 95% of cases. This fabric quality control system is a key component of textile production automation. Manufacturing AI inspection solutions like ours reduce defects by 30%. Machine vision fabric inspection at high speed ensures consistent quality. This textile quality AI system saves money and improves quality. Request deployment and get first results in 6 weeks. Contact us for a production assessment — we will visit your site and calculate ROI in two weeks. Get a consultation to start the project.