113 заметок с тегом

проекты

Vision of a Future

Вы наверняка знаете про Mapbox Vision SDK. Удивительная библиотека, которая прямо на устройстве прогоняет видео с телефонной камеры через нейронную сеть. Ищет в кадре машины, пешеходов и знаки, размечает кадр попиксельно, рисует на экране маршрут и напоминает об ограничениях. Продвинутый видеорегистратор. Видеоролик лучше любого описания: да, техника дошла, будущее уже в телефоне и почти не тормозит.

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

Когда я за рулём, экран моего телефона выключен. Там работает навигатор и в правильные моменты он подсказывает: «поверните налево», «через триста метров направо». Никогда не удавалось оценить, сколько это — триста метров; порой приходилось резко тормозить и сдавать назад. Если прикрепить телефон к приборной панели, я начинаю его палить: контролировать скорость и время по GPS, смотреть на окрестности на карте. Читать уведомления из мессенджеров.

Поэтому AR, дополненная реальность, не нужна. Остальные части презентации тоже по-своему бесполезны. Предупреждения, например, либо избыточны и их игнорируешь — вспомните «динь» о превышении скорости в яндекс-картах, — либо редки и слишком неожиданны, чтобы вовремя среагировать. Картинки на сайте Vision SDK предлагают и третий вид уведомлений: слишком ярких и перегруженных, чтобы читать за рулём. Последний слайд в «Use Cases» особенно зловещ: внедрение системы приведёт к штрафам за то, что водители не роботы.

Когда-то я целый год смотрел ролики ру-чп и теперь при езде я вижу сотни собственных ошибок, которые могли бы привести к аварии. Отвлёкся на медиафасад. На узкой полосе мечусь между зеркалами и машиной впереди. Автобус справа закрыл сигнал светофора и я его предположил. Мчу по трассе и ожидаю, что пешеходы не самоубийцы. Перестраиваюсь влево и каждый раз жду, что влечу в машину либо в слепой зоне, либо впереди, когда проверяю эту зону.

Vision SDK захватывает воображение как обещание безопасного будущего. Водителю нужна помощь — но не в навигации: с ней справляются и обычные навигаторы. Этот технологический костыль приблизит то, о чём безосновательно грезят апологеты автономного транспорта: более безопасные и эффективные дороги. Для этого не нужно покупать новую машину и бояться, что встретишь непредсказуемый для искусственного интеллекта таз. Достаточно поставить две камеры сзади и спереди, запустить приложение и построить маршрут.

Главное в разработке — заткнуть внутреннего технаря и решать проблемы, а не предоставлять возможности. Например, не показывать, а говорить. Не «триста метров», а «перед забором». «Две минуты до съезда, перестройся вправо». Или «десять секунд», если машин вокруг мало. Это всё базовые улучшения, для которых не нужно камер. Vision SDK позволяет оценивать окружающую обстановку так, как не сможет никакой водитель, особенно усталый или в сумерках. «Впереди пешеход, притормози».

Обучение привычкам водителя, плюс данные с камер и автомобильных датчиков, плюс картография решат все затруднения, знакомые каждому водителю. Стоит ли разгоняться, или всё равно на светофоре стоять? Безопасно ли обгонять таз с прицепом, когда встречка далеко, но слепит фарами? Прервать обгон и встроиться между фурами? Быстрее ли соседняя полоса и точно ли там сейчас никого нет в слепой зоне? Сколько на этой дороге полос, не стоит ли принять чуть вправо? Тормозить или резко свернуть перед препятствием? Не влетит ли в меня обгоняющий, если я поверну налево?

Нужно не вываливать всё, что вычислили, а ненавязчиво подсказывать и, возможно, светить крупными, понятными индикаторами. Знаю, что превышаю скорость, но пора бы понять, что я люблю ездить плюс пять к ограничению, за которые не штрафуют. Если я в правой полосе, то зачем предлагать держаться правее? Линия маршрута нафиг не нужна, когда о повороте можно сказать голосом, а вот индикатор «можно обгонять» очень бы пригодился. Как и индикаторы безопасности перестроения на левом и правом боковых зеркалах.

