Инструкция - исследование

Сравнительный анализ городской среды с использованием компьютерного зрения.

API Google Street View и Microsoft Azure Computer vision API.

Urban Materials

--

Или выбор города для поездки на выходные.

У каждого человека возникает желание отправиться в маленькое путешествие на выходные, но как выбрать то место куда лучше поехать. Можно посмотреть фотографии, почитать отзывы… А что если использовать компьютерное зрение и провести непредвзятое сравнение городов и уже на основе этого выбрать место поездки.

Note: в данной статье рассматривается предположение, что наличие тех или иных элементов, их тип и количество, дает представление о городской среде и позволяет делать выводы о качестве самой городской среды, а также позволяет делать выводы при сравнении аналогичных по своему определению структурных элементов (улица, район, город и т.д.).

Подготовка исходных данных.

Проверку выше описанного предположения предлагаю провести на двух городах Центрального федерального округа, близких по количеству проживающего населения. Мой выбор остановился на городах Тула и Тверь.

Первичный анализ при выборе городов:

Перечень городов

Далее нам необходимо подготовить исходные данные, для этого сформируем в ПО QGIS регулярные сетки (инструмент Create grid) на оба города с шагом в 1000 м. (лучше использовать 300 м, т.к. это минимально возможное расстояние шаговой доступности, да и чем больше данных тем точнее результат анализа). В дальнейшем, после преобразования, мы будем использовать эти точки для сбора фотографий из Google Street view.

Результат формирования сеток (грид):

Пример сформированных сеток (грид) с шагом 500х500м

Далее получаем список координат в WGS84, для каждого из городов, простым экспортом в CSV (флажок на экспорте слоя, с геометрией AS_YX):

Таблица атрибутов точечного слоя

Нам понадобятся только две колонки Y и X.

В этом подходе есть очевидный недостаток — большенство точек не попадут на дороги (отсутствуют фотографии в Google street view).

Для решения этой проблемы нам понадобится Google Roads API, которое позволить приснепить точки (snap point) к улично дорожной сети по принципу наименьшего расстояния.

Работа с API.

Далее нам понадобится зарегистрироваться на двух платформах Google Cloud Platform и Microsoft Azure, обе платформы требуют привязать банковскую карту для оплаты, но предоставляют бесплатный пробный период и безвозмездный кредит в виде денежных средств для исследования предлагаемых ими продуктов.

После регистрации на Google Cloud Platform необходимо подключить API Roads и Street View Static (в документации подробно описано создание проекта, получение ключей и подключение API).

В Microsoft Azure необходимо создать проект в Cognitive Services, получить ключи и конечную точку. В документации это подробно описано. Следует учесть что доступный лимит обращений составляет 5000 и ограничен по времени одним месяцем.

На обоих ресурсах доступно описание на русском языке, а также представлены примеры на различных языках программирования, в том числе на Python (либо воспользоваться ПО Postman для формирования запросов).

Алгоритм работы с API предоставляемых Google:

  1. Отправляем запрос к Roads API вида: https://roads.googleapis.com/v1/snapToRoads?path={Y},{X}&interpolate=true&key={YOUR_API_KEY}. Где Y и X координаты из нашего CSV файла, а YOUR_API_KEY — ваш ключ API. В ответ приходит JSON и если его длина не равна нулю мы получаем координаты в полях latitude и longitude приснепленные к дороге.
  2. Но наличие дороги не равно наличию фотографий street view, поэтому нам необходимо проверить есть ли фотографии в данной точке: https://maps.googleapis.com/maps/api/streetview/metadata?size=1x1&location={latitude},{longitude} &fov=0&heading=0&pitch=0&key={YOUR_API_KEY}. Где latitude и longitude ранее полученные координаты. В ответ приходит JSON и если поле status равно OK, переходим к следующему пункту.
  3. Скачивание панорамных снимков: https://maps.googleapis.com/maps/api/streetview?size=640x640&location={latitude},{longitude}&fov=180&heading={degrees}&pitch=0&key={YOUR_API_KEY}. В поле запроса определяем size = 640x640, это максимальное разрешение скачиваемых изображений в пикселях, fov=180 — максимальное поле зрения (зум), heading={degrees} — угол поворота камеры по горизонтали (degrees принимает значения от 0 до 360, с шагом 60 градусов), pitch=0 — угол наклона по вертикали.

Результат работы:

г. Тула

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

Всего загружено 1086 и 1074 фотографий по городам Тула и Тверь, соответственно.

Теперь воспользуемся API Microsoft Azure Cognitive Services для этого сформируем запрос как в примере, добавив в params = {‘visualFeatures’: ‘Tags,Objects,Categories,Description,Color’}. В ответ сервис присылает json содержащий описание и цветовые характеристики фотографии.

В общей сложности удалось получить описание всех фотографий по обоим городам.

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

Анализ полученных данных

Теперь воспользуемся описанием фотографий в полях json файла:

  • Tags — обнаруженные объекты на фотографиях из Google Street View;
  • Description — описание сцены происходящего на фотографии;
  • Accent Color — акцентные цвета фотографии (HEX).

Анализ по Tags

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

Часть списка tags и их классификация.

При сравнении городов можно сделать следующие выводы на основе анализа фотографий:

  • Территория г. Тулы более благоустроена и имеет больше природных и зеленых насаждений, но в тоже время на фотографиях чаще встречается открытый грунт (грязь).
  • Транспортная инфраструктура более развита в г. Тверь и как следствие количество автотранспорта на дорогах больше, при этом положительным аспектом является и большее количество велосипедов.
  • Здания и постройки чаще встречаются в г. Туле.
  • Разнообразие встречающихся объектов примерно одинаково, но в Твери оно немного больше.

Описание сцены происходящего на фотографии (перевод выполнен с использованием Google Translater)

Топ 10 наиболее часто встречающихся описаний в г. Тула:

Топ 10 наиболее редко встречающихся описаний в г. Тула:

Топ 10 наиболее часто встречающихся описаний в г. Тверь:

Топ 10 наиболее редко встречающихся описаний в г. Тверь:

Из этой информации также можно выбрать количественные показатели по наиболее часто встречающимся ключевым словам:

Акцентные цвета на фотографиях

По цветовой схеме Тула более разнообразна, а в Твери встречаются яркие акценты.

Выводы

Выборка в таком количестве фотографий, на два достаточно крупных города, не является репрезентативной и судить по ней о городах достаточно проблематично, однако результат вполне укладывается в мое представление об этих городах.

В результате этого анализа была выбрана Тула, как место проведения выходных, все получили огромное удовольствие от прогулок по городу)

P.S: Написание данной статьи спровоцировано постом в телеграмме:

UPD: Имплементация в код: https://github.com/mapboxer/comparative_analysis_of_cities

--

--

Urban Materials

Data analysis. Geoinformation technologies. Geodata visualization. Urban planning.