Извлечение семантической информации из фотографий

Создать новую статью

Дата последнего изменения :   08.10.2009 02:23
Рейтинг
 


Аннотация

Статья содержит описание веб-сервиса, предоставляющего возможность извлечения семантической информации из изображений на веб-ресурсах и наложения данных в виде дополнительного слоя на изображении. Представлен краткий обзор основных сервисов конкурентов, способных автоматически выделять лица на изображениях. Приведено описание технологии и основных использованных инструментов, API и программных средств.

Как все начиналось

В 2007 году я где-то прочитал о том, что Intel проводит различные Ление школы. Тогда, конечно, я еще не догадывался, что это происходит уже не первый год и много студентов и аспирантов интересно проводили лето с Интел. В тот год меня не взяли. У меня была еще попытка, и наконец-то я решил поучаствовать в довольно интересном конкурсе: необходимо было прислать идею какого-нибудь сервиса. Так как к тому времени у меня было уже достаточно много различных идей, а в Интернете я провожу приличную часть своего времени, было не так сложно придумать интересный Интернет-сервис. В итоге, моя идея оказалась в числе победителей, как и идея Максима.

Конечно, когда я писал о своей идее, речи о какой-либо реализации не шло. Когда же меня пригласили поучаствовать в Летней школе, я схватился за голову: «А смогу ли я реализовать и сделать все то, что написал для конкурса?». Я даже подумывал о том, чтобы отказаться от участия в Школе. Но хорошо взвесив все за и против, я все-таки понял, что участие – это шаг вперед для любого человека. Как оказалось потом, я был совершенно прав: в Школе мне удалось сделать больше, чем бы я сделал сам.

Идея проекта

Идея моего проекта возникла неспроста. Как уже упоминал, я активно пользуюсь Интернетом: посещаю новостные, различные информационные и IT-сайты, а также (как же без этого в современном мире) социальные сети. Если проследить развитие технологий в сфере web-разработки, то можно заметить, что львиную долю занимают повышение удобства пользования сайтами, внедрение мультимедиа и улучшение внешнего вида. Это и CSS3, HTML5, AJAX/JSON, и новые версии браузеров с быстрым JavaScript. Именно поэтому я задумался еще об одном «улучшении» Интернета: автоматической подписи изображений (извлечению семантической информации из изображений).

Представьте, что вы заходите на сайт с новостями и видите фотографию к статье, но, к сожалению, не знаете, что и кто находится на изображении, так как автор (редактор) статьи ее никак не подписал. А если бы браузер или специальное программное обеспечение само поняло, что находится на фотографии и наложило информационный слой с подписями, как это делается в социальных сетях (notes у Flickr, tagging в Facebook и подпись человека в ВКонтакте). Достаточно поднести курсором мышки к интересующему и неизвестному нам объекту на фотографии, чтобы узнать, кто или что это, а также получить различную связанную с объектом информацию. В качестве этой информации может служить список дополнительных фотографий объекта, информация из Википедии, ссылки на сайты с информацией об объекте.

Notes на Flickr

Notes на сервисе хранения фотографий Flickr

Итак, уже понятно, в чем заключается идея: анализ изображений, извлечение объектов и поиск семантической и связанной с объектом информацией. Несомненно, желательно все это реализовать в виде некого веб-сервиса.

Информационный слой на изображении

Информационный слой на изображении

Конкуренты

Есть ли что-нибудь подобное уже в Интернете? Еще до написания идеи я задумывался над этим вопросом. Конечно, уже что-то есть, учитывая популярность технологий детектирования и распознавания объектов. В основном это системы автоматической подписи персон на фотографиях:

  • Face.com умеет сам находить твоих друзей на фотографиях в Facebook;
  • Google Picasa Web Albums позволяет автоматически подписывать людей на фотографиях;
  • Betaface может индексировать как фотографии, так и видео: в том числе находить людей на изображениях.

Распознавание лиц в Google Picasa Web Albums

Распознавание лиц в Google Picasa Web Albums