Будут ли аварии из-за водителей, излишне положившихся на такого помощника? Конечно. Это предсказуемая угроза безопасности, с которой приложение, единственная задача которого — минимизация угроз, — должно бороться. Производители автономных машин сейчас думают, как водитель, следящий за правильностью решений, должен сигнализировать о своём внимании. Наша гипотетическая система тоже должна постоянно давать сигналы, что она следит за дорогой. При этом не раздражая водителя. Пониженная уверенность в данных — тоже красный флаг, который должен привлекать внимание. Эффективные сигнальные системы потребуют работы когнитивистов, которых не каждая компания догадается нанять. Это не лампочки на приборной панели, а интерфейс более высокого, интуитивного уровня.

Будущее вождения может быть построено на Vision SDK, если не произойдёт неминуемого. Я жду традиционного: Mapbox выпустит SDK и со временем переключит разработчиков на другие задачи. Несколько стартапов вырастут вокруг этой библиотеки и каждый запилит свою часть головоломки. Будут несколько приложений с платными подписками (потому что использование SDK стоит по доллару за человека), которые почти, но не совсем, помогают водителю, каждое по-своему. Пазл из них не сложится в идеального помощника. И в финале, как недавно нейронные сети для определения и маскировки лиц, технология обработки автомобильного видео станет ещё одним не взлетевшим технологическим прорывом.

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

3 мая   ВНЕЗАПНО   не про нас   проекты

Скованные одним слоем

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

Клубок данных

Шесть лет назад слои были у всех на устах. «Какие слои в вашем проекте закончены?» — спрашивали на конференциях. «Рано или поздно придётся внести понятие слоёв», — комментировали в штосме. И вот мы в 2018, как успехи в этом направлении?

У нас были сайт Ito Map и панель фильтров в JOSM: ввела highway=* и получила слой дорог и связанных с ними POI. Теперь к ним добавились тематические сайты на основе Overpass API — например, редакторы полос от Almaz. Это круто, конечно, но не решает общую проблему OpenStreetMap.

Проблема с нашими данными в том, что они неделимы. Это хуже, чем топология (когда объекты собираются из частей): связи в данных невероятно прочны и непредсказуемы. Точка лежачего полицейского в составе линии дороги, территория школы и забор вокруг неё в одном объекте, остров-лес... Мрак для человека, всю жизнь работавшего с шейпфайлами. Добавим сюда отношения с сотнями автобусных маршрутов поверх одних и тех же дорог, административные границы по рекам и прочие радости типа type=person — и трогать данные становится страшновато.

Спрятать лишнее фильтрами? Не только потеряем некоторые сильные связи (см. границы по дорогам), но и наткнёмся на распространённые слабые связи: когда кажется, что объекты не связаны, но их взаимное расположение или общие элементы важны. Например, многие проспекты разбиты на сегменты, которые объединяет только тег name (да и то не всегда). Магазины нередко находятся внутри здания с shop=mall (или без этого тега, но с названием вида «ТЦ Скрытный»). Как узнать адрес кафе? Ищете дом, содержащий кафе, затем точку с адресом, лежащую внутри контура дома, ближайшую к кафе.

Зато модель данных простая!

OpenStreetMap с самого начала был не про дороги. Это много карт в одной: города и административное деление, леса и поля, гидрография, дорожный граф и запреты поворота, улицы и адреса, каталог заведений, схемы общественного транспорта, база объёмных моделей зданий. Классические ГИС позволяют включать и выключать тематические слои, чтобы они не мешали работать. Классические ГИС умерли, потому что слои — слишком сложно. Единственный крестик в OSM — на вкладке браузера.

Справочник

