Найти тему

Как я осваивал распознавание и синтез человеческой речи на экстремально слабом железе. STT и TTS на чмошной ТВ приставке.

Посмотрел я, значит, ролик «DIY умная колонка для управления голосом устройствами умного дома Home Assistant на ESP32 и ESPHome», ну, думаю, наконец-то! Свершилось: «Алису» запустили на моём любимом микроконтроллере ESP32. Ага. Надежды юношей питают. В ролике показан беспроводной микрофон и динамик в корпусе блюпупной колонки за 300 р. Но всё-таки заинтересовался, как это устроено, перевод голоса в текст и текста в речь. На гитхабе есть живой проект на эту тему. Называется "Ирина - русский голосовой ассистент для работы оффлайн". Проект большой, я из него выбрал для изучения функции STT и TTS - речь-в-текст и текст-в-речь. Вот отчёт о проделанной работе:

Излагаю результаты своих научно-изыскательских работ на тему "даёшь распознавание и синтез человеческого голоса на экстремально слабой платформе! И чтобы никаких интернетов!!!"
Итак, за прошедшую неделю запущено распознавание и синтез речи на двух платформах:

Первая-500 рублёвая материнка с Авито https://www.gigabyte.com/Motherboard/GA-E350N-USB3-rev-10#ov . В ней впаян процессор Е350, единственное достоинство которого -- реально низкое энергопотребление и нагрев. Результат-положительный.
Второй испытуемый - одноплатник с дохленьким АРМ процессором А20, и одним гигом памяти, который когда то очень давно был ТВ приставкой. Первое испытание закончилось входом в летаргическое состояние. Приставки, не меня. Конечно расстроился, но все-таки, перед тем, как выбросить на помойку, решил дать одноплатнику последний шанс. Подключил SSD , там есть такая возможность. И это взлетело. Выстрелило. Сработала хреновина!
Три вывода:
1. На вышеупомянутой плате (Е350) можно сгородить приличный сервер для домашних нужд, в том числе и для распознавания-синтеза речи. Распознаёт менее чем за 2 секунды, начинает отвечать приличным голосом (примерно как в этом видео, синтез речи VOSK) в среднем через десять секунд. Если задать вопрос "википедия электроника", то система ответит через те же 10 сек "Вот, что удалось найти в википедии" затем пауза, минуту-полторы и следует зачитывание первых двух строк из ВИКИ (так настроено, можно одну или 10 строк цитировать). Очевидно, что синтез речи отнимает дофига ресурсов и времени, гиг-два памяти и 100% загрузки двух ядер процессора. Опробовал и другой вариант синтеза -- на движке PyTTSx. Дефолтная модель имеет гнусавый голос с чудовищным иностранным акцентом -- "и тьебье прИвьет , Андре" да ещё скороговоркой. НО! есть нюанс! Он, гад, отвечает НЕМЕДЛЕННО!!! То есть ему говорят "джо, время! " и не успеваешь моргнуть, слышен ответ "Врьемья дьесьят часов пьятнацат минут". И процессор не грузит вообще. Уверен, что модель голоса можно подобрать получше и устранить скороговорку. Но мне это было не особо интересно, ибо у системы в-общем то вдоволь ресурсов, во время эксперимента был загружен Телеграм и Яндекс-браузер с десятком вкладок и ничего, всё работало. Поэтому я решил нащупать узкие места в системе распознавания-синтеза на...
2. На плате HUB19 от системы ЕГАИС (бывшая ТВ приставка, фирма Атол)
http://omnima.co.uk/home/omnima-a20/ процессор А 20, 1 гиг памяти, 6 USB портов, IRDA, VGA, HDMI, UART, WiFi, блюпуп линейный выход звука, слот SD и, самое интересное-необычное - SATA. Система в стоке находится в eMMC (8 гиг), Браузер нещадно тормозит, а попытка загрузить видео на Ютубе приведет к коматозу. Для мультимедии надо всё таки хотя бы пару гиг памяти, а восполнять нехватку памяти Свапом на eMMC и , тем более на SD -- это что-то типа суицида для этой одноразовой памяти. И поэтому подключение SSD в качестве системного диска и , особенно, свапа даёт такой оздоровляющий результат, всё начинает оживать.
Итак, можно с уверенностью сказать, что распознавание и синтез возможен на ТВ приставке, даже на такой стрёмной, как HUB19 за 1500р (с БП и доставкой на Авито). Результат я записал на видео,
https://youtu.be/HUbGWwNU2CY?si=OlwiuiNMm15gCtWi чтобы диванные иксперды особо не возбуждались. Но самый главный результат этого эксперимента -- на слабом железе узким местом становится постоянное прослушивание микрофона и выкапывание в нём ключевых фраз., загрузка обоих ядер колеблется 80-90%, в режиме, который мы считаем простоем. Отсюда вытекает, третий, самый ключеважный вывод:
3. Функцию "вейкворд" надо поручать специально обученному девайсу, а не грузить этим делом сервер STT (или умного дома), у него своих дел хватает. В этом плане решение, на МК ESP32 S3, который распознаёт ключевую фразу
https://docs.espressif.com/projects/esp-sr/en/latest/esp32s3/wake_word_engine/README.html и включает сервер на прослушивание, можно считать оптимальным.

Если кому то интересно, как преодолевать грабли при реализации "Ирины", пишите в комментариях, я дополню статью.