Некоторые из сервисов даже переходят из онлайна в обычные приложения. Так случилось с Google Picasa Web Albums: недавно вышла бета-версия Picasa 3.5, которая умеет распознавать людей на фотографиях. До этого такая возможность была только в программе iPhoto от Apple.

Но все эти сервисы и программы во-первых, пока работают только с лицами, а во-вторых, только соотносят область на изображении с именем человека: еще нет никакой семантической и связанной информации.

Начало работы

Приехал я в Санкт-Петербург за день до начала Школы: было время немного адаптироваться, найти, где находится офис Интел и немного сконцентрироваться. В первый же день я был совершенно ошеломлен всем происходящим: интересная информация о компании, разработках, сам офис и многое другое, что просто меня удивляло. Ведь до этого я никогда не был в такой обстановке, такой атмосфере и такой компании!

Нас сразу познакомили с нашим руководителем Андреем Чернышевым, который своими указаниями и советами помогал нам в течение всей Летней школы.

Буквально сразу же мы стали готовиться к работе, и я понял, что же все-таки я должен сделать за четыре недели: необходимо было написать бизнес-план проекта, сделать небольшую демку сервиса и красиво все презентовать. Да, все сложности, о которых я думал, свершились. Но я совершенно не унывал, и тут же приступил к реализации своей идеи.

Конечно, первая неделя была не очень продуктивной в плане выполненных задач: сначала мы долго настраивали оборудование, а потом делали презентации. Тем не менее, уже на первой недели я очень многое узнал от других участников: о современных технологиях (другие идеи проектов), о способах программирования, об обучении в других университетах и об опыте работы над различными проектами. После общения я даже пересмотрел свои взгляды на некоторые вещи.

Обучение

В Школе я совсем не бездельничал, можно даже сказать, что был постоянно в действии. И при этом определенную нагрузку привнесли курсы, которые нам подготовили организаторы. Без сомнения все, чему нас учили, было необычайно интересно, и что немаловажно, полезно для меня. Во-первых, это занятия по работе с самим собой (самоорганизация), по работе в команде, умению выступать и управлению временем. Да, это везде можно прочитать, об этом много говорят, но – может от того, что данные курсы вел замечательный лектор Игорь Одинцов, а может от того, что все было наглядно и понятно – на меня они подействовали, и я воспользовался полученным опытом. Во-вторых, это лекции по Google Web Toolkit, с тех пор которым я активно пользуюсь, по разработке веб-сервисов, по Java и Moblin. Это все те технологии, на которые я взглянул совершенно по-новому. И да, я уже жду новую версию Moblin, ведь эта система удивительно быстро работает на нетбуках. И в-третьих, нам рассказывали о том, как писать бизнес-план: это было сложно для меня, так как до Школы я никогда его не писал и даже не представлял себе, как это происходит.

Написание бизнес-плана было одной из приоритетных задач Школы. Нам повезло: нам помогал отлично знающий эту сферу Василий Гурьев. Большое количество материала, которое он нам выдавал, под конец Школы уже почти не умещалось у меня в голове, но все-таки написание бизнес-плана продвигалось и… мне даже понравилось этим заниматься. Могу заверить, что это отнюдь не скучное занятие: необходимо провести хорошее исследование рынка, правильно определить цели и задачи, найти покупателей и пользователей. Все это помогало даже корректировать разработку самого сервиса. Бизнес-план я писал не один, а с Таней Шумилиной: именно благодаря ей нам удалось получить к окончанию обучения многостраничный добротный документ.

Технология

Как же работает система? В одной небольшой статье достаточно тяжело полностью описать работу системы, однако я могу обозначить некие вехи, по которым интересующиеся смогут найти дополнительную информацию.

Этапы работы системы

Этапы работы системы

Итак, у нас есть сайт в Интернете, на котором размещены фотографии. Предположим, что владелец хочет воспользоваться нашим сервисом по семантическому анализу изображений. Для этого ему необходимо на страницы вставить загрузку специального JavaScript-файла.

Внедрение загрузки JavaScript-файла

Внедрение загрузки JavaScript-файла

