Способность видеть, то есть воспринимать информацию об окружающем мире с помощью органов зрения, — одно из важных свойств человека. Посмотрев на картинку, мы, почти не задумываясь, можем сказать, что на ней изображено. Мы различаем отдельные предметы: дом, дерево или гору. Мы понимаем, какой из предметов находится ближе к нам, а какой — дальше. Мы осознаём, что крыша домика — красная, а листья на дереве — зелёные. Наконец, мы можем с уверенностью заявить, что наша картинка — это пейзаж, а не портрет или натюрморт. Все эти выводы мы делаем за считанные секунды.
Компьютеры справляются со многими задачами гораздо лучше, чем человек. Например, они гораздо быстрей считают. Однако такое, казалось бы, несложное задание, как найти на картинке дом или гору, может поставить машину в тупик. Почему так происходит?
Человек учится распознавать — то есть находить и отличать от других — объекты всю жизнь. Он видел дома, деревья и горы бессчётное количество раз: как в действительности, так и на картинах, фотографиях и в кино. Он помнит, как выглядят те или иные предметы в разных ракурсах и при разном освещении.
Машины создавались для того, чтобы работать с числами. Необходимость наделить их зрением возникла относительно недавно. Распознавание номерных знаков автомобилей, чтение штрихкодов на товарах в супермаркете, анализ записей с камер наблюдения, поиск лиц на фото, создание роботов, умеющих находить (и обходить) препятствия, — всё это задачи, которые требуют от компьютера способности «видеть» и интерпретировать увиденное. Набор методов, позволяющих обучить машину извлекать информацию из изображения — будь то картинка или видеозапись, — называется компьютерным зрением.
Как учится компьютер Чтобы компьютер находил на изображениях, скажем, домики, нужно его этому научить. Для этого необходимо составить обучающую выборку. В нашем случае это будет коллекция картинок. Она, во-первых, должна быть достаточно большой (невозможно научить чему-то на двух-трёх примерах), во-вторых — репрезентативной (необходимо, чтобы она отражала природу данных, с которыми мы работаем), а в-третьих, должна содержать как положительные («на этой картинке есть домик»), так и отрицательные («на этой картинке нет домика») примеры.
После того как мы составили выборку, в дело вступает машинное обучение. В ходе обучения компьютер анализирует изображения из выборки, определяет, какие признаки и комбинации признаков указывают на то, что на картинке — домик, и просчитывает их значимость. Если обучение прошло успешно (чтобы удостовериться в этом, проводятся проверки), то машина может применять полученные знания «на практике» — то есть находить домики на любых картинках.
Анализ изображения Человеку ничего не стоит выделить на картинке важное и неважное. Компьютеру это сделать гораздо сложнее. В отличие от человека, он оперирует не образами, а числами. Для компьютера изображение — это набор пикселей, у каждого из которых есть своё значение яркости или цвета. Чтобы машина смогла получить представление о содержимом картинки, изображение обрабатывают с помощью специальных алгоритмов.
Сначала на картинке выявляют потенциально значимые места — то есть предполагаемые объекты или их границы. Это можно сделать несколькими способами. Рассмотрим, к примеру, алгоритм Difference of Gaussians (DoG, разность гауссиан). Он подразумевает, что исходную картинку несколько раз подвергают размытию по Гауссу, каждый раз используя разный радиус размытия. Затем результаты сравнивают друг с другом. Этот способ позволяет выявить на изображении наиболее контрастные фрагменты — к примеру, яркие пятна или изломы линий.
После того как значимые места найдены, их описывают в числах. Запись фрагмента картинки в числовом виде называется дескриптором. С помощью дескрипторов можно быстро, полно и точно сравнить фрагменты изображения, не используя сами фрагменты. Существуют разные алгоритмы получения дескрипторов — например, SIFT, SURF, HOG и многие другие.
Поскольку дескриптор — это числовое описание данных, то сравнение изображений — одна из важнейших задач в компьютерном зрении — сводится к сравнению чисел. Дескрипторы выражены довольно большими числами, поэтому их сравнение может требовать заметных вычислительных ресурсов. Чтобы ускорить вычисления, дескрипторы распределяют по группам, или кластерам. В один и тот же кластер попадают похожие дескрипторы с разных изображений. Операция распределения дескрипторов по кластерам называется кластеризацией.
После кластеризации данный дескриптор изображения сам по себе можно не рассматривать; важным становится лишь номер кластера с дескрипторами, наиболее похожими на данный. Переход от дескриптора к номеру кластера называется квантованием, а сам номер кластера — квантованным дескриптором. Квантование существенно сокращает объём данных, которые нужно обработать компьютеру.
Опираясь на квантованные дескрипторы, компьютер выполняет такие задачи, как распознавание объектов и сравнение изображений. В случае с распознаванием квантованные дескрипторы используются для обучения классификатора — алгоритма, который отделяет изображения «с домиком» от изображений «без домика». В случае со сравнением картинок компьютер сопоставляет наборы квантованных дескрипторов с разных изображений и делает вывод о том, насколько похожи эти изображения или их отдельные фрагменты. Такое сравнение лежит в основе поиска дубликатов и поиска по загруженной картинке.
Это лишь один подход к анализу изображения, поясняющий, как компьютер «видит» предметы. Существуют и другие подходы. Так, для распознавания изображений всё чаще применяются нейронные сети. Они позволяют выводить важные для классификации признаки изображения непосредственно в процессе обучения. Свои методы работы с изображением используются и в узких, специфических областях — например, при чтении штрихкодов.
Где используется компьютерное зрение В умении распознавать человек, однако, пока оставляет компьютер далеко позади. Машина преуспела лишь в определённых задачах — например, в распознавании номеров или машинописного текста. Успешно распознавать разнородные объекты и произвольные сцены (разумеется, в условиях реальной жизни, а не лаборатории) компьютеру всё ещё очень трудно. Поэтому когда мы вводим в поисковую строку в Яндекс.Картинках слова «карбюратор» или «танцующие дети», система анализирует не сами изображения, а преимущественно текст, который их сопровождает.
Тем не менее, в ряде случаев компьютерное зрение может выступать серьёзным подспорьем. Один из таких случаев — это работа с лицами. Рассмотрим две связанные друг с другом, но разные по смыслу задачи: детектирование и распознавание.
Часто бывает достаточно просто найти (то есть детектировать) лицо на фотографии, не определяя, кому оно принадлежит. Так работает фильтр «Лица» в Яндекс.Картинках. Например, по запросу [формула-1] будут найдены главным образом фотографии гоночных болидов. Если же уточнить, что нас интересуют лица, Яндекс.Картинки покажут фотографии гонщиков.
В иных ситуациях нужно не только отыскать лицо, но и узнать по нему человека («Это — Вася»). Такая функция есть в Яндекс.Фотках (скоро она станет доступна и в новом интерфейсе Фоток). При распознавании система берёт за образец уже размеченные фотографии с человеком, поэтому область поиска сильно сужается. Имея десять фотографий, на которых уже отмечен Вася, узнать его на одиннадцатом снимке будет несложно. Если Вася не хочет, чтобы его знали в лицо, он может запретить отмечать себя на фото.
Одна из самых перспективных сфер применения компьютерного зрения — дополненная реальность. Так называют технологию, которая предусматривает наложение виртуальных элементов (например, текстовых подсказок) на картину реального мира. Примером могут быть, например, мобильные приложения, которые позволяют получить информацию о доме, направив на него камеру телефона или планшета. Дополненная реальность уже применяется в программах, сервисах и устройствах, но пока находится только в начале пути.
Современные браузеры могут обходиться без многих элементов, которые когда-то казались необходимыми. Но адресная строка — поле, куда пользователь вводит адрес сайта, — кажется, будет существовать вечно. Она была в первых массовых браузерах и продолжает использоваться по сей день. Строка постоянно совершенствуется: например, она научилась подсказывать адреса сайтов, опираясь на историю браузера. Кроме того, почти во всех современных обозревателях адресная строка умеет обрабатывать не только адреса, но и поисковые запросы. Если ввести в неё, например, запрос [расписание кинотеатров], в браузере откроется страница поисковика с результатами поиска.
Яндекс.Браузер не исключение — в его адресную строку, которую мы называем Умной строкой, можно вводить и адреса сайтов, и поисковые запросы. У нашей Умной строки, однако, есть и другие особенности, о которых, к сожалению, знают не все. Поэтому мы решили посвятить им отдельный рассказ.
Яндекс с 1990-х годов специализируется на поиске. Накопленный опыт позволяет нам понять, как действуют и что рассчитывают получить пользователи в тех или иных ситуациях. Например, классическая цепочка поиска информации через браузер выглядит следующим образом:
1. Пользователь вводит поисковый запрос в адресную строку браузера. 2. Браузер показывает подсказки и помогает уточнить запрос. 3. Загружается страница поисковой системы с результатами поиска. 4. Пользователь выбирает сайт, переходит на него и получает нужную информацию.
Цепочка состоит из четырёх этапов. Разработчики обратили на это внимание и решили её упростить исходя из типичных задач, стоящих перед пользователями. Итак, Яндекс.Браузер умеет:
Подсказывать адрес сайта Зачастую пользователь не помнит адрес нужного ему сайта. Тогда он вводит в адресную строку название сайта, чтобы найти его через поиск. Яндекс понимает, что такой пользователь уже знает, на какой сайт он хочет попасть. Нет смысла отправлять его на страницу с результатами поиска, проще сразу подставить в подсказки нужный адрес. Примерно так:
Чем популярнее среди пользователей тот или иной сайт, тем выше его шансы появиться в подсказках. При этом важно понимать, что подсказывать адрес сайта на основе личной истории посещённых страниц умеют практически все современные браузеры. Яндекс.Браузер научился давать подсказки о сайтах, на которых пользователь ещё не был.
Реагировать на млюсщь и ьфзыюнфтвучюкг Русский язык — родной для Яндекса, но так сложилось, что в интернете принято писать адреса сайтов на латинице. Это означает, что пользователям очень часто приходится переключать раскладку клавиатуры. В результате vk.com может превратиться в млюсщь. Большинство современных браузеров достаточно умны для того, чтобы расшифровать исходный запрос и подобрать подсказку уже в правильной раскладке. Вот только в этом случае браузер уже не станет подсказывать адрес, а отправит в поиск. Например:
В Яндекс.Браузере мы сделали всё для того, чтобы русскоязычные пользователи не испытывали неудобств. Даже если вы забыли переключить раскладку и ввели запрос на абракадабре, браузер не только поймёт слово, но и найдёт сайт, соответствующий истинному запросу, или сразу ответит на вопрос.
У нас есть любимый пример. Если вбить в Умную строку букву «ь», то наш браузер предложит перейти на самый посещаемый вами ресурс, адрес которого начинается с буквы «m». Жмём Enter и попадаем на сайт, а не отправляемся в поисковик искать мягкий знак.
Отвечать на простые вопросы Иногда пользователи ищут ответы на простые и весьма однозначные вопросы. Например, их может интересовать время в том или ином городе или курс доллара на сегодня. Яндекс уже знает точный ответ на эти вопросы, а значит, и браузер может ответить на них прямо в подсказках.
Яндекс.Браузер знает время и погоду как в вашем регионе, так и в других городах. Он может подсказать текущий официальный курс валют. Ему известны высота Килиманджаро и глубина Белого моря. Он умеет быстро переводить слова с одного языка на другой. А ещё Яндекс.Браузер удобно использовать вместо калькулятора:
Умная строка — лишь одна из составляющих нашего браузера. У него есть много других свойств, которые упрощают работу в интернете — например, режим Турбо или просмотрщик офисных документов. О каких-то из этих свойств мы уже рассказывали, а о каких-то расскажем в дальнейшем. Скачать Яндекс.Браузер, чтобы попробовать его в действии, можно здесь.
В конце апреля в Яндексе прошла Первая конференция по программированию для школьников. Она проходила в режиме телемоста сразу в пяти офисах Яндекса — в Москве, Питере, Екатеринбурге, Минске и Симферополе. На прошлой неделе авторы самых лучших проектов получили награды.
Идея конференции была в том, чтобы собрать школьников 8–11-х классов, которые всерьёз интересуются программированием. Зимой мы объявили о нашей затее в школах и кружках и получили 80 заявок от команд и индивидуальных участников. Конкурсный отбор прошли 32 команды. Им предстояло разработать свой проект и представить его в одной из трёх секций: «Облака», «Слово» или «Движение». Первая — для тех, кого интересуют облачные технологии и кроссплатформенные приложения. Вторая — для участников, которые занимаются проектами на стыке лингвистики и программирования. Третья — для тех, кто увлекается компьютерным моделированием.
Благодаря современным технологиям связи на конференции возник полный эффект присутствия. Участники быстро забыли о том, что их разделяют сотни километров, и общались абсолютно свободно. Уровень работ был очень высоким. Достаточно сказать, что в них применялись методы машинного обучения и библиотеки искусственного интеллекта. Были представлены стратегические и лингвистические игры, роботы-манипуляторы, приложения для сочинения стихов и решения задач. Одна из команд показала интереснейший проект по обучению компьютера языку жестов, ещё несколько команд создали новые языки программирования. Это только часть примеров, сильных работ было много.
В секции «Слова» победила Полина Кириченко из московского лицея № 1303. Она разработала естественный язык программирования E-English, который выглядит как обычный текст на английском языке. На E-English программировать так же просто, как писать или читать. Язык понятен неспециалистам и упрощает обучение программированию. Вот один из примеров программы на E-English:
В секции «Облака» лучшими стали Александр Гончаров и Глеб Новиков — команда петербуржской «Лаборатории непрерывного математического образования». Они создали систему распределённых вычислений SocialGrid, которая позволяет с согласия людей использовать их компьютеры. Система легко масштабируема и не требует специального программного обеспечения. Её могут использовать, например, научные институты или лаборатории, которым не хватает вычислительных мощностей.
В секции «Движение» победила команда G29-2 из Минска: Иван Зайков, Андрей Румянцев, Диана Осадчая и Ирина Емельянова. Все они ученики минской гимназии № 29. Эта команда представила руку-робота, которая умеет выполнять различные операции. Ребятам удалось добиться высокой точности движений робота — в частности, он умеет писать и рисовать простые фигуры.
Надо сказать, что на конференции было ещё три команды из минской гимназии № 29. Во многом — благодаря её преподавателю Нилу Бикбулатову, который много лет занимается со своими ребятами исследовательской работой.
Награждение победителей проходило в офисах Яндекса. Все участники получили сертификаты, а победители — электронные книжки Amazon Kindle 5 и рюкзаки от Яндекса, снабжённые солнечным зарядным устройством для планшетов и смартфонов.
Судя по итогам конференции и отзывам участников, первая конференция для школьников удалась. Поэтому уже совершенно ясно, что будет следующая. Мы поздравляем всех участников и ждём новой встречи. А пока — приглашаем на Летнюю школу «Программирование от А до Я» в Подмосковье.
Начался новый набор в мастерскую стартапов Tolstoy Startup Camp. Это мастерская для менеджеров, разработчиков и дизайнеров, которые хотят с нуля создать свой стартап и представить его инвесторам. Несколько недель эксперты из Яндекса и других компаний будут помогать участникам создавать, разрабатывать и запускать свои проекты.
Мастерская пройдёт с 30 июня по 29 августа в московском офисе Яндекса. Приём заявок продлится до 1 июня. Для участия необходимо заполнить анкету и выполнить тестовое задание.
Это будет уже третий набор Tolstoy Startup Camp. В прошлый раз мы получили более 400 заявок, отбор прошли 50 человек, которые сформировали 14 команд. Восемь из них дошли до финала, где представили свои проекты инвесторам. По окончании мастерской большая часть финалистов получила предложения о поддержке от Яндекса или сторонних акселераторов и фондов, таких как ФРИИ и GrowthUP.
Среди вышедших в финал проектов были стартап Aerostate, анализирующий качество воздуха, сервис подбора плейлистов для разных жизненный ситуаций Pocket DJ, платформа для создания и встраивания заданий в блоги Gistroll, мобильное приложение для голосовых вызовов без подключения роуминга AVO, платформа для анализа эффективности выставок и конференций HighFives и другие интересные проекты. Несколько команд-финалистов рассказали нам о том, с чем они пришли на Tolstoy Startup Camp, чего от него ждали и что в итоге получили. Читайте их истории в техноблоге Яндекса на Хабрахабре.
Ровно пятнадцать лет назад вышел долгожданный эпизод «Звёздных войн» — «Скрытая угроза». В Яндекс.Почте почти каждый второй — фанат вселенной. В этот раз, вместо того чтобы собирать большую вечеринку с переодеваниями и нон-стоп просмотром всех шести эпизодов, мы решили сделать что-то более интересное не только для себя, но и для всех поклонников. И запустили свою тему оформления Яндекс.Почты. С джедаями и ситхами.
Всего в теме оформления 20 разных картинок, разделённых на две группы — тёмную и светлую стороны Силы. Вы можете выбрать одну или сделать так, чтобы они сменяли друг друга. От выбора стороны зависит не только фоновое изображение, но и звуковые уведомления о новых письмах. Последователи света будут узнавать о письмах по шипению светового меча, а тёмные рыцари услышат дыхание своего властелина.
Противостояние затронуло не только вселенную «Звёздных войн», внутри компании мы тоже поделились на два лагеря. Одни поддерживают магистра Йоду, а другие — Дарта Вейдера (говорят, что у него есть печеньки). А кого выбираете вы? Через неделю мы посчитаем, сколько пользователей на каждой стороне Силы, и расскажем об этом.
Выбирайте свою сторону, и да пребудет с вами Сила.