Pull to refresh

Продолжение истории про разработку русского аналога Siri

Reading time4 min
Views3.3K
После публикации топика «Разработка русскоговорящего «аналога» Siri за 7 дней» я получил много ценных советов и предложений о помощи. Большое всем спасибо. Я учел многие советы и замечания и продолжил разработку. Что из того получилось под катом.

Первое, что я сделал это изменил дизайн. За это огромное спасибо хабражителю vipzona, который любезно прислал новый дизайн для приложения. Теперь дизайн выглядит так:



Благодаря хабражителю Limosha, который подсказал где копать в доках apple, я изменил частоту дискретизации с 44.1 КГц на 16 КГц. Размер файла, передаваемого на сервер уменьшился. Я хотел еще больше уменьшить размер файла, понизив частоту дискретизации до 8 КГц, но заметно ухудшилось качество распознавания и я остановился на 16 КГц.

Ну и самое главное, я сменил голосовой движок. Перешел на гугловский. Качество распознавания, по сравнению с ispeech.org, в разы лучше. К сожалению, мне так и не удалось найти библиотеку, чтоб конвертировать Wave во FLAC прямо на iPhone, по этому было принято решение осуществлять конвертацию на своем сервере, используя библиотеку flac. Хотя на форумах разработчики пишут, что так все равно получится быстрее, чем конвертировать на устройстве, но мне кажется что это относится к старым моделям iPhone.
Переход на гугловский движок потребовал ресурсов по мощнее и я заказал выделенный сервер. Так как я раньше хостился только на виртуальном хостинге, то с выделенным пришлось помучаться. Мне достался сервак с CentOs с PHP 5.1, без поддержки json_encode и json_decode, а также MYSQL, в котором некорректно работал fulltext поиск с русским языком в кодировке utf8_general_ci. Два дня я «убил», настраивая сервер. Обновил php, установил библиотеку flac, ну и так по мелочи.

После всех изменений логика работы приложения стала выглядеть так:
А) телефон отсылает wave файл на мой сервер;
Б) на сервере файл перекодируется во flac и отправляется серверу гугл на распознавание, получая в ответ распознанную строку;
В) мой сервер обрабатывает полученную информацию, формирует ответ и передает его на телефон;
Г) телефон воспроизводит полученную информацию;
При такой схеме работает все гораздо быстрее, но и нагрузка на сервер возросла не слабо. Даже не знаю сколько теперь запросов одновременно сможет выдержать сервер. Он хоть и выделенный, но не резиновый.

Улучшение функционала


Дальше, внимательно прочитав все присланные и написанные в комментариях советы, я взялся улучшать функционал. Первое, что я сделал это вставил виджет погоды, который показывает погоду по GPS координатам или по IP, если координаты узнать не удалось. Виджет стандартный, взят с gismeteo.ru, и всем не плох, только вот рекламу показывает. Не много позже, наверное, придется сделать свой виджет погоды. Есть несколько сайтов которые по получаемым координатам дают XML файл с погодой. Надо его только распарсить, нарисовать иконки солнышка, туч и.т.д. и вывести на экран.



Затем я добавил возможность звонить абоненту, называя контакт голосом. Если контакт не найден, об этом сообщается. Конечно, у многих, да и у меня самого контакты названы так, что фиг их правильно произнесешь. Чтоб было удобнее я ищу абонента не только по имени или фамилии, но и по псевдониму. Добавляешь контакту псевдоним (nickname), и звонить становится гораздо удобнее. В принципе способ с псевдонимом, самый правильный, его даже apple советует для Siri использовать, потому что как не тренируй программу, но научить ее склонять все фамилии очень тяжело. Дальше в тему управления телефоном (таймер, будильник, заметки) решил пока не углубляться, чтоб apple не зарубила прогу. Они и так прислали письмо, мол извините так мол и так, но проверка вашего приложения потребует дополнительного времени, спасибо за ожидания и бла бла бла.

Затем я добавил возможность узнать свое местонахождение на карте и показать ближайшие объекты рестораны, кафе, ночные клубы и др. Для этого использую запросы к Яндексу. Учитывая, что настоящая siri не ищет объекты за пределами США, получилась весьма полезная фича.



Так же добавил немного юмора и ответы на часто задаваемые, но абсолютно бессмысленные вопросы. Для этого почитал источники на тему, какие вопросы чаще всего задают Siri. Так как у меня все вопросы тоже заносятся в базу, скоро я буду знать что чаще всего спрашивают наши люди.
Еще добавил возможность поиска фотографий и картинок из гугла и подключил Wolfram|Alpha Webservice API. Подключил, но пока не активировал, так как читал что apple безжалостно реджектит все программы, которые используют в голосовом ассистенте базу вольфрам альфа, из за того, что эту же базу использует их Siri. Использование Wolfram|Alpha API, при количестве запросов не более 2000 в сутки, бесплатно.



Затем я занялся такой нужной вещью, как поиск авиабилетов и бронирование отелей. Что из этого получилось видно на скриншотах.



В итоге уже получилось вполне приличное приложение, которое не стыдно выложить в App Store. Правда, надо заполнить до конца еще базу знаний, а то пока мой ассистент больше напоминает Эллочку людоедку из 12 стульев.
Если apple пропустит приложение, то может получиться весьма неплохой стартап. Затем я портирую приложение на android и windows phone. Если же не пропустит, то сильно не расстроюсь. Думаю, что наработки не пропадут. У меня уже есть мысли как и где еще можно применить распознавание речи в мобильных приложениях.
Видеодемонстрация возможностей предрелизной версии тут: www.youtube.com/watch?v=JlkJva-TGfY

P.S.
Как всегда, с радостью выслушаю советы и конструктивную критику.

Если у кого то из Хабражителей есть сервисы по бронированию билетов, отелей и другие полезные сервисы с вменяемым АПИ, с удовольствием обсужу вопрос по встраиванию этих сервисов в свое приложение.

UPD: Сегодня ночью apple отклонил приложение. Буду вступать с ними в длинную и занудную переписку и менять что они потребуют.
Tags:
Hubs:
+61
Comments77

Articles