Стандартные machine vision системы (Cognex, Keyence) эффективны, но дороги и жёстко привязаны к линии. Мобильный инспектор на базе AI — гибкая альтернатива: он дешевле, мобильнее, не требует перестановки оборудования. Однако возникают новые инженерные вызовы: нестабильное освещение, разное расстояние до объекта, вибрация при ручном захвате. Мы решаем их с помощью on-device AI, заточенного под ваш процесс. За плечами более 5 лет опыта в промышленном компьютерном зрении, 30+ внедрений на производствах. Экономия до 40% по сравнению с готовыми системами — не редкость. Обратитесь к нам за консультацией — поможем подобрать оптимальное решение.
AI-детекция дефектов через камеру мобильного приложения: технические вызовы
Каждый миллисекунда на счету, а интернет в цеху — роскошь. On-device инференс исключает задержки и зависимость от сети. Размер модели ограничен RAM устройства, скорость — требованиями throughput.
// iOS: промышленная детекция дефектов через CoreML class DefectDetectionEngine { private let model: VNCoreMLModel private var confidenceThreshold: Float = 0.5 // регулируется на стенде private var iouThreshold: Float = 0.45 // Для стабильного FPS — отдельная очередь private let inferenceQueue = DispatchQueue( label: "defect.inference", qos: .userInteractive ) func analyze(sampleBuffer: CMSampleBuffer) async throws -> [DefectDetection] { guard let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { throw DefectError.invalidFrame } return try await withCheckedThrowingContinuation { continuation in inferenceQueue.async { let request = VNCoreMLRequest(model: self.model) { req, error in if let error = error { continuation.resume(throwing: error) return } let detections = (req.results as? [VNRecognizedObjectObservation])? .filter { $0.confidence >= self.confidenceThreshold } .map { obs in DefectDetection( type: DefectType(rawValue: obs.labels.first?.identifier ?? "") ?? .unknown, confidence: obs.confidence, boundingBox: obs.boundingBox, // нормализованный [0,1] severity: self.classifySeverity(obs) ) } ?? [] continuation.resume(returning: detections) } request.imageCropAndScaleOption = .scaleFill let handler = VNImageRequestHandler(cvPixelBuffer: pixelBuffer) try? handler.perform([request]) } } } } Производительность. YOLOv8n в CoreML на iPhone 14: ~15 мс на инференс (66 FPS потенциально). YOLOv8s: ~25 мс. Для линии с требованием > 30 кадров/сек при ручном удержании — n-вариант.
Стабилизация изображения для ручного сканирования — ai детекция дефектов
Вибрация рук — враг мелких дефектов. Несколько техник: буферизация кадров с отбором по резкости (лапласиан), автоматическая экспозиция, оптическая стабилизация, если доступна.
// Буферизация кадров + выбор наиболее чёткого class StabilizedFrameSelector { private var frameBuffer: RingBuffer<CMSampleBuffer> = RingBuffer(capacity: 8) private var sharpnessScores: [Float] = [] func addFrame(_ buffer: CMSampleBuffer) { let sharpness = computeLaplacianVariance(buffer) frameBuffer.push(buffer) sharpnessScores.append(sharpness) } // Для анализа — берём кадр с пиковой резкостью за последние N кадров var bestFrame: CMSampleBuffer? { guard let maxIdx = sharpnessScores.indices.max(by: { sharpnessScores[$0] < sharpnessScores[$1] }) else { return nil } return frameBuffer[maxIdx] } } Также: AVCaptureDevice.activeVideoMinFrameDuration + exposureMode = .continuousAutoExposure + стабилизация через videoStabilizationMode = .cinematic.
Как дообучать модель на реальных данных?
Готовых датасетов для специфического производства нет. Нужна своя разметка. Процесс:
- Съёмка 200–500 образцов на производстве (нормальные + дефектные)
- Разметка в Label Studio или CVAT (bounding boxes + классы дефектов)
- Аугментация: яркость ±30%, вращение ±15°, горизонтальный flip, gaussian noise — имитация реальных условий съёмки
- Обучение YOLOv8s/m (зависит от требований по скорости)
- Конвертация в CoreML (.mlpackage) или TFLite
- Итерационное дообучение по ошибкам с производства — каждые 2–4 недели
# Дообучение на новых данных производства from ultralytics import YOLO model = YOLO("defect_detection_v2.pt") # предыдущая версия как база results = model.train( data="production_defects.yaml", epochs=50, imgsz=640, batch=16, lr0=0.001, # меньший LR для fine-tuning freeze=10, # заморозить первые 10 слоёв backbone augment=True, hsv_h=0.015, hsv_s=0.7, degrees=10.0, translate=0.1, scale=0.5, mosaic=1.0 ) Каждые 2–4 недели мы дообучаем модель на новых производственных данных, что повышает точность до 98%. Обратитесь к нам для аудита ваших данных — мы оценим необходимый объём разметки.
Как мы интегрируем решение с вашими системами?
Мобильный инспектор должен фиксировать результаты в MES/ERP системе. Используем offline-first подход: сначала локальное хранение в Room/CoreData, затем синхронизация через REST/GraphQL при появлении сети. Это гарантирует, что ни одна инспекция не потеряется.
// Android: отправка результата инспекции data class InspectionResult( val productId: String, val batchId: String, val inspectorId: String, val timestamp: Instant, val detections: List<DefectDetection>, val verdict: InspectionVerdict, // PASS, FAIL, REVIEW val imageUrl: String, // сохранённое фото с аннотациями val deviceId: String ) suspend fun submitInspection(result: InspectionResult) { // Сначала — локальная очередь (производство может быть без Wi-Fi) localQueue.enqueue(result) // Синхронизация при появлении сети syncManager.triggerSync() } Offline-first принципиально важен: цеховое Wi-Fi нестабильно, потеря результата инспекции недопустима.
Задача: специфика промышленного контроля качества
Дефекты на производстве кардинально отличаются по типу в зависимости от отрасли. Ниже — примеры наиболее распространённых случаев.
| Отрасль | Типичные дефекты | Критичный размер |
|---|---|---|
| Печатные платы (PCB) | Отсутствие компонента, неправильная ориентация, пайка | 0.5–2 мм |
| Текстиль | Затяжки, проколы, разрыв нити | 1–5 мм |
| Металлопрокат | Царапины, поры, включения | 0.1–3 мм |
| Стекло/керамика | Сколы, трещины, пузыри | 0.5–10 мм |
| Упаковка | Отсутствие этикетки, неправильная печать | >5 мм |
Для каждой отрасли — своя модель. Универсальная модель дефектов не работает: то, что является дефектом на PCB, может быть нормой на металле.
Что входит в нашу работу?
| Компонент | Описание |
|---|---|
| Обучение модели | 200–500 размеченных образцов, аугментация, fine-tuning под ваши дефекты |
| Мобильное приложение | iOS/Android (CoreML/TFLite), on-device инференс, стабилизация кадра |
| Offline-синхронизация | Локальное хранение с автоматической синхронизацией при появлении сети |
| Интеграция | REST/GraphQL API для передачи результатов в MES/ERP |
| Поддержка | Гарантия на модель, дообучение каждые 2–4 недели, техническая поддержка |
Все компоненты настраиваются под ваши производственные процессы.
Ориентиры по срокам
MVP с базовой моделью (200–300 размеченных образцов), on-device инференс, локальная история инспекций — 3–4 недели. Полная система с дообученной моделью под конкретный производственный процесс, стабилизацией изображения, offline-first синхронизацией с MES/ERP, dashboard статистики дефектов и поддержкой iOS + Android — 2–3 месяца. Точная стоимость рассчитывается индивидуально после аудита вашего производства.
Окупаемость такого решения — менее 6 месяцев за счёт снижения брака и ускорения контроля. Свяжитесь с нами для бесплатной оценки вашего проекта. Закажите пилотное внедрение уже сегодня.
Согласно документации Apple, on-device инференс обеспечивает конфиденциальность и скорость.







