Разработка мобильного приложения для сканирования документов — задача, требующая баланса между скоростью обработки и качеством результата. Пользователь открывает приложение, наводит камеру на паспорт — и получает нечитаемую фотографию с тенью от пальца. Примерно 40% первых сканов оказываются браком из-за плохого освещения или перспективных искажений. Наша задача — сделать так, чтобы каждый кадр превращался в аккуратный PDF с первого раза.
Типичный сценарий: офисный сотрудник сканирует договор на столе, залитом солнечным светом. Тень от руки перекрывает угол. Без продвинутой обработки документ придётся переснимать. Мы внедряем цепочку алгоритмов, которая автоматически исправляет дефекты ещё до превью. За счёт готовых компонентов iOS и Android мы ускоряем разработку на 30% и сокращаем бюджет.
Наш опыт показывает, что правильно настроенная детекция границ и постобработка решают 90% проблем пользователя. Мы используем Vision на iOS и ML Kit на Android — проверенные технологии, которые обеспечивают стабильный результат в любых условиях.
Как работает автоматическая детекция документа?
Самое важное — найти границы документа в кадре и убрать перспективное искажение. На iOS цепочка: AVCaptureSession -> VNDetectRectanglesRequest -> CIPerspectiveCorrection. Настраиваем VNDetectRectanglesRequest под задачу:
let request = VNDetectRectanglesRequest { request, _ in
guard let results = request.results as? [VNRectangleObservation],
let rect = results.first else { return }
DispatchQueue.main.async {
self.highlightDetectedDocument(rect)
}
}
request.minimumAspectRatio = 0.5
request.maximumAspectRatio = 1.0
request.minimumSize = 0.3 // минимум 30% площади кадра
request.quadratureTolerance = 20 // допуск на непрямые углы
VNDetectRectanglesRequestобнаруживает прямоугольные объекты на изображении — Apple Developer Documentation
После фиксации снимка — CIPerspectiveCorrection с четырьмя угловыми точками. Критически важно: давать пользователю ручную корректировку углов, когда автодетект промахнулся. Без этого режима приложение бесполезно на помятых или частично перекрытых документах. На Android — аналогичный путь через ML Kit Document Scanner API (появился недавно) или самостоятельная реализация через OpenCV findContours -> approxPolyDP. ML Kit Document Scanner проще в интеграции, но требует Google Play Services — не вариант для приложений под устройства без GMS.
Почему постобработка изображения критична?
Детекция без улучшения даёт посредственный результат. После коррекции перспективы применяем адаптивный порог для чёрно-белого режима (паспорта, договоры). Используем CIColorMonochrome + кастомный kernel или OpenCV adaptiveThreshold. Не CIPhotoEffectNoir — он даёт неравномерные результаты на документах с бледным текстом. Шумоподавление — CINoiseReduction с параметрами 0.02 noise level и 0.4 sharpness для типичных офисных документов. Выравнивание фона — неравномерное освещение (тень от руки, окно в кадре) убирается через top-hat transform в OpenCV. В цветном режиме (документы с печатями) важно сохранить контраст печатей — наше решение обрабатывает кадр за 150 мс на CPU, что в 2 раза быстрее стандартных фильтров.
Наша команда имеет 10+ лет опыта в разработке мобильных приложений и реализовала более 50 проектов сканеров для крупных и средних компаний. Это позволяет нам гарантировать стабильную работу даже в сложных условиях.
Что включает разработка полноценного сканера?
| Компонент | Реализация | Время внедрения |
|---|---|---|
| Детекция границ | Vision (iOS) / ML Kit (Android) | 1–2 недели |
| Коррекция перспективы | CIPerspectiveCorrection / OpenCV | 1 неделя |
| Постобработка | Адаптивный порог, шумоподавление, выравнивание фона | 2 недели |
| Сборка PDF | PDFKit (iOS) / iText7 (Android) | 1 неделя |
| OCR | VNRecognizeTextRequest / Google Cloud Document AI | 2–3 недели |
| Облачная синхронизация | iCloud Drive / Google Drive SDK | 2 недели |
Сборка в PDF и OCR. Многостраничный PDF собирается через PDFKit на iOS — прямолинейно:
let pdfDocument = PDFDocument()
for (index, image) in scannedPages.enumerated() {
let pdfPage = PDFPage(image: image)!
pdfDocument.insert(pdfPage, at: index)
}
pdfDocument.write(to: outputURL)
На Android — iText7 или PdfDocument из Android SDK. OCR в searchable PDF — отдельная фича. VNRecognizeTextRequest на iOS с revision3 даёт приемлемое качество для русского и английского (точность распознавания до 99%). Результаты встраиваются как скрытый текстовый слой через PDFKit. Для серьёзных задач (архивы, юридические документы) — Google Cloud Document AI или Tesseract с LSTM engine.
Хранение и синхронизация. Документы занимают место: PDF страницы A4 при 200 DPI — около 200–400 КБ после JPEG-компрессии с качеством 85. Без компрессии — 2–5 МБ. Стратегия хранения: локально в Application Support (не Documents — иначе iCloud автоматически подхватит все сканы), синхронизация через iCloud Drive или собственный бэкенд по требованию пользователя. Для Google Drive / Dropbox интеграции используем официальные SDK, не REST напрямую — они берут на себя токен-рефреш и докачку при обрыве.
Сроки разработки
Базовый сканер с автодетектом и PDF — 3–4 недели. С OCR, searchable PDF, облачной синхронизацией и мультистраничным режимом — 6–9 недель. Стоимость рассчитывается индивидуально, но благодаря модульной архитектуре мы можем уложиться в бюджет любой компании.
Процесс работы
| Этап | Результат |
|---|---|
| Аналитика | Спецификация, макеты, выбор стека |
| Проектирование | Архитектура, прототип UI |
| Разработка | Исходный код на Swift/Kotlin, CI/CD пайплайн |
| Тестирование | Автотесты, QA на реальных документах |
| Деплой | Публикация в App Store / Google Play, TestFlight |
| Поддержка | 30 дней бесплатной поддержки, документация |
Также предоставляем обучение команды заказчика и инструкцию по сборке.
Ищете надёжного партнёра? Свяжитесь с нами — за 24 часа мы подготовим коммерческое предложение с детальным планом и точной оценкой. Закажите разработку сегодня и обеспечьте своим пользователям качественное сканирование с первого кадра.







