Реалізація OCR та розпізнавання тексту у мобільних додатках
OCR на мобілі — одна з найбільш зрілих завдань з гарним набором готових інструментів. Нативні рішення (Vision на iOS, ML Kit на Android) охоплюють більшість випадків. Складність починається, де текст нестандартний: рукопис, виціченні чеки, відображення, спотворена перспектива.
Вибір інструменту
iOS Vision Framework — VNRecognizeTextRequest. Повністю on-device, підтримує 18+ мов включаючи кирилицю. recognitionLevel = .accurate найкращої якості, recognitionLevel = .fast в 2–3 рази швидше. iPhone 12 при .accurate: 180–350 ms на A4 фото.
ML Kit Text Recognition v2 — cross-platform (iOS + Android), on-device. Підтримує латиницю, кирилицю, деванагари, CJK символи. Android через TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS).
Tesseract через SwiftyTesseract (iOS) або tess-two (Android)—коли потрібна кастомна тренування для конкретного шрифту або мови. В 3–5 разів повільніше нативних API, але гнучкіший.
Для стандартних завдань (документи, візитки, цінники)—Vision / ML Kit достатньо. Для спеціалізованих завдань (медичні форми з нестандартними шрифтами)—Tesseract з fine-tune моделлю.
Preprocessing: критичний для 40% точності
VNRecognizeTextRequest та ML Kit приймають CGImage / InputImage—але якість вхідного зображення критична.
Типовий pipeline preprocessing:
- Конвертація в grayscale—знижує шум JPEG артефактів кольору
- Коригування яскравості/контрасту через
CIColorControls(iOS) абоColorMatrix(Android) - Binarization (Otsu threshold)—допомагає при нерівномірному освітленні
- Deskew—коригування перспективи та обертання
Коригування перспективи (документ знятий під кутом): iOS VNDetectRectanglesRequest знаходить контур документа, CIPerspectiveCorrection вирівнює. Android—аналогічно через Bitmap + Matrix.setPolyToPoly.
Кейс: програма сканування накладних. ML Kit v2 без preprocessing дав 78% точність в польових умовах (освітлення складу, м'яті листи). Після Otsu binarization + perspective correction—94%. Особливо допоміг при розпізнаванні номерів накладних з матричним шрифтом.
Real-time проти фото розпізнавання
Для real-time (навести камеру, текст розпізнається на лету—як Google Lens), адаптуйте конвеєр:
- Знизьте розширення до 720p або менше
- iOS:
VNRecognizeTextRequestвVNSequenceRequestHandlerкожні 3–5 кадрів, не кожен - Буферизуйте результати: показуйте попередній результат поки infer новий кадр
- Стабілізуйте текст між кадрами: порівняйте IoU bounding box, якщо >0.7—той же текст
На Android, ML Kit в STREAM_MODE керує частотою—не перевантажує конвеєр.
Постобробка: текст ≠ дані
Розпізнавання тексту та видобування корисних даних — різні завдання.
Для номерів телефонів, email, дат—використовуйте NSDataDetector (iOS) або Patterns (Android) на розпізнаному тексті. Для структурованих документів (IDs, номери паспортів)—regex з перевіркою контрольних цифр.
Для таблиць та форм: ML Kit v2 повертає TextBlock → TextLine → TextElement з координатами кожного. Групуйте по Y-координаті рядка (±5px) для реконструкції структури таблиці.
Часові рамки
OCR для фото з preprocessing та постобробкою даних: 3–5 робочих днів. Повний documento-сканер з real-time режимом, коригуванням перспективи та експортом: 1–2 тижні. Вартість розраховується індивідуально.







