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

от автора

Гулял я как-то по переулкам города. Старые здания, полные историй. А я страсть как люблю историю. Чей дом, когда построили, кто жил и что еще интересного. На фасаде нет таблички, экскурсовод рядом не материализовался. Постоянно доставать телефон, искать в интернете, открывать несколько сайтов то еще занятие. Можно сфотографировать здание и потом разобраться. Потом наступает примерно никогда.

Так и родилась идея Yerick City Explorer — Android-приложение для самостоятельных городских прогулок.

Большинство городских приложений начинают разговор с пользователем одинаково: вот список популярных мест, вот рейтинг, вот десять фотографий, вот ещё список.

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

Поэтому у меня главным экраном стала карта, а не лента рекомендаций.

Приложение можно использовать двумя способами:

  • нажать на здание или точку на карте;

  • попросить показать достопримечательности рядом.

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

Во втором случае на карте появляются музеи, достопримечательности и исторические места в выбранном радиусе: от короткого круга в 500 метров до 2 километров.

Есть еще поиск, но это так, на всякий случай.

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

Что это за дом или место? — главный вопрос приложения

Самый важный сценарий выглядит почти слишком коротко:

тап по зданию → карточка → Запросить у гида

За этой кнопкой приложение собирает рассказ из нескольких частей:

  • что это за место;

  • чем оно интересно;

  • что происходило здесь раньше;

  • несколько любопытных фактов;

  • короткая версия, которую удобно слушать на улице.

Последний пункт потом оказался важнее, чем казалось. Это не передаваемое чувство, когда смотришь на объект, а в наушниках тебе про него рассказывают. И руки свободные, не держат телефон в руках!

Почему информацию ищет Яндекс, а рассказывает GigaChat

Здесь у приложения два цифровых сотрудника с разными должностными инструкциями.

Yandex Agent умеет пользоваться поиском в интернете. Он отправляется за фактами о конкретном месте: ищет упоминания здания, исторические сведения и данные, связанные с названием и адресом.

GigaChat в используемом приложением API-режиме не получает такого инструмента поиска. Зато он работает с уже собранным материалом: превращает его в связный рассказ, отделяет историю от интересных фактов и готовит короткую версию для озвучки. Я попросил его добавить юмора, а если нет информации или ее мало — то уже придумать свой рассказ. Иногда даже смешно и злободневно выходит.

Это не попытка посадить две нейросети на одну табуретку ради красивой архитектурной схемы. Разделение появилось из практического ограничения: одна система может искать актуальные сведения, другая оформляет найденное. GigaChat для меня пока практически даром, пока лимит не съем по свободной подписке — вот он и формирует данные.

Схема заодно уменьшает пространство для фантазии. GigaChat должен работать с принесёнными фактами, а не вспоминать историю дома по смутному внутреннему ощущению. Ну, кроме, как я писал выше, отсутствия информации.

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

Кнопка «Рядом» и внезапное изобилие культуры

Следующая задача выглядела ещё проще: показать интересные места вокруг.

Приложение ищет достопримечательности, музеи и исторические места. Затем объединяет результаты, убирает повторы и показывает их одновременно списком и метками на карте.

Первая проблема обнаружилась быстро: один музей вполне способен оказаться и музеем, и достопримечательностью, и историческим местом. С точки зрения культуры всё честно. С точки зрения карты пользователь получает три пина на одной точке.

Но даже после удаления дублей возникла более важная проблема: хороший поиск вовсе не означает хорошую прогулку.

Карта может найти несколько десятков мест. Если приложение автоматически включит их все в маршрут, получится не экскурсия, а испытание на выносливость.

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

Список при этом можно закрыть. Метки останутся. Список считается временным помощником, а карта — основным рабочим пространством. Выбрали точки, построили маршрут, пошли гулять.

Для большого набора выбранных мест приложение может попросить AI собрать разумную прогулку: не пытаться посетить всё, выбрать несколько остановок и уложить их в маршрут примерно на один-два часа. Если облачный помощник недоступен, включается простой запасной план: идти сначала к ближайшей точке, затем к следующей.

По мере движения приложение сравнивает положение человека с маршрутом. Если заметно отклониться, оно попросит построить путь заново. Если приблизиться к цели примерно на 25 метров, считает, что место достигнуто.

