Комментарии 30
Я сделал похожую систему с распознаванием и генерацией голоса, но на старом ноутбуке под Linux - одного ключевого слова оказалось маловато, частые ложные срабатывания, ожидание классического "СЛУШАЙ ИМЯ_АССИСТЕНТА" работает лучше.
Ложных срабатываний не наблюдал, были события когда в стороннем источнике звука (просмотр ютуб или фильма) присутствовало имя Альфа или что-то похожее(Алиса например), тогда да, срабатывало. В крайнем случае, можно увеличить порог процента схожести строки, чтобы избежать ложных срабатываний.
Именно такие срабатывания я и обозвал "ложными", ютуб-тестирование их хорошо провоцирует.
Очень редкие события, пару раз за год использования.
Интересно, у нас другой опыт. Разрабатывали для бизнеса голосового помощника (на raspberry pi 5), и быстро пришли к тому, что вся эта затея будет иметь смысл только при условии максимально качественного распознавания как ключевого слова, так и всей речи. К сожалению бесплатные решения, пришлось заменить на коммерческие. Тот же porcupine например, существенно лучше показывает себя в зашумленных помещениях (цех, гараж), да и в офисе откликается в 9 случаев из 10, в то время, как всё остальное, что пробовали, в лучшем случае 7-8 из 10.
Тут нужно понимать, что в статье речь идет о DIY проекте и каких-то супер возможностях, как в коммерческих продуктах, речи не идет. Само собой, что в коммерческих проектах не стоит применять описанные в статье решения, так же стоит учитывать, что при коммерческой разработке бюджет "шире" и команда больше.
Несомненно. Я оставил свой комментарий лишь по той причине, что после прочтения вашей по настоящему полезной статьи, у неискушенного читателя может сложиться обманчивое впечатление, что всё просто, всё работает. Отчасти это так, но и нюансы есть, которые могут выйти на первый план, если задача будет немного отличаться. Воспринимайте это просто как дополнение, а не контраргументы.
P.S. В качестве сценариев, которых нет у Вас в списке, можно добавить отправку заметок в Телеграм (на имя созданного там бота) (хотя ассистент в моей системе ограничен тем, что преобразует в текст только те слова, которые есть в словаре STT, но бывает удобно) и установка таймера (на команду "три", например, ждет три минуты и проигрывает мелодию).
Отличная статья, молодец!
Где бы готовое железо взять? Может прошиваются уже какие-нибудь серийные колонки?
Это мой эксперимент, цель которого проверить возможность разработки голосового ассистента для умного дома на дешевом железе. В предыдущей статье я описал аппаратную реализацию: https://habr.com/ru/articles/772080/
В теории должно работать на любых устройствах на базе Linux, главное чтобы хватило производительности системных ресурсов.
Спасибо, я уже прочел вашу предыдущую статью. Мне просто не очень хочется "колхозить" корпус, травить плату, и т.д
Вот только что идея появилась: взять какую-нибудь Яндекс-Алису, вынуть из нее все кишки, вставить esp8266 для кнопок и светодиодов, bt-модуль для динамика и микрофона, ну и всё. Всю обработку делать на другом одноплатнике, или мини-пк, или на домашнем сервере, тут уже как нравится. Зато ограничений не будет, хоть LLM там крути на видеокарте. Надо будет попробовать.
Как дела с безопасностью? Слушается только хозяина или всех? Телевизор? Радио?
Вместо silero попробуй piper tts, работает лучше и быстрее, цифры читать умеет.
Если задача выживать в бункере не стоит то всё сильно упрощается. Бесплатное распознавание голоса есть у гугла и.. гугла(gemini), работает почти идеально. Бесплатный tts есть у гугла и микрософта, без заморочек с цифрами и сокращениями, и вообще без заморочек.
Бесплатные большие ллм у groq и google gemini, у них заморочки только с проксями.
Бесплатные маленькие ллм - openrouter, там дают ллама3-8б итп мелочевку.
Я натыкался на такое DIY решение: https://heywillow.io/
Чувак пилит открытую замену Алексе, но вроде она неразговорчивая, команды выполняет, а TTS нет
Насколько я понял, аппаратная часть его проекта построена на базе esp32, сомнительное решение, ну Ок. Такие вещи лучше строить на базе железа, где есть NPU или графическое ядро. В моем проекте есть возможность использовать API Vulkan встроенного графического ядра, что обеспечивает значительное ускорение работы моделей.
У вас получилось запустить Vulkan на Orange Pi Zero 2W? Как именно?
В Mesa есть рабочее ускорение только для OpenGL, а Vulkan через llvmpipe драйвер это не ускорение, а замедление.
Для распознавания можно указать список возможных слов или фраз:
model = Model(model_name="vosk-model-en-us-0.22-lgraph")
trigger_words = ["please enter the number you hear", "please type the numbers you hear"]
numbers = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "zero"]
# You can also specify the possible word or phrase list as JSON list,
# the order doesn't have to be strict
rec = KaldiRecognizer(model,
wf.getframerate(),
f'[{", ".join(map(lambda s: json.dumps(s), trigger_words + numbers))}, "[unk]"]')
while True:
data = wf.readframes(4000)
if len(data) == 0:
break
if rec.AcceptWaveform(data):
print(json.loads(rec.Result())["text"], end=', ')
print(json.loads(rec.FinalResult())["text"])
Так можно избавиться от необходимости подбирать похожие команды
А что насчет RHVoice? На телефоне стоит, голос немного "роботический", но читает нормально
>> GitHub с исходным кодом проекта + проект аудио модуля (KiCad) > 30к views
А где собственно ссылка на GitHub?
Как всегда хорошо проработано (наверное самое развёрнутое повествование про оффлайн ассистента), интересно, но для меня аппаратно пока неповторимо.
Моя б̶е̶з̶умная колонка: часть вторая // программная