OCR камеры выполняет OCR локально с помощью форкнутого пакета vision_text_recognition, который поддерживает латиницу, китайский (упрощённый и традиционный), японский и корейский шрифты. Для распознавания ничего не загружается. Каждый блок, возвращаемый движком OCR, несёт свою ограничивающую рамку и распознанный текст; страница результатов рисует перевод поверх тех же координат, сохраняя исходную компоновку.
Конвейер захвата
- Инициализация камеры. Контроллер камеры инициализируется асинхронно с явными состояниями
initializing / ready / failed. При сбое отображается кнопка повтора, которая повторно запускает инициализацию без повторного входа в защитуinitializing. - Реальная ориентация.
DeviceOrientationiOS и EXIF ненадёжны, когда приложение заблокировано в портретной ориентации. Приложение считывает необработанные данные акселерометра черезsensors_plusи кэширует самый последний кадр, поэтому затвор захватывает реальное направление захвата, даже если интерфейс заблокирован. Затем ориентация EXIF сверяется с этой истиной. - Затвор. Нажатие захватывает с текущим соотношением сторон предпросмотра. Захваченный кадр уменьшается до настраиваемой максимальной длины края перед OCR — большинству страниц нужно 1500–2000 px по длинному краю, чтобы движок читал мелкий шрифт без раздувания памяти.
- Вспышка. В видоискателе доступны четыре режима — авто, выкл., вкл. и фонарь — переключатель привязан к системному API вспышки.
Что возвращает OCR
- Ограничивающие рамки по блокам. У каждого TextBlock есть свой прямоугольник. Страница результатов использует их, чтобы расположить переведённый текст точно над исходным.
- Текст и порядок блоков. Текст на исходном языке по блокам, в порядке, в котором движок их выдал (по умолчанию сверху вниз, слева направо).
- Уверенность. У каждого блока своя уверенность. Блоки ниже порога отображаются на странице результатов, но помечаются как «низкая уверенность», чтобы пользователь мог проверить.
Почему на устройстве
- Конфиденциальность. Фотографии уличных вывесок, контрактов или медицинских форм никогда не покидают устройство для OCR.
- Задержка. Нет сетевого round-trip. OCR типичной страницы, снятой на телефон, завершается менее чем за секунду на современном устройстве.
- Офлайн. OCR работает в самолёте, в подвале и в регионах без покрытия. Тот же движок, который выполняет распознавание, полностью работает с модели на устройстве.
Лучшие практики для точного OCR
- Ровный, непрямой свет. Свет из окна превосходит потолочные прожекторы. Тени, пересекающие страницу, — самая частая причина неправильно прочитанных символов.
- Нажмите для фокусировки. Если автофокус выбирает не тот объект (стол, палец, край страницы), нажмите на центр текста перед захватом.
- Плоские страницы. Страницы, выгнутые к корешку книги, теряют символы у переплёта. По возможности прижмите страницу другой рукой.
- Один язык за захват. Страницы со смешанными шрифтами обрабатываются за один проход, но страницу, смешивающую латиницу с вертикальным японским, лучше разделить на два захвата.