Мы хотим, чтобы наша карта работала в качестве справочника заведений, и в этом не уступала коммерческим альтернативам — от странного Here до агрессивного 2ГИС. Разве не за этим вы старательно вводите часы работы магазина во время стоянки в путешествии? Не для этого удаляете с карты закрытое кафе по пути на работу? Как приятно в незнакомом городе найти хорошее кафе или неочевидную детскую площадку в OsmAnd! Сразу чувствуешь, что картографы-любители работают не зря.

«Смотри-ка, люди пользуются OpenStreetMap» — удивляются владельцы крупных организаций и просят своих менеджеров добавить все заведения сети на карту. Иногда срабатывает: когда заведений немного и их можно добавить руками. Иногда они обращаются к тем же компаниям, что добавляют их в коммерческие справочники — и вы знаете, что происходит. Картографы не хотят, чтобы на карте были все объекты. И не только потому что они будут мешать картированию — а они будут, своей неидеальностью, — но и потому что начнётся неявное соревнование человека и «машины». Бездушной капиталистической машины.

Как только какие-то классы объектов на карте станут относительно полными — например, заправки — картографы и пользователи OSM начнут на них полагаться. «У нас есть почти всё» — будут думать они и пропускать неотмеченные небольшие заправки, предполагая, что уже всё есть. Сейчас картографы чувствуют ответственность: кто, если не они. Это приятно, потому что ощущение ответственности похоже на ощущение власти (и ломка от понимания разницы страшная). Когда мы отдаём заметную часть POI, «справочник», на откуп коммерции и роботов, картографы потеряют к ней интерес. Эта потеря может затронуть и остальную карту: мол, запятнали, сами и рисуйте.

Естественная реакция на подобную задачу — выделить слой справочника в отдельный проект. Тоже открытые данные, но с более жёстким классификатором и более дружелюбный к организациям и импортам. Перенести все POI из OpenStreetMap и установить правило: справочник → там. Короче, предложить OpenCorporates двухсторонний обмен информацией.

Разумеется, это не сработает: OpenCorporates — это коммерческая компания, а одно из главных достоинств OSM — что наши данные ни от кого не зависят. Как и другие достоинства, с другого ракурса оно скорее походит на недостаток. Но чинить, что не сломано, — не наша задача. Поэтому наш справочник — это OpenStreetMap. У нас есть база заведений, мы умеем отделять её от других данных. Насколько эта база хороша?

Доверия к заведениям в OSM нет даже у опытных осмеров. От моего дома до ближайшего неотмеченного на карте заведения двести метров. Уверен, это расстояние не превысит полукилометра для значительной части активных редакторов. Когда нужно найти кафе, я открываю foursquare, когда ищу автосервис — карты яндекса. Чем больше POI на карте, тем меньше уверенности в их актуальности. Точки вполне могли нарисовать несколько лет назад. А когда фрагмент карты выглядит относительно полным, осмеры перестают его замечать. Наши инструменты не делают удобным обновление данных. Приятно отметить новый магазин. Удалить закрытый сложно.

Будущее

«Участвовать в проекте легко — достаточно зарегистрироваться и нажать кнопку „Правка“». Нажимаем, видим мешанину как на рисунке ниже. Как здесь найти магазин, который нужно поправить, или как тыкнуть в парк, чтобы его обвести, или как проложить тротуар и не зацепить ничего лишнего? Любой опытный осмер, запомнивший, какой кнопкой расцеплять линии, ответит, что это почти невозможно. И мы даже не упоминаем отношения. Постепенно территории, где опасно орудовать в iD и неудобно в JOSM, расширяются. Когда-нибудь такой плотной станет вся карта — и это не будет поводом для радости.

Могли бы помочь автофильтры, вот только за полтора года мы не увидели работ в этом направлении. Да и нынешние их воплощения не сильно отличаются от обычных фильтров, проблема которых описана выше. Нет, дополнительной функциональностью существующие редакторы не поправишь. Пора признать, что в OpenStreetMap у стандартного подхода «скачать всё и потом редактировать» нет будущего. Ни JOSM, ни iD, ни Vespucci, ни Go Map не посоветуют новичкам через десять лет.

