Стандартні 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 інференс забезпечує конфіденційність та швидкість.







