![](https://habrastorage.org/getpro/habr/upload_files/623/f09/d4c/623f09d4c6170904345b86fbc8066958.png)
Многие люди с помощью облачных сервисов делятся файлами с друзьями и близкими: загрузил один раз в облако, открыл доступ по публичной ссылке и рассылай её кому хочешь. Мы стремимся облегчить пользователям работу с Облаком и регулярно анализируем, какой информацией они делятся, какие форматы файлов загружают. Если вам доводилось просматривать несколько сотен снимков с корпоратива или дружеской посиделки в поисках своего любимого лица, то вы знаете, какое это нудное занятие.
Мы — Сергей Тарасенко, менеджер продуктов Облако и Диск-О, и Арсений Зорин, руководитель группы бэкенд-разработки — расскажем о новом инструменте, который экономит время пользователей: автоматической сортировке фотографий внутри папки по лицам. Именно сортировке: вы можете быстро выбрать изображения с конкретными людьми, но не идентифицировать их.
Интерфейс
Инструмент работает очень просто: создаёшь папку, загружаешь в неё фотографии, и у людей, зашедших в папку по публичной ссылке, на лету появляется фильтр сортировки фотографий по лицам. Пока что сортировка работает только в веб-версии Облака, потому что её использует большинство пользователей; в мобильных клиентах фича появится уже скоро.
![](https://habrastorage.org/getpro/habr/upload_files/a62/a92/fad/a62a92fadce568617418818396fa63bf.png)
Есть и другой способ воспользоваться сортировкой по лицам: откройте в Облаке какую-нибудь фотографию на весь экран и нажмите на одно из лиц на ней — вы получите все фотографии с этим человеком из этой публичной папки. И учитывая, что в среднем на одну папку приходится снимков больше 4 разных людей и обоими вариантами сортировки сейчас пользуются примерно поровну, мы считаем, что новая фича будет полезна и востребована.
Как это работает
В основе новой фичи лежит развиваемая уже несколько лет командой VisAPI модель распознавания лиц, сейчас в эксплуатации четвёртая версия. У неё очень широкие возможности: модель может связать лица, частично скрытые головными уборами, солнцезащитными очками и платками. Даже может опознать лицо в полоборота. А ещё для каждой фотографии система отмечает, улыбается ли человек и насколько хорошо видно его лицо.
Модель использует принципы кластерного анализа: чем больше лиц какого-то человека она видит, тем лучше их сопоставляет — в профиль, в анфас, вполоборота, частично скрытое.
Поскольку доступ к папкам по публичным ссылкам открыт для всех желающих, нагрузка на них может быть довольно высокой. И чтобы её снизить, мы решили ограничить частоту обновления и кешировать результаты сортировки по лицам в отдельном шардированном хранилище на основе Redis. Что это означает? Когда первый пользователь заходит по публичной ссылке, система находит на фотографиях в ней лица, сортирует файлы и передаёт результат пользователю. Этот результат сохраняется в кеш, и следующие заходящие по ссылке пользователи будут сразу его получать. Но файлы в папках могут изменяться, добавляться и удаляться, поэтому мы добавили автоматическую инвалидацию кеша с определённой периодичностью. Даже если в папку, для которой ещё не создан кеш, зайдёт сразу несколько пользователей, то сортировка всё-равно будет сгенерирована один раз и закеширована.
Конечно, модель может ошибаться. Но сегодня она «вылизана» настолько, что точность работы превысила 99 %. Если пользователь заметит, что модель ошибочно сопоставила или не сопоставила фотографии каких-то людей, можно вручную указать системе правильные изображения. Поскольку наша модель — как и подавляющее большинство на западном рынке — обучалась на фотографиях взрослых европейцев, она иногда может ошибаться на фотографиях представителей других рас и детей, но мы постепенно улучшаем работу с ними. Например, дети с возрастом меняются и сегодня наша модель уже может распознать одного и того же ребёнка на фотографиях за десятилетний период.
Сейчас мы активно работаем над повышением производительности хранилища с метаразметкой файлов — информацией о содержимом файла. Она содержит информацию о миллиардах файлов: для фотографии мы храним информацию о лицах, объектах, достопримечательностях, геокоординатах, «рейтинге крутости» (или визуальной красоты), векторе разложения. Последний оценивает схожесть фотографий, благодаря этому мы можем определять не только одинаковые снимки, но и кадры, отличающиеся ракурсом. Эти данные позволяют быстро находить нужные файлы, а нам — создавать подборки воспоминаний, отбирая только лучшие фотографии и исключая похожие. Сейчас мы работаем над новыми ML-моделями разметки и поддержкой новых форматов. Для этого мы поменяем архитектуру хранилища, чтобы быстрее находить и отдавать запрашиваемые данные. Новая архитектора позволит размечать десятки миллионов файлов ежедневно, а метаразметка в новых разделах Облака — ещё быстрее отдавать информацию о файлах.
А как насчёт инфобезопасности?
Сразу поясним: новая фича никак не идентифицирует лица на фотографиях и не сопоставляет снимки с владельцем аккаунта Облака. Она лишь находит на фотографиях лица, сравнивает их друг с другом — даже не пытаясь опознать :), — и делает для пользователя выборки с изображениями, на которых есть один и тот же человек по мнению модели машинного обучения. То есть система всего лишь находит похожие лица внутри публичной папки.
Даже если вы указали в аккаунте Облака своё имя, сортировка по лицам не свяжет вас с фотографиями в публичных папках, потому что эти данные не связаны друг с другом на уровне архитектуры.
Действие фичи даже не распространяется на другие папки в вашем Облаке. И вы не сможете найти в чужих публичных папках фотографии с каким-либо человеком, даже если загрузите его портрет в Облако — для сортировки и получения выборки необходимо знать ссылку на конкретную папку. Так что можно не бояться, что кто-нибудь прошерстит Облако и выяснит, что вы сделали прошлым летом.