Реалізація сканування банківських карт через камеру мобільного застосунку
Ручний ввід номера карти з 16 цифр — джерело опечаток та брошених сесій оплати. Сканування через камеру вирішує це за 1–2 секунди. Питання тільки в тому, який інструмент використовувати: готова бібліотека OCR для карт або загальний ML-фреймворк.
Інструменти та їх реальні обмеження
Card.io (PayPal) — історично популярна бібліотека. Проблема: з 2018 року не оновлюється, на iOS 16+ періодично вилітає при першому запуску через зміни в AVCaptureSession. Не рекомендуємо для нових проектів.
Stripe CardScan / Bouncer — Stripe купив Bouncer та відкрив card-scan-android / card-scan-ios під Apache 2.0. Це нейросіткове рішення на базі TFLite/CoreML, працює офлайн. Точність розпізнавання номера — вище 95% на картах стандартного формату в нормальних умовах освітлення. На iOS підключається через SPM: https://github.com/stripe/stripe-ios, на Android — через Gradle: com.stripe:stripecardscan.
Vision framework (iOS) + ML Kit (Android) — рідні OCR без сторонніх залежностей. VNRecognizeTextRequest (Vision, iOS 13+) розпізнає текст на зображенні у реальному часі. Фільтруємо результати за патерном \b\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4}\b. ML Kit Text Recognition v2 на Android працює аналогічно через TextRecognizer.
Мінус рідного OCR: потрібно самостійно писати логіку визначення зони карти, фільтрації хибних спрацювань (випадкові 16-значні числа), стабілізації результату (підтвердження через 3–5 послідовних однакових результатів). Готова бібліотека типу Bouncer робить це з коробки.
Що розпізнаємо
Номер карти — основна ціль. Термін дії (MM/YY) — Vision та ML Kit справляються. Ім'я власника — OCR справляється гірше через варіативність шрифтів та тиснення. Рекомендація: номер + термін дії сканюємо автоматично, ім'я — пропонуємо заповнити вручну як необов'язкове поле.
Ніколи не розпізнаємо та не зберігаємо CVV/CVC — він на обороті, і зберігати його навіть тимчасово порушує PCI DSS. Сканування фронтальної сторони: номер + термін дії + опціонально ім'я.
Реалізація на Flutter
card_scanner pub.dev пакет працює через Platform Channels до рідних SDK. Альтернатива — google_mlkit_text_recognition + користувацький парсер. Для production-застосунку краще Bouncer SDK через FFI-інтеграцію — точніше та надійніше у нестандартних умовах.
Дозволи та приватність
iOS: NSCameraUsageDescription в Info.plist з зрозумілим поясненням — «для сканування карти при оплаті». Android: uses-permission android:name="android.permission.CAMERA" + runtime request через ActivityResultContracts.RequestPermission. Обробляємо кадри тільки в пам'яті — не зберігаємо на диск, не відправляємо на сервер. Privacy-важлива деталь для проходження App Store Review.
Орієнтири за часом
Інтеграція Bouncer/CardScan з базовим UI (превью камери, рамка карти, анімація сканування): 1–2 дні. Користувацький UI + рідний Vision/ML Kit із власною логікою стабілізації: 2–3 дні.