Данный JavaScript после загрузки страницы ищет все изображения, попадающие под определенные условия и отправляет ссылки на эти изображения на наш сервер, на котором непосредственно и расположен сервис. Уже на сервере происходит скачивание изображений для анализа, если, конечно, он еще не проводился для конкретного изображения.

Во время анализа сначала выделяются объекты (если это лица, то используются алгоритмы Face Detection, например, на базе AdaBoost), а затем сопоставляются с базой объектов. Одновременно с этим происходит поиск различной информации в Интернете.

После анализа изображения назад отсылаются координаты объекта на изображении и связанная с объектом информация. Все это накладывается все тем же JavaScript в виде дополнительного слоя на само изображение. И уже пользователь может наводить курсор на объекты для получения информации.

Что получилось реализовать?

Да, я уже упоминал, что мы написали бизнес-план, но не только это удалось сделать во время Летней школы. Конечно, демонстрация сервиса вышла куда тусклее, чем сам безнес-план, но все-таки стоит учитывать, что было всего лишь четыре недели, а приехал я по сути с пустыми руками.

Тем не менее, простая демка была показана на итоговой презентации. Что же она умела делать? Так как мне, конечно же, вряд ли бы удалось внедрить JavaScript на каком-нибудь информационном ресурсе или написать расширение для Firefox, то я решил для демонстрации создать простой прокси-сервер, который сам подставлял ссылку на нужный JavaScript в заголовок проходящих через него страниц. В качестве подопытного ресурса был выбран новостной сайт Lenta.ru, на котором частенько фотографии идут без подписей.

Для выделения лиц я воспользовался встроенной в свободную библиотеку OpenCV реализацию алгоритма бустинга AdaBoost, который довольно эффективно умеет выделять объекты. Для распознавания лиц я решил реализовать алгоритм Eigenface. Да, он работает медленно и не так эффективен, но его можно быстро запрограммировать. К тому же я старался писать программу так, чтобы было легко заменить как алгоритм детектирования, так и алгоритм распознавания.

В качестве источников информации я решил воспользоваться свободными API от гигантов Интернета: Google AJAX Search API, Yahoo! Image Search API и MediaWiki API.

Эффекты, наложение слоя на изображение и асихронное взаимодействие с сервером осуществлялось с помощью хорошего JavaScript Framework: jQuery.

Информационный слой на сайте Lenta.ru

Информационный слой на сайте Lenta.ru

В результате моя демка умела выделять людей (которые изначально были в базе данных) на новостном сайте Lenta.ru.

Что дальше?

Изначально, конечно, было много всего задумано, но сразу все не реализовать, поэтому можно постепенно развивать данный сервис. Например, сервис должен самостоятельно составлять базу данных объектов. Как это сделать – отдельный интересный вопрос. Можно воспользоваться текстом, расположенным рядом с изображением и поискать в Интернете связанные с ним фотографии. Можно выделить в тексте имена (если это поиск по персонам) и также осуществить поиск в обычных поисковых системах для составления базы данных. А можно попробовать взаимодействовать с системами вроде TinEye.

Кроме того, стоит поменять как алгоритм детектирования, так и алгоритм распознавания. Ученым уже удалось поднять уровень детектирвания до приемлимых значениях с помощью, например, так называемого 3D-распознавания. Также остается открытым вопрос с поиском связанной информации.

Во время Летней школы я получил множество советов и предложений, которые теперь стоит как-то обработать.

Заключение

За время Летней школы удалось сделать работоспособную демонстрацию на языке python сервиса извлечения семантической информации из изображений на веб-ресурсах. Скорость работы сервиса оказалась небольшой из-за использования неэффективных алгоритмов, которые в дальнейшем планируется заменить на быстрые.

Повторюсь, что за время Летней школы мне удалось сделать намного больше, чем я делал в данном направлении до этого, а полученный опыт позволил увеличить эффективность своей работы. Надеюсь, что продолжу свой проект, ведь это интересно!

Об авторе

Павлов Евгений Александрович, выпускник физического факультета Ярославского государственного университета им. П.Г. Демидова, проходил стажировку в рамках Летней школы в замечательном городе Санкт-Петербурге. Занимается веб-разработкой. Областью научных интересов является распознавание объектов на изображениях.