Реализация AI-проверки подлинности документов (Anti-Fraud) в мобильном приложении
Поддельные паспорта, распечатанные на лазерном принтере, с 2022 года проходят базовые OCR-проверки в 30–40% случаев по данным отраслевых отчётов. Это не теоретическая угроза — это реальные заявки на кредиты, регистрации аккаунтов и онбординг сотрудников с подложными документами. Классические правила (совпадение MRZ с визуальной зоной, формат дат) недостаточны. Нужен ML-слой, который видит то, что правила не описывают.
Что именно проверяет AI-модель
Проверка подлинности документа на мобильном устройстве складывается из нескольких независимых сигналов:
Анализ текстуры и артефактов печати. Настоящий паспорт напечатан на intaglio-прессе с тактильными элементами и специфической растровой структурой. Скан или фотография распечатки имеет паттерн JPEG-артефактов, характерный для бытовых принтеров: блочность на гильошировании, потеря микропечати, ровная яркость там, где должны быть рельефные тени. CNN-модель, обученная на таких примерах, выдаёт forgery_score как непрерывное значение — не бинарное «подделка/нет».
Геометрическая консистентность. Текстовые поля в реальном паспорте расположены в строгих пикселях относительно физических маркеров. Homography-трансформация выравнивает документ в стандартную плоскость, после чего поля MRZ, фото, дата рождения сравниваются с шаблоном по affine-матрице. Отклонение от шаблона >2px — тревожный сигнал, >5px — высокая вероятность редактирования.
Кросс-верификация полей. Имя в MRZ должно совпадать с визуальной зоной, дата рождения — с контрольной цифрой MRZ (алгоритм ISO 7501-1), номер документа — с базой утерянных/недействительных (если подключён внешний API, например Interpol I-24/7 или национальные реестры).
Архитектура on-device vs server-side
Выбор зависит от требований к приватности и latency:
| On-device (CoreML / TFLite) | Server-side | |
|---|---|---|
| Латентность | 300–800 мс | 1–3 с |
| Приватность | Данные не покидают устройство | Требует передачи изображения |
| Размер модели | 5–50 MB в приложении | Без ограничений |
| Актуальность модели | OTA-обновление через CoreML Model Deployment | Деплой на сервер |
| Офлайн | Да | Нет |
Для большинства KYC-сценариев применяем гибридный подход: on-device модель выполняет быструю первичную проверку (capture quality, базовые артефакты), тяжёлый anti-forgery inference — на сервере с GPU. Пользователь видит прогресс-индикатор, а не ждёт 3 секунды перед любым действием.
Внедрение CoreML-модели на iOS
Базовый pipeline для iOS:
// Загрузка модели
let config = MLModelConfiguration()
config.computeUnits = .cpuAndNeuralEngine
let model = try DocumentAuthenticityModel(configuration: config)
// Предобработка — нормализация и crop до Region of Interest
let input = try MLMultiArray(shape: [1, 3, 224, 224], dataType: .float32)
// ... заполнение пикселями из CVPixelBuffer
// Инференс
let prediction = try model.prediction(image: pixelBuffer)
let forgeryScore = prediction.forgery_score // Float, 0.0 – 1.0
ANE (Apple Neural Engine) на A14+ обрабатывает 224×224 документ за ~40 мс. На iPhone SE 2nd gen без ANE — ~350 мс. Разница существенная, порог по computeUnits нужно адаптировать под минимально поддерживаемое устройство.
Модель обновляется через CoreML Model Deployment в CloudKit или через собственный endpoint с подписанным .mlmodel файлом. Не хардкодим модель в бандл если планируем её обновлять — размер IPA вырастет, и каждое обновление модели потребует релиза.
TensorFlow Lite на Android
Android-реализация через TFLite + GPU Delegate или NNAPI:
val options = Interpreter.Options().apply {
addDelegate(GpuDelegate())
setNumThreads(4)
}
val interpreter = Interpreter(loadModelFile(assets, "doc_auth_v2.tflite"), options)
val inputBuffer = TensorImage.fromBitmap(preprocessedBitmap)
val outputBuffer = TensorBuffer.createFixedSize(intArrayOf(1, 2), DataType.FLOAT32)
interpreter.run(inputBuffer.buffer, outputBuffer.buffer)
val forgeryScore = outputBuffer.floatArray[1] // индекс 1 — класс "forgery"
GPU Delegate снижает латентность на Snapdragon 8 Gen 1 с ~600 мс до ~90 мс для модели EfficientNet-B2. На бюджетных устройствах без GPU Delegate разница менее заметна — там лучше NNAPI с автоматическим выбором ускорителя.
Обучение и дообучение модели
Готовые модели для anti-forgery в открытом доступе ограничены и быстро устаревают — мошенники адаптируются. Мы обучаем на синтетических данных: реальные документы + аугментированные подделки (JPEG-compress, Gaussian noise, PrintScan simulation через библиотеку albumentations). Архитектура — EfficientNet-B0 или MobileNetV3 для баланса точности и скорости.
После деплоя важен feedback loop: документы с пограничным forgery_score (0.4–0.6) уходят на ручную разметку операторами и дообучение. Без этого модель деградирует на новых паттернах подделок через 3–6 месяцев.
Этапы внедрения
Аудит типов документов и сценариев → сбор датасета → обучение/валидация → конвертация в CoreML / TFLite → интеграция в мобильный клиент → A/B тест с человеческим верификатором → настройка threshold → продакшен → мониторинг drift.
Сроки: интеграция готовой модели без дообучения — от 3 недель. Полный цикл (датасет, обучение, мобильная интеграция, feedback loop) — 2–4 месяца. Стоимость рассчитывается индивидуально.







