Стандартные 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 инференс обеспечивает конфиденциальность и скорость.







