AI-Верифікація документів через камеру мобільного додатку
Верифікація документів через камеру—це не просто OCR. Це конвеєр з кількох етапів: обнаження документа в кадрі, оцінка якості зображення, витяг даних через OCR, структурування полів, валідація точності та виявлення ознак підробки. Кожен етап може не вийти—і саме тут сконцентрована вся складність.
Чому сирий OCR не працює
Спроба прочитати паспорт через Vision framework (iOS) або ML Kit (Android) і розпарсити результат регулярними виразами—найпоширеніший перший підхід. Він дає 70–80% точності в лабораторних умовах і 40–60% на реальних користувачах: засвіт, кут зйомки, мяті сторінки, износ документа, нестандартні шрифти—все це ламає простий OCR.
Правильний конвеєр додає три шари над OCR:
Попередня обробка зображення. Корекція перспективи (документ знято під кутом), підвищення контрастності, видалення бліків. На iOS—CIFilter + CIPerspectiveCorrection. На Android—OpenCV через JNI або CameraX з спеціальним ImageAnalysis.
Спеціалізований document OCR. Не загальний OCR, а моделі, навчені на документах: Microsoft Azure Document Intelligence, Google Document AI, Amazon Textract. Вони повертають не просто текст, а структуровані поля—surname, given_names, date_of_birth, document_number—уже правильно привязані до зон документа.
Machine Readable Zone (MRZ) parsing. Паспорти містять MRZ—дві лінії стандарту ICAO 9303 в нижній частині. Найнадійніше джерело даних: стандартизований шрифт, чітка структура, вбудована контрольна сума. Бібліотеки: mrz-java, passport-reader для iOS, або власна реалізація парсера.
Інтеграція Azure Document Intelligence
// iOS — Swift
import AzureAIDocumentIntelligence
class DocumentVerificationService {
private let client: DocumentIntelligenceClient
func analyzePassport(imageData: Data) async throws -> PassportData {
let request = AnalyzeDocumentRequest(
urlSource: nil,
base64Source: imageData.base64EncodedString()
)
let operation = try await client.beginAnalyzeDocument(
"prebuilt-idDocument",
analyzeRequest: request
)
let result = try await operation.waitForResult()
guard let document = result.documents?.first else {
throw DocumentError.noDocumentDetected
}
return PassportData(
firstName: document.fields?["FirstName"]?.valueString,
lastName: document.fields?["LastName"]?.valueString,
documentNumber: document.fields?["DocumentNumber"]?.valueString,
dateOfBirth: document.fields?["DateOfBirth"]?.valueDate,
expiryDate: document.fields?["ExpirationDate"]?.valueDate,
nationality: document.fields?["CountryRegion"]?.valueCountryRegion,
mrz: document.fields?["MachineReadableZone"]?.valueString,
confidence: document.confidence ?? 0
)
}
}
Confidence score—критичний параметр. Коли confidence < 0.8, запитайте повторну зйомку з орієнтуванням користувача (краще освітлення, трима рівно, не закривай краї).
Real-Time камера guidance
Користувачі не мають робити кілька сліпих спроб. Real-time зворотний зв'язок при зйомці через Vision framework на iOS:
// Розпізнає межі документа в реальному часі під час активної камери
func detectDocumentInFrame(_ pixelBuffer: CVPixelBuffer) {
let request = VNDetectRectanglesRequest { [weak self] request, error in
guard let observation = request.results?.first as? VNRectangleObservation else {
self?.cameraGuidance = .noDocumentFound // "Наведіть камеру на документ"
return
}
let area = observation.boundingBox.width * observation.boundingBox.height
if area < 0.4 {
self?.cameraGuidance = .tooFar // "Підніс ближче"
} else if area > 0.9 {
self?.cameraGuidance = .tooClose // "Віддаліть камеру"
} else {
self?.cameraGuidance = .ready // Автоматична зйомка
}
}
request.minimumAspectRatio = 0.5
request.maximumAspectRatio = 1.0
request.minimumConfidence = 0.7
try? VNImageRequestHandler(cvPixelBuffer: pixelBuffer).perform([request])
}
Автоматичний захист при ідеальному позиціюванні виключає необхідність натиснення кнопки—знижує кількість поганих снимків.
Виявлення підробок
Базовий anti-spoofing для мобільної верифікації включає:
Фізичний документ vs фото документа. Якщо користувач фотографує надруковану або екранну копію документа—моделі розпізнають паттерни пікселів екрана (moire effect) або нерівномірну текстуру паперу. Microsoft Azure та Onfido мають вбудовані детектори.
Liveness check. Для зв'язку документ + selfie обов'язкова перевірка живості: випадкові рухи голови, мигання. AWS Rekognition та FaceTec надають SDK.
MRZ vs візуальні поля cross-check. Дата народження в MRZ та візуальній зоні повинні збігатися—проста, але ефективна перевірка.
Процес розробки
Аналіз документів для підтримки → вибір OCR-провайдера (Azure / Google Document AI / Regula) → реалізація real-time camera guidance → інтеграція API аналізу документів → MRZ parsing та cross-валідація полів → anti-spoofing → перевірка відповідності (регуляторні вимоги).
Орієнтири за часом
MVP з Azure Document Intelligence і базовим guidance—2–3 тижні. Повна система з liveness check, anti-spoofing та підтримкою кількох типів документів—4–6 тижнів.







