ПО для бортовых информационных систем с мгновенным распознаванием речи водителя в условиях шума
Крупнейший российский производитель грузовиков обратился к нам и нашему партнёру с запросом на разработку первого в стране интеллектуального программного обеспечения для голосового управления кабиной.
Две основные задачи, которые клиент хотел решить — сделать процесс вождения удобнее и безопаснее и перестать зависеть от зарубежных лицензий на аналогичное программное обеспечение.
Забегая вперёд, отметим, что проект прошёл успешно. Теперь водитель может управлять функциями кабины, не отрывая рук от руля. Чтобы построить маршрут или прочитать сообщения, больше не нужно искать кнопки или отвлекаться от дороги на медиапланшет. О процессе и нюансах разработки рассказываем ниже.
О клиенте
Ведущий российский производитель дизельных автомобилей и дизельных двигателей. Линейка предприятия включает грузовые и армейские машины, троллейбусы и автобусы и различную сельскохозяйственную автотехнику.
Ежегодно предприятие выпускает более 40 000 единиц транспорта. Автомобили этой марки заслужили признание профессионалов благодаря своей надёжности, прочности и высокой проходимости.
О задаче
Производитель стремился вывести эргономику и комфорт своих машин на уровень лучших мировых образцов — моделей от Mercedes Benz и MAN.
Так, под новую кабину нужна была мультимедийная система с интеллектуальными функциями.
Ключевая часть новой кабины — голосовой помощник. Требовалось, чтобы он не только понимал простые команды вроде «Включи радио», но и отвечал водителю, при этом учитывая контекст разговора — совсем как Алиса от Яндекса или Amazon Alexa.
Поэтому клиент запустил разработку собственного решения с продвинутыми возможностями, среди которых:
- аутентификация водителя по голосу и лицу;
- голосовое управление автомобилем;
- умный голосовой помощник.
Чтобы эту задумку реализовать, была необходима модернизация кабины. Мы в NLABTEAM отвечали за часть работ: адаптировали SDK обработки речи — распознавания, синтеза и биометрии — для бортовой мультимедийной системы грузовика, под мобильную платформу Android.
В сердце системы — решение для синтеза речи от нашего партнёра, ведущего производителя технологий речевой аналитики в стране. Этот партнёр и пригласил нас в проект.
Вызовы проекта
В процессе работы мы столкнулись с двумя челленджами:
- несовместимостью библиотеки обработки речи и мобильного железа;
- жёсткими ограничениями мобильного процессора.
Библиотеки обработки речи, используемые клиентом, разработаны на языке C++, а кабина грузовика была оснащена медиаприставкой на базе Android с мобильным процессором. Без доработок эти две технологии несовместимы — SDK попросту не запустятся на мобильном устройстве, и функционал не сработает.
В частности, на Android нельзя использовать математические библиотеки Intel MKL и IPP — два критичных для производительности компонента, которые входят в SDK синтеза речи. Соответственно, их из-за их недоступности требования к производительности стали более строгими.
Intel MKL и IPP ускоряют синтез речи. Без них и без того дорогостоящая операция становилась слишком тяжёлой для мобильного железа. Между обращением к системе и ответом возникала ощутимая задержка, неприемлемая в условиях работы водителя в дороге.
Наши решения
Шаг 1. Доработали SDK синтеза речи совместно с ведущим поставщиком решений для речевой аналитики в РФ
Мы начали с глубокого анализа исходного SDK от партнёра, чтобы выявить компоненты, несовместимые с Android. Затем разработали детальный план адаптации этих компонентов.
Доработка SDK с нашей стороны потребовала модификации продукта партнёра на уровне открытого исходного кода. В частности, нужно было адаптировать модели машинного обучения, сократив количество параметров без потери точности. Мы провели несколько итераций: сперва определяли «бутылочные горлышки» в производительности, затем совместно с партнёром оптимизировали алгоритмы обработки сигналов.
При замене недоступных библиотек на кроссплатформенные аналоги столкнулись с ещё одним нюансом. Каждая библиотека, которую мы тестировали, вносила свои погрешности, что сказывалось на общем качестве алгоритма обработки сигналов. Получался «сломанный телефон»: например, когда водитель говорил «Проложи маршрут до Тулы», система могла услышать совсем иную команду, со схожими по звучанию словами. Чтобы исправить это и добиться высокой точности распознавания речи, мы глубоко переработали часть функций библиотек.
Шаг 2. Адаптировали SDK для синтеза речи под Android
SDK от производителя систем распознавания речи был изначально разработан для десктопных устройств, а медиапланшет грузовика — это мобильное устройство. В сущности, нам нужно было сделать так, чтобы компьютерная программа для Windows запустилась на смартфоне.
Это оказалось нетривиальной задачей. Мы создали Java-обёртки (интерфейс между оптимизированным низкоуровневым кодом и средой выполнения Java на Android) для всех компонентов SDK, что позволило использовать адаптированное решение в Android-приложениях.
Шаг 3. Снизили задержку в скорости распознавания речи до показателя <1 секунды
Ключевым требованием к системе была минимальная задержка при распознавании речи. Мы поставили цель: уложиться в одну секунду от момента окончания фразы до начала выполнения команды. Это критично для комфортного взаимодействия водителя с системой — более длительная пауза создавала бы ощущение, что машина «не слышит» команду, и отвлекала говорящего.
Чтобы добиться целевого результата, применили комплексный подход. Совместно с разработчиком системы распознавания речи уменьшили размер языковой модели, сохранив при этом точность, сократили количество проходов по данным и реализовали кеширование. Так смогли «выжать всё» из сравнительно слабого мобильного процессора.
Шаг 4. Протестировали систему и обеспечили бесперебойную работу в условиях реальной эксплуатации
После интеграции SDK в бортовую систему мы приступили к многоступенчатому тестированию. Несмотря на то что наш клиент использовал современную кабину, некоторые компоненты грузовика создавали неоптимальные условия для качественной работы аудиосистемы. В частности, шумный двигатель иногда заглушал голос водителя.
Выходило, что система прекрасно работала в лабораторных условиях, но сбоила в реальной эксплуатации. Чтобы это исправить, мы существенно доработали алгоритмы шумоподавления и фильтрации сигнала.
Для этого провели серию «полевых» испытаний. Записали образцы речи и фонового шума в различных режимах работы двигателя и на разных скоростях движения. На основе собранных данных обучили модели распознавания речи качественно выполнять свои задачи даже в условиях повышенного шума.
Результаты
- Интегрировали голосовое управление в бортовую систему грузовика. Водитель может включать радио или строить маршрут, не отвлекаясь от дороги и не убирая руки с руля.
- Адаптировали SDK распознавания речи для бортовой системы. Для этого поместили все компоненты в «обёртки» на Java. Теперь программа легко запускается на мобильном устройстве — на бортовом медиапланшете и цифровой приборной панели водителя.
- Оптимизировали алгоритмы машинного обучения под низкопроизводительное железо. От окончания фразы водителя до начала выполнения его команды проходит меньше одной секунды — наш голосовой помощник отзывается быстрее, чем Siri.
- Адаптировали систему для работы в реальных условиях эксплуатации. Голосовой помощник безошибочно распознаёт команды даже при быстром движении по шумной трассе или когда приоткрыто окно кабины.