Технология распознавания этикеток на примере ярлыков из IKEA (2 видео)
Задача распознавания этикеток имеет большое практическое значение. Ведь ее решение может существенно упростить работу с товарами в магазинах, начиная от мерчандайзинга и заканчивая непосредственно продажей конечному покупателю. Однако, по причине слабой формализации самой задачи и большой вариативности потенциальных объектов распознавания, универсальной технологии распознавания этикеток в настоящее время не существует. А торговые предприятия, понимая высокую коммерческую ценность подобной автоматизации, используют различные обходные пути (например, приклеивают к товарам 1D- или 2D-штрихкоды).Несмотря на это, задача распознавания ярлыков не перестает притягивать многие пытливые умы. Вот и мы захотели найти такую практическую задачу, которая решается с помощью технологии распознавания этикеток и при этом приносит общественную пользу. Ответ нашелся сам собой во время очередного поедания знаменитых шведских фрикаделек с брусничным соусом.
[embedded content]
Совершенно верно, речь пойдет про распознавание этикеток в гипермаркете мебели и товаров для дома IKEA. Приступим.
Рассмотрим особенности задачи:
объект распознавания хорошо знаком и понятен; красные и желтые икеевские этикетки достаточно контрастны; икеевские этикетки имеют определенные правила заполнения; артикулы товаров в IKEA подчиняются строгим шаблонам. В таком виде задача звучит и интересно и не слишком сложно — отличный шанс проверить в деле новичков (стажеров). Итак, сегодня мы представляем вашему вниманию SmartHelper — программу, созданную силами трех стажеров нашей IT-лаборатории, которая способна облегчить покупки в IKEA тысячам пользователей.Как любой автомобиль вне зависимости от крутизны состоит из кузова, двигателя, трансмиссии и шасси, так и распознающая программа содержит внутри ряд обязательных модулей:
1. Модуль получения и первичной обработки изображения. В результате захвата с камеры цветные изображения поступают в программу в RGB-представлении. Для дальнейшей работы нет необходимости «тащить» многомегабайтное изображение и нам следует подавить цвет, желательно не ухудшив картинку для дальнейшего распознавания. Поэтому первым этапом проводится анализ центральной части входного изображения на предмет «какого цветя этикетку мы распознаем», после чего выбирается правильный способ цветоподавления.
2. Модуль локализации и ориентации документа. Использование камеры мобильного телефона для получения изображения документов привносит большое количество геометрических и оптических искажений. Данный модуль отвечает за поиск границ этикетки, определение ее типа, определение проективного базиса и исправление изображения документа.
3. Модуль наведения и распознавания полей. Любой документ (и икеевская этикетка, в частности) состоит из вспомогательных и информационных элементов. В частности, на этикетке необходимо распознать артикул, ряд и место на складе. В зависимости от типа этикетки эти поля могут быть расположены в разных местах или вообще отсутствовать.
4. Модуль распознавания текстовых строк. Назначение и функциональность этого модуля читателю, мы уверены, понятны без лишних слов. Отдельно хочется лишь отметить, что для сегментации строки на символы мы используем динамическое программирование, а движок распознавания работает прямо «по серому» изображению (без предварительной бинаризации).
5. Модуль интегрирования результатов. Этот модуль — «must have» при решении задач распознавания видеопотока. Поле можно распознать намного увереннее, если проанализировать результаты последовательных кадров. Мы называем этот прием «межкадровое интегрирование результатов». Хотя иногда он бывает полезен и при распознавании отдельных изображений (часто в документах важная информация дублируется и может быть «проинтегрирована» при распознавании).
В результате у нас получилась полнофункциональная программа, знаниями о которой приятно поделиться. Но перед тем, как публиковать на Хабре рассказ про эту технологию, мы, конечно, рассказали про нее друзьям (которые далеки от программирования и распознавания объектов и близки к различным хозяйственным вопросам и покупкам в IKEA). И надо сказать, что реакция была разнообразная: начиная от дикого восторга (что безумно приятно) и заканчивая совершенным непониманием ее целесообразности. Проведя своеобразный data mining полученных ответов, нам удалось сформулировать три основных вопроса, которые интересовали «потенциальных пользователей».
1. Зачем городить весь это огород с распознаванием, когда все уже давно привыкли просто фотографировать этикетки?
Повторюсь, первоочередная задача программы — провести своего рода испытания для наших новых сотрудников. Но и практического смысла получившаяся программа не лишена. В отличие от хаотичного набора фотографий этикеток, наша программа позволяет компактно и эргономично формировать список покупок в процессе прогулки по демонстрационному залу. А при наличии договоренностей с IKEA дополнительно можно будет уточнять наличие товаров в магазине и считать промежуточную стоимость корзины.
2. Хорошо, а зачем тогда распознавать именно на мобильнике, когда проще отправить фотку в облако и дождаться результатов?
С точки зрения разработчика ПО удаленное распознавание на мощном сервере, конечно, проще. Но вот далеко не каждый пользователь оценит такой подход по целому ряду причин. Во-первых, даже в наше время не каждый покупатель IKEA подключен к безлимитному мобильному интернету. Во-вторых, даже при потенциальном наличии безлимитки у клиента, в силу технических особенностей внутри магазина может не везде хорошо ловить сеть (как правило, IKEA — это большое железобетонное сооружение, слабо пропускающее радиоволны высоких частот). Наконец, в-третьих, как мы рассказали в нашем предыдущем посте, ваш смартфон уже полностью созрел, чтобы решать задачи распознавания достаточно быстро — так зачем в таком случае куда-то что-то отправлять и ждать ответа?
3. А какое участие в разработке программы принимали опытные программисты вашей организации?
Конечно, в программе существует ряд подзадач, которые нашим начинающим программистам не под силу решить самим. Если конкретно, то ребята использовали уже готовые инструменты распознавания текстовой строки (сегментатор на символы и движок распознавания букв). Весь остальной функционал (предобработку кадров, наведение полей, межкадровую интеграцию результатов) был выполнен ребятами самостоятельно, фактически с нуля.
Конечно, была еще одна задача, которая легла на плечи абсолютно всех сотрудников нашей организации — необходимо было подойти со всей строгостью и серьезностью к тестированию получившегося продукта в реальных условиях. Ниже ролик, который был снят уже за пределами нашей IT-лаборатории. Приглашаем и вас, многоуважаемые читатели нашего блога, принять участие в тестировании нашей новой программы (пока выложена версия для iPhone в Apple Store).
[embedded content]