Эта история о том, как я решил попробовать найти девушку Дарью в социальной сети ВКонтакте. У меня было несколько её фотографий, плюс я знал несколько фактов о ней. Идея была в том, чтобы выгрузить аватарки из ВК и поиском дубликатов фотографий определить id девушки. Желание написать статью появилось лишь из-за удивительной, на мой взгляд, череды событий, связанной с мистикой/удачой/судьбой (верное подчеркнуть). Надеюсь, немного весенне-романтического настроения не помешает на Хабре.

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

Как всё началось


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

Внезапно у меня появилась навязчивая идея найти одну девушку, с которой я познакомился в этом приложении. Так или иначе, это желание было связано как с ней, так и ради спортивного интереса: «реально ли найти при таком раскладе?» Я продолжал общение, но не «выведывая» какие-то подробности, чтобы не упрощать себе поставленную задачу.

Чисто гипотетически...


В моем расположении были имя, возраст, город и фотографии. Я сразу попробовал поиск изображений в Google, но он не помог. Я отталкивался от того, что имя и фотографии в анкете сервиса с большей вероятностью настоящие. А вот возраст может отличаться (как девушки, так и парни иногда искажают данные о возрасте в социальных сетях, по крайней мере одну такую девушку даже приметил). Я предполагал, что либо возраст ВКонтакте не указан, либо на ± один год может отличаться. Что касается города, Москва меня расстроила по двум причинам: во-первых, велика вероятность, что родной город молодой особы не Москва, а во-вторых, население в городе такое большое, что это серьезно усложнило задачу. С фотографиями мысли были такие: во-первых, нужно получить оригинал фотографий для того (забегаю вперед), чтобы сравнить их с выгруженными тысячами фотографий из социальной сети, во-вторых, я предполагал, что одна из «лучших» фотографий будет на аватарке. А если нет… то я смогу узнать девушку сам, если конечно, на аватарке не будет какой-нибудь котенок или радуга. Да, мне пришлось просмотреть ~20к аватарок, но об этом ниже.

Шаг 1. Распознавание дубликатов фотографий


Оригинальные фотографии из приложения я вытащил то ли из кэша ios приложения (через программу iExplorer), то ли перехватив ответ с json объектом от сервера на запрос из приложения (используя Charles, о котором в контексте взлома iOS приложений писали на Хабре).

Как сравнить тысячи фотографий с имеющимися? Либо искать алгоритм и писать самому, либо искать готовый софт. Пару часов поисков и было найдено приложение PhotoSweeper (альтернатива для Windows AntiDupl.NET), которое ищет дубликаты среди файлов картинок по заданным параметрам (допустимая погрешность, алгоритм и т.п.).

Я боялся, что фотографии с сервиса могут быть обрезанными или с фильтром, которого не будет на оригинальных фотографиях, выгруженных из ВК. Поэтому сначала я проверил насколько хорошо работает программа (машинный поиск). Несколько танцев с настройками приложения и наиболее вменяемый результат был достигнут. А вот и нет, но обо всем по порядку.

Довольно любопытный результат поиска дубликатов через программу, который весьма отличается своей «человечностью» от остальных результатов:

Один из самых интересных результата поиска схожих изображений

Но чаще, к сожалению, результаты были такие (очевидно, что картинки отличаются):

Не удовлетворительный результат

Шаг 2. Жадные запросы к ВКонтакте


Итак, теперь можно было приступать к следующему шагу, но я решил сначала пробежать «глазом» по поиску ВКонтакте прежде, чем приступать к коду. ВКонтакте по любому поисковому запросу отдает только 1000 результатов, а по факту Даш 20-ти лет из Москвы было 6950. Пробежав по первой доступной 1000 фотографий, я не нашел нужную.

Тыжпрограммисты не сдаются!

У меня уже было написано мобильное приложение работающее с API ВКонтакте, поэтому я сразу приступил к самому интересному: запросы. Надо было придумать как получить ссылки на аватарки ~7 000 Даш 20-ти лет, которые учатся в Москве.

Очень понравилось работать с API Вконтакте. Очень удобно можно поиграть с запросами прямо на сайте:

Пример работы на странице API ВКонтакте

Поиграл и решил ограничение обойти таким запросом: Дарья, 20 лет, *unversityId. Но это была не лучшая идея: ВК отдал ~1000 идентификаторов Московских университетов, и как бы я не пытался «умерено» делать запросы по университетам, система меня блочила. Утром я проснулся и был доволен полученным кол-вом фотографий. Однако, оказалось, что в какой-то момент ВКонтакте перестал выдавать какие-либо результаты по запросам, а отдавал 0. Не проблема! Есть же и другие аккаунты, с которых можно догрузить оставшуюся часть. Сначала я быстренько сверил, не нашлось ли уже Той Самой через PhotoSweeper. Но нет. Поэтому спустя пару часов, через аккаунты друзей я получил оставшуюся часть фотографий и… Нет.

