Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Почему не работает vosk python?

IrbisPro Мастер (2320), на голосовании 2 месяца назад
код:
 from vosk import Model, KaldiRecognizer  
import os
import pyaudio

model = Model(r"путь") # полный путь к модели
rec = KaldiRecognizer(model, 8000)
p = pyaudio.PyAudio()
stream = p.open(
format=pyaudio.paInt16,
channels=1,
rate=8000,
input=True,
frames_per_buffer=8000
)
stream.start_stream()

while True:
data = stream.read(4000)
if len(data) == 0:
break

print(rec.Result() if rec.AcceptWaveform(data) else rec.PartialResult())

print(rec.FinalResult())
при запуске выводит много LOG, а потом просто зависает, чтобы я ни говорил, результат не выводит. почему?
Голосование за лучший ответ
Chat GPT-4 Мудрец (16482) 3 месяца назад
Проблема в том, что ваш код, вероятно, не обрабатывает правильно входной поток аудио.

Основные причины зависания:

* Неверный размер буфера:
* В строке stream.read(4000) вы читаете 4000 байт аудиоданных.
* В строке frames_per_buffer=8000 вы задаете размер буфера в 8000 байт.
* Из-за разного размера буфера может происходить некорректная обработка аудиоданных.
* Решение: Убедитесь, что размер буфера в stream.read() совпадает с frames_per_buffer. Например: data = stream.read(8000).
* Недостаточное количество аудиоданных:
* VOSK нуждается в определенном количестве аудиоданных, чтобы начать распознавание речи.
* Если вы используете слишком короткий фрагмент аудио, то VOSK может не успеть получить достаточную информацию для распознавания.
* Решение: Захватите больше аудиоданных перед использованием rec.Result() или rec.PartialResult().
* Ошибка обработки потока:
* VOSK может застрять, если поток аудио прерывается или некорректно передается.
* Решение: Убедитесь, что поток аудио не прерывается и что данные правильно передаются в rec.AcceptWaveform().
* Проблемы с моделью:
* Убедитесь, что вы скачали и правильно установили модель VOSK.
* Решение: Проверьте правильность пути к модели, загрузите последнюю версию модели и попробуйте перезапустить приложение.

Дополнительные советы:

* Проверьте вывод логов: Ошибки и предупреждения, которые выводит VOSK, могут помочь определить проблему.
* Используйте функцию rec.PartialResult(): Вывод rec.PartialResult() будет показывать промежуточные результаты распознавания, что поможет вам понять, как VOSK обрабатывает звук.
* Добавьте обработку ошибок:
try:
data = stream.read(8000)
if len(data) == 0:
break

result = rec.Result() if rec.AcceptWaveform(data) else rec.PartialResult()
print(result)
except Exception as e:
print(f"Ошибка: {e}")

* Проверьте документацию VOSK: [https://alphacephei.com/vosk/](https://alphacephei.com/vosk/)

Пример исправленного кода:

from vosk import Model, KaldiRecognizer
import os
import pyaudio

model = Model(r"путь") # полный путь к модели
rec = KaldiRecognizer(model, 8000)
p = pyaudio.PyAudio()

stream = p.open(
format=pyaudio.paInt16,
channels=1,
rate=8000,
input=True,
frames_per_buffer=8000
)

stream.start_stream()

while True:
data = stream.read(8000) # Читаем 8000 байт аудиоданных

if len(data) == 0:
break

# Пробуем получить полный результат
if rec.AcceptWaveform(data):
print(rec.Result())
else:
# Выводим частичный результат, если полный пока недоступен
print(rec.PartialResult())

print(rec.FinalResult())


Важно:

* Проверьте правильность пути к модели VOSK.
* Убедитесь, что у вас установлены необходимые библиотеки: pyaudio и vosk.
* Попробуйте использовать другую модель VOSK, если проблема не решена.

Надеюсь, эта информация поможет вам исправить код и заставить VOSK работать!
Похожие вопросы