Двадцать пять метров — это не обещание привести точно к нужной дверной ручке. GPS в городе любит отражаться от зданий и иногда переносит человека на противоположную сторону улицы без его согласия. Задача приложения понять, что пользователь уже возле объекта и пора рассказывать.

Когда пользователь подходит к выбранному месту, приложение показывает уведомление и может произнести короткий рассказ. В режиме экскурсии там же в уведомлении доступны действия «Дальше» и «Пропустить», чтобы управлять прогулкой, не возвращаясь к карте после каждой остановки. Правда придется достать телефон из кармана.

Голосовые подсказки по пути намеренно короткие: налево, направо, развернитесь. Никому не нужна лекция об истории градостроительства в момент, когда нужно просто не пропустить поворот. Думаю даже сделать отдельно настройку чтоб можно было отключать эти подсказки.

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

Для озвучки приложение сначала использует облачный голос Yandex SpeechKit. Уже произнесённые фразы могут сохраняться локально, чтобы не загружать одинаковое повторно. Если SpeechKit недоступен, текст подхватывает системный голос Android. Он может звучать менее артистично, зато прогулка не превращается в немое кино при первом исчезновении сети. В центре несколько раз попадал а такой вариант событий.

Четыре способа гулять — от полной тишины до экскурсии

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

Одному хочется самому читать карточки. Другому — нажать на здание и сразу услышать краткую версию. Третьему нужен рассказ только после прибытия. Четвёртый хочет полноценную прогулку по нескольким остановкам.

Поэтому у гида четыре режима:

Вручную

Приложение молчит, пока его не попросят. Пользователь открывает карточки, читает текст и при желании сам запускает озвучку.

С аудио

После загрузки карточки приложение автоматически читает короткую версию рассказа. Это удобно, если телефон уже в руках, но хочется смотреть не на экран, а на фасад.

По прибытии

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

Экскурсия

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

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

Честные ограничения

У приложения есть границы, и лучше назвать их прямо.

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

Офлайн-карт нет. Сохранённые рассказы доступны без сети, но загрузить заранее весь город вместе с поиском и маршрутами пока нельзя.

GPS не знает, у какой колонны вы стоите. Событие прибытия означает «вы возле точки», а не «ваша правая нога находится на первой ступеньке».

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

И ещё одно ограничение, скорее приятное: приложение не решает, что именно человек обязан увидеть. Оно помогает, но право пройти мимо очередного памятника оставляет Пользователю.

Как выглядит вся прогулка целиком

Если убрать названия технологий, слои архитектуры и сетевые протоколы, получается простой сценарий:

Например:

Вы приезжаете в незнакомый район и нажимаете «Рядом». На карте появляются музей, старый особняк, памятник и ещё несколько мест. Музей сегодня не подходит, памятник выглядит интересно, а особняк находится как раз по пути к кафе.

Вы отмечаете памятник и особняк. Затем замечаете на карте ещё одно здание, нажимаете на него, читаете короткую карточку и тоже добавляете в прогулку.

Приложение предлагает порядок точек и рисует пеший маршрут.

У памятника приходит уведомление. В наушниках звучит короткий рассказ. Телефон остаётся в кармане. Затем вы идете дальше к особняку.

Возле здания хочется узнать больше — достаёте телефон и открываете полную историю. Не хочется — продолжаете прогулку.

Именно это сочетание свободы и помощи оказалось для проекта главным. Карта не превращается в строгий планировщик, голос не включается без спроса, AI не выбирает интересы человека вместо него.

Что в итоге получилось

Yerick City Explorer начинался как идея «прикрутить нейросеть к карте». Но нейросеть оказалась далеко не самой сложной частью.

Гораздо важнее были вопросы попроще:

  • когда показать рассказ, чтобы он не мешал смотреть на город;

  • как не превратить результаты поиска в обязательный марафон;

  • как дать человеку выбрать места прямо на карте;

  • как продолжить прогулку, когда телефон в кармане;

В результате получилось вот такое приложение.

Конечно, это не замена настоящему гиду и его интересным рассказам. Да и не планировалось приложение таким.

Кто знает, во что выльется дальше. Есть одна идея интригующая. Прикрутить выпущенные книги аудиогидов, или, например ту же «Москва и москвичи» Владимира Алексеевича Гиляровского, по тексту наставить гео меток, а потом ходить по городу и слушать. Но пока только в виде идеи…

ссылка на оригинал статьи https://habr.com/ru/articles/1076938/