Шаг 3. А что если машины ошибаются? А что если люди тоже?


Да, я еще раз взглянул на несколько её фотографий и приступил к просмотру тысяч Даш 20 лет. Нет, я не извращенец. Несколько часов и — УРА! Машина не ошиблась, там действительно нет заветной фотографии. С мыслью «надеюсь, что я не не узнал ее» предположил такой вариант: возраст был неверный. Возраст!? А что если город указан верно? Решено отвязаться от университетов и понадеяться, что надо просто сделать 12 запросов по каждому месяцу в году и добавить параметр «город»: «Москва». Я снова закинул удочку в поисках Дарьи, но уже 19-ти и 21-ти лет. Кстати, удивительно, что на запрос «Даша» ВК отдает меньше людей, чем на запрос «Дарья», хотя в результате видны оба варианта написания имени в обоих запросах. Задумался. Загрузил еще несколько тысяч фотографий. Затем повторяю процесс поиска через софтинку, и… нет?! Неужели снова придется смотреть тонну фотографий? Придется. Еще несколько часов с печеньками и… Ура! Машина не ошиблась снова! Что же теперь?

Шаг 4. Теперь уже сдаваться просто глупо


Среди тысяч фотографий было видно, что ~30% это посторонние картинки или вопросики (их я сразу отсек еще до стадии загрузки). Выводы, которые я мог сделать после долгих дней поиска:
1) На её аватарке не её фото, или я лопух не узнал её. Тогда остается грузить больше 20 000+ аккаунтов и все фотографии из их альбома «Фотографии со страницы». Да, такую наглость мне точно не простит ВКонтакте.
2) Глядя на исходные фото предположил, что фильтры на них явно из Instagram. Тогда что? Может попробовать найти Даш в Instagram и выгрузить аватарки/фотографии оттуда (те, что, само собой, в открытом доступе)?

Собираюсь с мыслями. Это не трудно: всего 36 запросов. И никто меня не наругает. Открываю документацию по API Instagram. Кстати, ВКонтакте легко отдает аккаунты Instagram (и не только), если такой указан в анкете.

Грандиозный финал. Отгадка


По ходу действия рассказываю своему другу о своем приключении: исходные данные и то, что я уже попробовал. Не знаю как так случилось, но я даже и подумать не мог, что ему будет интереснее чуть больше, чем «хм, ну удачи». Через минуты две-три получаю от него сообщение «Я нашел ее!». Перечитал. Побледнел. Несколько суток мучений, а тут 2 минуты?

Смотрю ссылку. Да, это была она. Я сразу же взял id и тут же нашел его среди скачанных мною тысяч фотографий. Среди исходных фотографий этой фотографии не было. Да, люди ошибаются — на фото она, а я её просто не узнал (а ведь больше всего этого боялся).

Меня уже ничего не удивляло в тот момент, но обратил внимание вот еще на что: к этому времени аватарка в ВК стояла другая, не та, что выгрузилась у меня прошлой ночью. А это значит… а впрочем уже неважно.

— Как??? — спросил я, добавив эмоций десятком смайликов.
— Я просто ввел в гугле «как найти человека по фотографии»…

Уверен многие догадываются, какие ощущения после этой фразы у меня были. Но не всё так просто.

Решение оказалось не очевидное. Он посмотрел одно видео и на его основе вот что решил проделать — и это сработало:

1) Качаем расширение для Chrome «StopFake»;
2) Загружаем оригинальную фотографию к себе на стену (другое типа лички не срабатывает, но я особо не тестил)ж
3) Нажимаем на кнопочку расширения с желтой уточкой и — «вуаля»!

Пример:

image

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

Послесловие


Когда я уже практически сдался и рассказал о затее девушке, она написала: «я думаю не найдешь». Вполне понятно, ведь она знала, что на аватарке не она. И практически в эту же минуту нашел, но всё же не я. Возможно, многому в этой истории поспособствовала судьба.

К плюсам своего путешествия отнесу то, что это было увлекательно и интересно. Не каждый день тебя так затягивает какая-то задача/цель. Немного прокачал навыки разработки, познакомился ближе с API ВКонтакте, Instagram. Наконец, смог узнать, на что способны доступные программы по поиску дубликатов.

Спасибо за внимание, надеюсь было интересно.

Как бы вы решили подобную задачу?

Комментарии ()