Что же посоветуют? Другие редакторы, эксперименты в которых мы видим в последние годы. Прежде всего, это Maps.Me и StreetComplete. Несмотря на технические недостатки, ими пользуются десятки тысяч пользователей. Их особенность — они тематические. Не пытаясь обрабатывать весь клубок данных, они вытаскивают и пришивают только интересные им ниточки: POI и дополнительные атрибуты. Пользоваться ими легко, и для работы с этими слоями даже опытные осмеры предпочитают достать телефон, а не запускать редактор на компьютере.

Именно это и произойдёт в будущем: редакторы всё-в-одном расслоятся на низкоуровневые, типа Level0, и тематические. На мобильных устройствах последние уже победили, теперь дело за настольными редакторами. Вдохновляющие заметки о первых попытках их сделать только начинают появляться в ленте. Например, Deriviste от Ричарда: простая (и очень сырая) страничка с фотографией из Mapillary, картой и поиском по заготовкам тегов. Дважды кликаешь на магазин на фотографии, корректируешь его расположение, вводишь «фрукты» и идёшь дальше. Обработка фотографий из картографической прогулки раньше была невыносимо сложной, а теперь это игра. Гениально.

Пока что у нас нет ни единого законченного тематического редактора, которым хотелось бы пользоваться вместо обычных. Близки к таким редакторы полос, упомянутые выше. Может, ещё Conflation Audit для подтверждения изменений при импортах POI. Логичным развитием его будет помощь при загрузке любых пакетных точечных данных — так что видя страницу магазина с пятью адресами, захочется открыть этот редактор, а не JOSM или iD, потому что он удобнее и гарантирует обновление данных, когда обновится сайт.

Чудесные тематические редакторы будущего обойдут все проблемы, которые описаны ранее:

  • Они очевидным образом решают вопрос слоёв, работая только со срезом данных. Например, вы указываете автобусные остановки по маршруту, а редактор сам прокладывает маршрут по ближайшим улицам и после проверки правильно разрезает их и собирает отношения route. Связи между слоями станут не случайными, а осмысленными и одобренными пользователем.
  • Они автоматизируют редактирование: заботы об обновлении данных лягут не на супер-картографов, коих сейчас один человек на миллион жителей, а на машину. Она сама скачает данные из того же источника и сама напомнит, когда ваш вклад начнёт выглядеть устаревшим. Хранение жизненного цикла внутри OSM не работает, в отличие от сторонних сервисов, которые знают, что делать со всеми этими датами.
  • Они дают уверенность в качестве данных, потому что валидируют не только геометрическую и техническую корректность, но и источник, и взаимосвязь объектов внутри темы, и возраст данных. Импорты станут умнее, потому что у импортированных объектов будет история. Авторы редакторов будут писать валидаторы не вширь, как в JOSM, а вглубь, находя новые неочевидные способы убедиться в правильности изменений.

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

Дело за малым: придумать и написать. Авторы потенциальных редакторов-хитов должны не только хорошо разбираться в OpenStreetMap и уметь программировать, но и иметь опыт в проектировании хорошего UX. Знать все примеры хорошего пользовательского дизайна в картографии: сайта Moovit, редактора запретов поворотов в iD, алгоримов модерации, интерфейса «народных карт»... Да, подвох тут очевиден. Продолжение следует.

2018   id   ВНЕЗАПНО   проекты

Пакет не нужен

«Нельзя ли при отправке изменений из maps.me разделять объекты по континентам?» — в очередной раз спрашивают на форуме. А то bbox (ограничительный прямоугольник) слишком большой, неудобно. OpenStreetMap был зачат тысячу лет назад программистом, и это лезет изо всех щелей: удивительно, как самые бессмысленные атрибуты становятся мерилом качества.

