Реализация OCR (распознавание текста) через камеру мобильного приложения

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1735 услуг
Реализация OCR (распознавание текста) через камеру мобильного приложения
Средний
~2-3 дня
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    495

Реализация OCR (распознавание текста) через камеру мобильного приложения

Пользователь наводит камеру на ценник, чек, договор или табличку — и приложение мгновенно распознаёт текст. Разрыв между «работает в демо» и «работает в продакшене» здесь огромный: реальные условия это плохое освещение, наклонный текст, рукописные элементы и разные языки в одном кадре.

Нативные OCR-фреймворки без внешних зависимостей

iOS: Vision + VNRecognizeTextRequest

С iOS 13 Vision фреймворк умеет распознавать текст без интернета. VNRecognizeTextRequest поддерживает два режима: .fast (приблизительно, мгновенно) и .accurate (медленнее, но значительно точнее для сложных шрифтов).

func recognizeText(in image: UIImage) {
    guard let cgImage = image.cgImage else { return }

    let request = VNRecognizeTextRequest { [weak self] request, error in
        guard let observations = request.results as? [VNRecognizedTextObservation] else { return }
        let text = observations.compactMap { $0.topCandidates(1).first?.string }.joined(separator: "\n")
        DispatchQueue.main.async { self?.handleRecognized(text: text) }
    }

    request.recognitionLevel = .accurate
    request.usesLanguageCorrection = true
    request.recognitionLanguages = ["ru-RU", "en-US"] // порядок = приоритет

    let handler = VNImageRequestHandler(cgImage: cgImage, options: [:])
    try? handler.perform([request])
}

usesLanguageCorrection помогает с опечатками, но иногда «исправляет» аббревиатуры и артикулы — для технических документов лучше отключить.

Android: ML Kit Text Recognition v2

com.google.mlkit:text-recognition поддерживает латиницу, кириллицу, китайский, японский, корейский через отдельные модули. Скачивается на устройство при первом использовании (~5 MB для латиницы).

val recognizer = TextRecognition.getClient(
    TextRecognizerOptions.DEFAULT_OPTIONS // или RussianTextRecognizerOptions
)

val image = InputImage.fromBitmap(bitmap, 0)
recognizer.process(image)
    .addOnSuccessListener { visionText ->
        val fullText = visionText.textBlocks
            .joinToString("\n") { block -> block.text }
        handleRecognized(fullText)
    }
    .addOnFailureListener { e -> handleError(e) }

ML Kit также возвращает bounding boxes для каждого блока текста — полезно для подсветки распознанных областей в UI.

Live-режим: текст в реальном времени из видеопотока

Для live-overlay (текст подсвечивается прямо в видеопотоке) на iOS используем AVCaptureSession + CMSampleBuffer:

// Delegate метод AVCaptureVideoDataOutput
func captureOutput(_ output: AVCaptureOutput,
                   didOutput sampleBuffer: CMSampleBuffer,
                   from connection: AVCaptureConnection) {
    guard let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return }

    // Не запускаем новый запрос, если предыдущий ещё не завершён
    guard !isProcessing else { return }
    isProcessing = true

    let request = VNRecognizeTextRequest { [weak self] request, _ in
        defer { self?.isProcessing = false }
        // обработка результатов...
    }
    request.recognitionLevel = .fast // для live важна скорость

    try? VNImageRequestHandler(cvPixelBuffer: pixelBuffer, options: [:]).perform([request])
}

Флаг isProcessing обязателен — без него при 30 FPS накапливается очередь запросов и память растёт до краша.

На Android — CameraX + ImageAnalysis.Analyzer. ML Kit оптимизирован для работы с ImageProxy напрямую без конвертации в Bitmap.

Постобработка: от «сырого» текста к структурированным данным

Голый OCR-результат — это поток строк. Для большинства задач нужна структуризация:

  • Чеки: выделяем строки с ценами по regex, парсим итоговую сумму
  • Визитки: NSDataDetector (iOS) или Patterns (Android) для телефонов, email, адресов
  • Паспорта/документы: MRZ-зона читается по стандарту ICAO 9303, есть готовые парсеры
  • Номерные знаки: отдельная задача — лучше специализированная модель (OpenALPR, PlateRecognizer API)

Для кириллического текста с плохим качеством иногда помогает предобработка изображения: увеличение контрастности через vImageContrastStretch, перевод в grayscale, Sharpen CIFilter перед передачей в OCR.

Процесс работы

Определение сценариев использования: тип документов, языки, нужен ли live-режим или только статичное фото.

Реализация захвата изображения (camera + галерея), предобработка.

Интеграция OCR: нативный Vision/ML Kit или облачный (Google Vision API, AWS Textract) если нужна более высокая точность для сложных документов.

Постобработка под конкретную задачу: структурирование данных, regex, NER.

Тестирование на реальных образцах в разных условиях освещения.

Ориентиры по срокам

Базовое распознавание статичного текста через нативный фреймворк — 2–3 дня. Live-режим с overlay + структурирование данных под конкретный тип документа — 1–2 недели.