alphacep / vosk-asterisk

Speech Recognition in Asterisk with Vosk Server
GNU General Public License v2.0
102 stars 40 forks source link

Распознавание идет только 20 секунд #39

Closed epigraphe closed 6 months ago

epigraphe commented 1 year ago

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

Вопрос № 13 читал, [res_http_websocket.c:] пересобрал отдельно из последнего астериска.

Гугление не дает вообще ничего, в 13 вопросе никакой информации так и не появилось(

 {
      "conf" : 1.000000,
      "end" : 18.060000,
      "start" : 17.520000,
      "word" : "один"
    }, {
      "conf" : 1.000000,
      "end" : 18.720000,
      "start" : 18.180000,
      "word" : "один"
    }, {
      "conf" : 1.000000,
      "end" : 19.350000,
      "start" : 18.870000,
      "word" : "один"
    }, {
      "conf" : 1.000000,
      "end" : 20.160000,
      "start" : 19.710000,
      "word" : "один"
    }],
  "text" : "один один один один один один один один один один один один один один один один один один один один один один один один один один один один"
}'
[2023-08-04 09:29:17] NOTICE[21731][C-00000054]: res_speech_vosk.c:175 vosk_recog_write: (vosk) Recognition result: один один один один один один один один один один один один один один один один один один один один один один один один один один один один
epigraphe commented 1 year ago

Подскажите, пожалуйста, хоть в какую сторону думать? Может буфер какой-то увеличить или в астере что-то поменять? https://www.voip-info.org/forum/threads/vosk-free-stt-speech-to-text-server.26680/post-167418 Ставилось по этой инструкции этим скриптом, может чего-то там неправильно стоит?

nshmyrev commented 1 year ago

Так по умолчанию и должно быть. asterisk speech API только на одну фразу работает, в основном разработано для IVR. Для потокового распознавания можно ARI использовать, пример в vosk-server есть.

epigraphe commented 1 year ago

А нельзя просто увеличить это время до 30 секунд?

SpeechDestroy()

This destroys the information used by all the other speech recognition applications. If you call this application but end up wanting to recognize more speech, you must call SpeechCreate again before calling any other application. It takes no arguments.

Вот это не сработает?

epigraphe commented 1 year ago

Я извиняюсь за настырность, но я спросил на форуме астериска, и они говорят следующее:

I don’t know what that output is, I assume vosk which I can’t really comment on. I don’t think there is anything otherwise within the Asterisk speech API that would cause such a thing.

nshmyrev commented 1 year ago

В model.conf добавить

--endpoint.rule5.min-utterance-length=30.0

и будет 30 вместо 20.

epigraphe commented 1 year ago

К сожалению - не помогло. }, { "conf" : 1.000000, "end" : 20.130000, "start" : 19.770000, "word" : "два" }], Так и заканчивается без ошибок ровно на 21 секунде

nshmyrev commented 6 months ago

Сессию может SIP закрывать, надо проверять в логах, что вызвало таймаут.

В целом, та же проблема, что и https://github.com/alphacep/vosk-asterisk/issues/13