Прямоугольник на карте — это миф. Минимальные и максимальные широта и долгота — так просто нарисовать фигуру в проекции меркатора, но на практике этих чисел не хватит даже чтобы нормально карту распечатать. Пакет правок, который покрывает полмира, мог добавить одну дорогу на Чукотке, но магия чисел и странных проекций заставит вздохнуть: опять эти импортёры делают ченджсеты на всю планету. От пакетов правок мы храним только bbox, поэтому нажмёшь в любом месте планеты на вкладку «история» и наблюдаешь всемирную историю, а не то, что ждал.

Но даже когда найдёшь нужный пакет правок, останется только бессильно смотреть на его bbox. И на стастраничный список точек, линий и отношений, каждая строчка которого по-своему бесполезна. Ченджсеты — это псевдоупорядочивание. Кажется, что они полезны присвоением метаданных группе объектов, своего рода над-отношения, но на самом деле — метки времени произвольны, их порядок не зависит от номера пакета, комментарии никто не пишет, источник часто врёт, географически, как видим, тоже никто не группирует. Остаётся один полезный атрибут: created_by. Всему остальному верить нельзя.

То есть, единственная польза от пакета правок — это посмотреть, каким редактором сделаны правки. Все остальные атрибуты: даты, bbox, список объектов — только отвлекают, создавая ложное впечатление группировки и упорядоченности. Которых нет, потому что техническое воплощение API не обещает порядка и не подразумевает удобства. Так, для правок maps.me я игнорирую пакеты и рассматриваю каждую правку отдельно. Правки на mmwatch — это поток объектов, у которых номер ченджсета лишь бесполезный атрибут. Увы, для сложных правок со взаимосвязанными изменениями (таких как сдвиг линии) такой подход не сработает.

Примерно об этом я говорил на схемотехнике год назад. О bbox нужно просто забыть: область применения этих прямоугольников ограничена и точно не касается ваших задач. А проблему пакетирования нужно как-то решать. Развязать топологические структуры, группировать по времени и географии, не давать пользователям и приложениям свободы в объединении правок. Это настоящая тема для какого-нибудь будущего API 0.8. А пока приходится работать с тем, что есть.

Следить за изменениями в регионе можно (нужно!) через WhoDidIt, искать их — в его более быстром форке. Пакет правок из интерфейса этого сайта можно открыть в Achavi, но иногда может не повезти. Если bbox окажется слишком велик, загрузки правок вы можете не дождаться. Потому что даже лучшие инструменты полагаются на bbox, который, повторюсь, плох примерно для всего.

Загружать геометрию ченджсетов часто приходится команде по работе с данными в Mapbox. Для этого они сделали и постоянно улучшают сайт OSM Changeset Analyzer, где есть фильтры по любому атрибуту, вплоть до причины для подозрений. Но самые подозрительные пакеты накрывают весь мир, Achavi тут бессилен. Поэтому в этом месяце они сделали то, что давно было пора: кэширование ченджсетов.

Каждую минуту скрипт скачивает свежие дополненные диффы и складывает их в хранилище Amazon S3. Затем он раздербанивает эти диффы на пакеты правок и результат тоже загружает туда же. И теперь сервис визуализации Changeset Map, встроенный в OSMCHA, загружает пакеты мгновенно. Обновите ваши букмарклеты: Changeset (перетащите в закладки).

Проблемы, конечно, есть, но с ними борются. Например, дополненные диффы не окончательны из-за чехарды с транзакциями в базе данных OSM. Их приходится обновлять и обновлять. То же касается и пакетов правок, которые возможно держать открытыми целые сутки, понемногу доливая в них новые объекты. Наконец, история там только новейшая: пакеты старее марта этого года можно не найти. Их загружают, но медленно. Проблему поиска по региону архив тоже не решает, как показывает опыт фильтрации на сайте OSMCHA. Поэтому пользуйтесь им для просмотра недавних правок, а историю ищите на WhoDidIt и Achavi. Неидеально — но пока мы не избавились от концепции пакетов правок, ничего лучше не сделать.

