Что вы видите на этой картинке?
25 марта 2015, 13:11
Когда на Диске тысячи фотографий, разложенных по разным папкам, поиск по текстам позволит быстро найти среди них нужную. Например, скан договора с названием вроде scan723.JPG или фотографию визитки человека, с которым понадобилось связаться. Искать можно не только документы, но и любые фотографии, которые сделаны для того, чтобы сохранить текст, будь то объявление на двери подъезда или любопытный рекламный плакат в метро.
В основе поиска текстов на изображениях лежит технология оптического распознавания символов. Систем распознавания, опирающихся на эту технологию, много, и все они разные. Какие-то решают определённую задачу, например распознают партитуры, какие-то работают только с чистым текстом. Для Яндекс.Диска мы разработали свою универсальную систему, способную распознавать текст на картинках разных по виду, содержанию и, главное, качеству.
Система состоит из двух частей — классификатора картинок и модуля распознавания. Сначала классификатор, глубокая нейронная сеть, отбирает из всех картинок те, на которых изображён текст. Он учится отличать их от прочих на огромной базе изображений. Использование машинного обучения позволяет добиться высокого качества распознавания — ведь алгоритм опирается не на какие-то вручную заданные правила, а на опыт анализа миллионов разных картинок. Когда изображения с текстом отобраны, алгоритм находит на них линии, предположительно содержащие текст, — различать их помогает ещё одна нейронная сеть. На следующем этапе алгоритм оставляет только те линии текста, в которых он уверен.
Затем модуль распознавания разбивает линии текста на отдельные символы. Для каждого символа алгоритм выбирает несколько наиболее вероятных вариантов распознавания среди известных ему. Например, это могут быть буквы «О», «о» и цифра «0», очень похожие друг на друга. После этого в дело вступает языковая модель — алгоритм принимает решение, какой из символов-кандидатов подходит лучше всего. Языковая модель опирается на словари и учитывает не только сходство символов с теми, что знает система, но и контекст, то есть соседние символы. Если из нескольких вероятных символов складывается известное системе слово, то она может принять решение, что на картинке написано именно оно. Даже если некоторые символы-кандидаты в этом слове менее вероятны, чем другие.
Конечно, точность распознавания текста (а значит, и успех поиска) зависит от типа изображения, его чёткости, фона, на котором находится текст, и многих других факторов. Поэтому для разных видов изображений она разная. Например, для отсканированных документов точность распознавания текстов на русском языке составляет около 80%, для фотографий с надписями — 63,2%, а для скриншотов приближается к 100%. Помимо русского языка, система также распознаёт английский, украинский и турецкий. Точность распознавания текстов всего потока изображений более 70%. Это неплохой результат, но мы будем работать над его улучшением.