Распознавание текста из видеопотока: будущее мобильного OCR
В последнее время мы довольно часто рассказываем в блоге о наших технологиях распознавания, которые работают на мобильных устройствах и распознают фотографии, сделанные камерами этих устройств. Сейчас мы движемся дальше и учимся работать не с фотографиями, а с видеопотоком. И сегодня мы хотим рассказать вам чуть подробней, что это означает и где в повседневной жизни может пригодиться распознавание текста из видеопотока.
Кстати, сейчас мы расширяем команду, занимающуюся созданием продукта для распознавания текста из видеопотока на смартфонах. Если вы Android или iOS-разработчик с опытом написания высоконагруженных приложений и у вас есть желание разрабатывать новые технологии вместе с нами, спешите откликнуться на вакансию.
Для начала скажем, с каким именно видеопотоком мы работаем. Видеопоток — это последовательность кадров, получаемых с камеры устройства, проще говоря, то, что мы видим на экране смартфона, когда запускаем стандартное приложение «Камера».
Фотография фрагмента меню
Кадры из видеопотока с фрагментом меню
Если сравнить отдельный кадр видеопотока с фотографией, видно, что его качество ниже: разрешение (dpi) кадра меньше, изображение чаще расфокусировано и смазано, также присутствует цифровой шум. Наличие таких дефектов совершенно не удивительно, ведь мы же не роботы, чтобы держать телефон в руках абсолютно неподвижно :), кроме того, сказывается недостаточное освещение из-за отсутствия работы вспышки. Это делает задачу распознавания видеопотока значительно сложнее, чем распознавание фотографии, однако преимущества, которые можно получить в итоге, стоят того, чтобы потратить силы на ее решение:
Повышение качества распознавания
Мы уже рассказывали о наших технологиях, позволяющих быстро проверить пригодность фотографии для распознавания. В случае с видеопотоком можно пойти еще дальше и сразу выбирать из потока изображения, наиболее подходящие для обработки. Да, многие кадры по качеству хуже фотографии, но некоторые могут получиться и лучше, есть из чего выбрать
Кроме того, значительная часть ошибок в результатах распознавания происходит из-за случайного шума, бликов, расфокусировки и т.п. Эти дефекты не повторяются от кадра к кадру, поэтому символ, неверно распознанный на одном кадре, может быть правильно распознан на следующем. Агрегируя таким образом текст с нескольких кадров, можно повысить качество и достичь даже лучших результатов распознавания, чем для фото.
Более удобные приложения
Распознавание из видеопотока не требует от пользователя почти никаких действий. Нет необходимости нажимать на кнопку «сфотографировать», следить за тем, чтобы весь нужный текст на фотографии был в фокусе. Достаточно просто навести камеру на текст, и распознавание начнется автоматически. Кроме того, поскольку обработка текста выполняется прямо «за кадром», результаты можно отображать моментально, например, поверх исходного текста (чтобы упростить задачу верификации результатов)
или, наоборот, в зависимости от распознанного текста дополнять кадр специальными картинками, надписями и т.п., т.е. создавать так называемые приложения дополненной реальности. Кроме того, при распознавании из видеопотока изображение никуда не сохраняется и не забивает память устройства.
Все это приносит радость пользователю и делает приложение удобным.
В наших будущих статьях мы подробней расскажем о том, как лучше работать с видеопотоком, а пока давайте посмотрим, где можно применить эту технологию.
Альтернатива клавиатуре
Один из самых очевидных сценариев — замена ввода текста с клавиатуры на ввод из видеопотока. Наверное, все бывали в ситуации, когда в руках есть буклет, на котором написан нужный электронный адрес, и приходится вручную вбивать его в строку браузера. Гораздо удобней и быстрей было бы просто навести на него камеру телефона.
Чтобы обеспечить обработку «в реальном времени» и успеть за постоянно меняющимися сценами в видоискателе, распознавать нужно очень быстро. Чтобы этого достичь, приходится прибегать к множеству различных средств. Во-первых, задействовать все ядра процессора устройства, используя параллельное распознавание. При этом можно как параллельно распознавать несколько кадров, снятых с небольшой задержкой, так и разбивать обработку одного кадра на несколько этапов, выполняемых в разных рабочих потоках. Также для увеличения скорости обработки приходится использовать различные средства аппаратного ускорения, доступные на устройстве.
Мгновенный переводчик
Еще одна задача — перевод. Приезжая в экзотическую страну, бывает сложно сориентироваться на улицах и в ресторанах, поскольку все надписи на указателях, в меню и т.д. на неизвестном языке, а местные жители могут просто не говорить по-английски. Например, вот что можно увидеть на улицах и в ресторанах китайского города:
Приложение-переводчик в такой ситуации, конечно, может помочь, но только в том случае, если правильно набрать все нужные иероглифы. Удобнее, если приложение позволит вам сфотографировать текст, а затем автоматически распознает и переведет его. Однако поместить все меню ресторана на одну фотографию будет проблематично. Придется фотографировать несколько раз. А вот используя распознавание текста из видеопотока, можно переводить мгновенно: пользователь наводит камеру на текст, приложение за кадром распознает и переводит, а на экране подменяет исходный текст на его перевод, вот так:
Т.е. получится такая своеобразная дополненная реальность, в которой все написано на понятном вам языке.
Потребность в распознавании и переводе текста на окружающих нас объектах (например, на вывесках, которые окружены листвой деревьев; меню, в котором рядом нарисованы блюда и т.п.) ведет к дополнительным сложностям, а именно — к необходимости определять, где же на таких кадрах, собственно, расположен текст. Используемые в FineReader методы анализа бинаризованного изображения, заточенные под обработку текстовых документов, в данном случае не подходят. После бинаризации (перевода в чёрно-белый вид) обычные объекты часто становятся похожи на текст — например, окна зданий могут образовать целую строчку:
Бинаризованное изображение
Для обработки кадров общего вида приходится прибегать к более сложным алгоритмам, использовать специальный классификатор объектов, обученный на пакетах изображений вывесок и уличных знаков. Классификатор позволяет понять, есть ли на изображении буквы и строки, отделяет их от мусора. Подобный механизм хорошо описан в статье.
Data Capture
Еще одна область для применения распознавания из видеопотока — извлечение данных из документов (документов, удостоверяющих личность, платежек и т.п.). В настоящее время почти все банки в своих мобильных приложениях предлагают услугу оплаты жилищно-коммунальных платежей. Чтобы совершить такой платеж, сейчас приходится вручную перепечатывать с платежки длинные строчки цифр, в которых легко ошибиться (код абонента, номер лицевого счета и т.п.). А автоматическое распознавание нужных для оплаты данных позволит упростить и ускорить этот процесс.
«Умная камера»
Один из самых интересных сценариев можно назвать «умная камера». Речь идет об обычном приложении «Камера», которое есть на каждом смартфоне, дополненном функциональностью распознавания из видеопотока. При наведении такой камеры на визитную карточку, например, она будет автоматически создавать соответствующий контакт в телефонной книге, для QR-кода — открывать нужную ссылку в браузере, для приглашения на мероприятие — создавать событие в календаре и т.д. Часто пользователи фотографируют какой-то фрагмент документа, если им необходимо запомнить написанную там информацию, а «умная камера» автоматически распознает текст еще до того, как пользователь успеет нажать на кнопку «сфотографировать» и предложит сохранить распознанные данные в виде заметки или напоминания.
Но нужно иметь в виду, что создание «умной камеры» таит в себе дополнительные сложности. Постоянная работа такого ресурсоемкого процесса, как распознавание, будет сильно разряжать батарею устройства. А практика показывает, что распознавание понадобится не более чем для 10–20% от всего времени использования камеры. Все-таки фотографии котиков и селфи популярнее, чем фото документов, визиток, штрих кодов вместе взятые. Поэтому необходимо каким-либо образом регулировать энергопотребление приложения-камеры. Например, использовать специальный быстрый детектор текста, который будет анализировать кадр и давать ответ, есть ли на нем текст или нет. А затем уже для кадров с текстом дополнительно вызывать распознавание.
Вот, собственно и все, о чем хотели рассказать. Если у вас есть идеи, где еще может быть полезна технология распознавания из видеопотока, давайте обсудим в комментариях.
Ольга Титова,
департамент продуктов для разработчиков