2017   javascript   mapbox   валидаторы   проекты

Не только 64 бита

Вы помните о проблеме 2013 года, когда идентификаторы узлов в OpenStreetMap превысили 2³¹. Те, кто держит регулярно обновляемый сервер тайлов, вчера вечером могли заметить ошибку в логе osm2pgsql:

Osm2pgsql failed due to ERROR: insert_rel failed: ERROR: value «37945» is out of range for type smallint

Да, программа не ожидала, что на хранение количества членов отношения может не хватить двух байтов. Чтобы восстановить обновление, нужно откатить состояние до этого state.txt и убедиться, что osmosis скачивает диффов минимум на два часа. На гитхабе разработчики osm2pgsql обсуждают, как и где лучше ограничить размеры отношений.

Откуда взялось такое большое отношение? Это, слава богу, не мультиполигон. В Бразилии кто-то решил импортировать геодезические сети: 7700 точек плановой сети (для определения координат) и 38 тысяч — высотной (для определения высот). Не очень понятно, зачем в OSM последние: снимки по ним не привяжешь, а ЦМР по осму нормальные люди не корректируют. Но обсуждение импорта в почтовой рассылке не завязалось, а бразильскую группу в телеграме, куда сбежали осмеры, читать сложно.

Проблема оказалась в том, что все импортированные точки люди решили объединить в отношения. В вики с 2008 года предупреждают: отношения — не категории, не создавайте их для облегчения выкачивания данных. Есть же Overpass API, есть osmfilter. «Но мне же надо» — и получилось отношение из 38 тысяч точек. В течение пары минут после его загрузки у многих обвалился osm2pgsql и через полтора часа DWG откатила правку. По техническим причинам, так как формальности были соблюдены и скоро, видимо, точки вернут.

2017   импорт   проекты

Атласы на выбор

Первые две ссылки на вики-странице про печать карт ведут на хорошо известные сервисы. Field Papers похорошел за прошлый год: регион для атласа выбирают теперь на полноэкранной карте, и не нужно думать над лишними настройками. Два клика, час ожидания (как можно так долго склеивать тайлы, не понимаю) — и pdf ваш. На нём традиционно расставлены точки и QR-код: исписанные листы можно отсканировать и загрузить подложкой в JOSM с помощью одноимённого плагина. Единственное, что стало хуже, — перевод. «Полевые материалы создан в Дизайн Stamen».

Второй сервис, MapOSMatic, стал синонимом атласов из OpenStreetMap. Создаваемые им файлы предназначены не для картирования, а для навигации: в них удобный индекс улиц и заведений, а на рамках страниц с картами указано, где искать соседние. За сервисом не стоит большой компании или хотя бы увлечённого разработчика, поэтому с 2012 года он работает на автопилоте, время от времени падая. На выходных, например, очередь на печать выросла до 300 атласов. Когда атлас нужен срочно и с особыми настройками — как, например, для Крымска во время наводнения, — приходится поднимать собственную копию.

Свежий еженедельник OSM обратил внимание на альтернативный сайт MapOSMatic, который в мае поднял Хартмут Хольцгреф. С октября он залил в базу всю планету, и сайт затмил оригинал. Стилей на выбор там не два, как в исходном сервисе, а двенадцать, каждый их них в атласе выглядит лучше, чем склеенные тайлы. К сожалению, процесс создания атласа неочевиден: поиск работает через раз (зато позволяет атласы с непрямоугольными границами области), рисование прямоугольника пугает внезапными масштабированиями, в важных параметрах — размере бумаги, отображаемых сведениях — выбора почти нет. Зато ждать всего пару минут.

2017   проекты
Ранее Ctrl + ↓