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

Это была идея нашей команды, которая принесла нам первое место на недавнем хакатоне Taboola R&D, названном так - Taboola Zoom!

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

В этом году 33 команды работали по 36 часов, чтобы придумать потрясающие и полезные для Taboola идеи. Некоторые из основных моментов включали инструмент, который может точно предсказать пол пользователей на основе их активности в Интернете, и интеграцию с социальными сетями для Taboola Feed.

Наша команда решила создать приложение AR (дополненная реальность), которое позволяет пользователю получать рекомендации по содержанию, подобно виджету рекомендаций Taboola, на основе того, на что он направляет камеру своего телефона.

Что такое Zoom?

Само приложение представляет собой AR-интерфейс, аналогичный Google Glass, который позволяет вам взаимодействовать с миром с помощью камеры телефона. Используя приложение, нужно просто навести камеру на объект, чтобы сразу получить список историй из Интернета, связанных с этим объектом.

Чтобы воплотить эту идею в жизнь, мы использовали технологии из нескольких областей - AI, Веб-приложения и Микросервисы.

Под капотом

Процесс довольно прост:

  1. Пользователь открывает на своем телефоне веб-приложение - страницу HTML5, которая ведет себя как обычное приложение.
  2. Приложение каждую секунду отправляет снимок экрана с записанным видео на удаленный сервер.
  3. Сервер обрабатывает изображение с помощью технологий компьютерного зрения.
  4. Сервер ищет веб-статьи с миниатюрами, наиболее похожими на обработанное изображение.
  5. Полученные изображения фильтруются с использованием порога схожести и отправляются обратно пользователю для отображения в красивом виджете поверх пользовательского дисплея.
  6. Когда пользователь нажимает на виджет, в браузере открывается соответствующая статья.

Увеличение

Каждый компонент системы реализован с использованием разных технологий:

Веб приложение

Мы решили реализовать пользовательский интерфейс с использованием HTML5, что позволило нам получить доступ к встроенным возможностям телефона, таким как камера. Дополнительно мы использовали WebRTC API и Canvas API.

Служба компьютерного зрения

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

Понимание содержания изображения - это хорошо известная проблема, у которой есть множество решений. Мы решили использовать модель Google Inception, которая представляет собой DNN (глубокую нейронную сеть), обученную классифицировать объект, найденный на изображении.

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

Мы решили использовать результат предпоследнего слоя - так как это дает наилучшие результаты.

База данных

Единственный компонент, который нам уже был доступен, - это внутренняя база данных статей Taboola, содержащая, среди прочего, эскиз и URL статьи.

Если бы такая база данных была недоступна для нас, мы могли бы просто создать свою собственную, очищая изображения с помощью такой библиотеки, как BeautifulSoup.

Сервер

Мы использовали Flask в качестве нашего веб-сервера. При запуске сервер запрашивает внутреннюю базу данных Taboola статей из Интернета. Затем он отправляет каждое изображение в службу компьютерного зрения, которая возвращает вложение. Затем вложения сохраняются в назначенную структуру данных под названием FAISS (поиск сходства AI в Facebook). Это позволяет нам выполнять поиск ближайших соседей.

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

Итак, резюмируя, вся архитектура опирается на три основных компонента:

  1. веб приложение
  2. служба компьютерного зрения
  3. база данных статей

Сделай сам

Весь проект был разработан менее чем за 36 часов командой из 5 человек.

Это приложение затрагивает несколько интересных и захватывающих областей, которые являются «популярными» в отрасли - AR и AI. Реализовать это было несложно благодаря общедоступным инструментам и библиотекам.

Если мы хотим, чтобы вы извлекли из этого только одно, это не так уж и сложно.

Мы приглашаем вас осознавать потенциал, который скрывается в этих областях, и искать интересные и захватывающие идеи. Как только вы его найдете, отправляйтесь на собственный частный хакатон!

Ну наконец то

Если вы хотите поиграть с приложением, откройте https://zoom.taboola.com на своем телефоне - используйте Chrome на Android и Safari на iOS и попробуйте навести курсор мыши на разные объекты, чтобы увидеть различные результаты - имейте в виду, что это предварительный альфа-проект хакатона.

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

Амир Керен, Йоэль Зельдес, Элина Ревзин, Авив Ротман и Офри Манн.

Изначально опубликовано на сайте engineering.taboola.com мной и Амиром Кереном.