Open epigraphe opened 11 months ago
В процессе изысканий нашел, что астер пишет вот такую ошибку при выполнении скрипта
os.system("espeak -w /tmp/response22.wav \"" + text.encode('utf-8') + "\"") TypeError: can only concatenate str (not "bytes") to str " 1
Можно удалить encode('utf-8'), это для python2
os.system("espeak -w /tmp/response22.wav \"" + text + "\"")
Спасибо.
res_agi.c:3985 parse_args: too many arguments, truncating
- пересобрал res_agi c увеличением параметра MAX_ARGS
Блок с espeak убрал совсем, логику переделал, теперь озвучивает silero уже после всего.
Ранее распознавание работало так: что-то говоришь, потом пауза и происходило формирование json, который передавался на пунктуацию и далее отрабатывало по ivr.
Теперь распознавание работает таким образом: что-то говоришь, формируется json, текст отправляется, но воск не перестает работать, а снова начинает распознавать.
Есть ли возможность прервать распознавание по нажатию клавиши?
Есть вариант, например, для agi чтобы прервать воспроизведение, но я не могу прикрутить аналогичный вариант для остановки распознавания.
escape_digits = str(“#”)
pressed_digit=agi.stream_file(promptFile,escape_digits)
if pressed_digit == “#”:
sys.exit(0)
То есть, в итоге, я хочу получить продвинутый автоответчик, на который звонящий что-то наговорит, а адресат получит в текстовом виде.
В цикле после или перед
data = os.read(AUDIO_FD, 8000)
вставляем agi.get_data и проверяем dtmf, если появился, прерываем.
Вообще agi очень неповортливая штука, есть более новый интерфейс ARI:
https://github.com/alphacep/vosk-server/tree/master/client-samples/asterisk-ari
Хотя тоже не идеал. Вообще * бяка.
Спасибо, буду пробовать. Изначально хотел на vosk-asterisk, компилил его, но при попытках использования астер падает(
[ 2131.705735] asterisk[11383]: segfault at 0 ip 00007fe1869a1041 sp 00007fe18446b548 error 4 in libc-2.31.so[7fe18683f000+178000]
[ 2131.705754] Code: 01 0f 84 e2 03 00 00 0f 82 cc 03 00 00 49 89 d3 89 f8 31 d2 c5 c5 ef ff 09 f0 25 ff 0f 00 00 3d 80 0f 00 00 0f 8f ef 03 00 00 <c5> fe 6f 0f c5 f5 74 06 c5 fd da c1 c5 fd 74 c7 c5 fd d7 c8 85 c9
Поэтому работаю с этим)
Все-таки получилось перекомпилить vost-asterisk, но теперь возникла следующая проблема:
[2023-08-02 10:29:30] NOTICE[11118][C-00000005]: res_speech_vosk.c:81 vosk_recog_create: (vosk) Create speech resource ws://localhost:2700
[2023-08-02 10:29:30] WARNING[11118][C-00000005]: tcptls.c:656 ast_tcptls_client_start_timeout: Unable to connect websocket client to [::1]:2700: Connection refused
Сам сервер работает, тест test.py test.wav проходит. Прямое подключение работает.
python3 -m websockets "ws://localhost:2700"
Connected to ws://localhost:2700.
>
Веб открывается, ожидаемо пишет
Failed to open a WebSocket connection: invalid Connection header: keep-alive.
You cannot access a WebSocket server directly with a browser. You need a WebSocket client.
ufw нет, iptables пустой
iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[voice-recog]
exten = s,1,Answer
same = n,Wait(1)
same = n,SpeechCreate
same = n,SpeechBackground(hello)
same = n,Verbose(0,Result was ${SPEECH_TEXT(0)})
Подскажите, пожалуйста, что еще можно проверить?
Вместо localhost написать 127.0.0.1 в res_vosk.conf, а то он пытается по ipv6 соединяться.
Да, действительно. Затупил на ровном месте. Спасибо Вам большое, все заработало.
Доброго дня.
Eagi.py взял Ваш https://github.com/alphacep/vosk-server/blob/master/client-samples/asterisk/eagi.py с небольшими дополнениями в виде расстановки препинаков в субпроцессе и отправке результата в телеграмм.
Все настроил, все работает на маленьких объемах. ("Раз-два-три четыре и тому подобное на несколько строк" работает прекрасно, огромное Вам спасибо за поистине титанический труд)
Для теста попробовал наговорить в астериске большой объем текста
Сперва пролетает десятка три ошибок:
file.c:1696 waitstream_core: write() failed: Resource temporarily unavailable
Но при этом весь текст распознается нормально:
Если остановится на небольшом объеме - все происходит, как и расчитывалось.
Если продолжать говорить, то возникает ошибка:
Затем формируется финальный результат, но не формируется 'text'
/home/ubuntu/eagi.py: Result: {'result': [{'conf': 0.775454, 'end': 5.07, 'start': 4.35, 'word': 'возможности'}, {'conf': 1.0, 'end': 5.46, 'start': 5.07, 'word': 'и'}, {'conf': 0.870522, 'end': 6.15, 'start': 5.46, 'word': ' > ▒отрясают'}, {'conf': 1.0, 'end': 6.27, 'start': 6.15, 'word': 'но'}, {'conf': 0.983217, 'end': 6.63, 'start': 6.27, 'word': 'заменит'}, {'conf': 1.0, 'end': 6.72, 'start': 6.63, 'word': 'ли'}, {'conf': 1.0, 'end': 6.87, 'start': 6.72, 'word': 'он'}, {'conf': 1.0, 'end': 7.44, 'start': 6.87, 'word': 'человека'}, {'conf': 1.0, 'end': 7.62, 'start': 7.44, 'word': 'как'}, {'conf': 1.0, 'end': 7.74, 'start': 7.62, 'word': 'мы'}, {'conf': 1.0, 'end': 8.13, 'start': 7.74, 'word': 'писали'}, {'conf': 1.0, 'end': 8.4, 'start': 8.13, 'word': 'выше'}, {'conf': 0.863426, 'end': 8.429729, 'start': 8.4, 'word': 'в'}, {'conf': 1.0, 'end': 8.85, 'start': 8.429729, 'word': 'ближайшие'}, {'conf': 1.0, 'end': 9.15, 'start': 8.85, 'word': 'десять'}, {'conf': 1.0, 'end': 9.51, 'start': 9.15, 'word': 'двадцать'}, {'conf': 0.978394, 'end': 9.69, 'start': 9.51, 'word': 'лет'}, {'conf': 1.0, 'end': 10.14, 'start': 9.69, 'word': 'искусственный'}, {'conf': 1.0, 'end': 10.470732, 'start': 10.14, 'word': 'интеллект'}, {'conf': 0.839462, 'end': 10.53, 'start': 10.470732, 'word': 'по'}, {'conf': 1.0, 'end': 11.01, 'start': 10.53, 'word': 'прогнозам'}, {'conf': 0.938415, 'end': 11.43, 'start': 11.01, 'word': 'захватят'}, {'conf': 0.657692, 'end': 11.64, 'start': 11.43, 'word': 'треть'}, {'conf': 0.667419, 'end': 12.27, 'start': 11.64, 'word': 'профессий'}, {'conf': 1.0, 'end': 12.72, 'start': 12.33, 'word': 'мн▒ > гие'}, {'conf': 1.0, 'end': 12.93, 'start': 12.72, 'word': 'уже'}, {'conf': 0.655107, 'end': 13.439999, 'start': 12.93, 'word': 'беспокойно'}, {'conf': 1.0, 'end': 13.62, 'start': 13.44, 'word': 'столь'}, {'conf': 1.0, 'end': 14.1, 'start': 13.62, 'word': 'стрем▒
Потом опять ошибки _json.c:607 ast_jsonvpack: Error building JSON from как в примере Выше
Затем идет тонна
И затем вызов завершается
Подскажите, пожалуйста, с чем это может быть связано? Спасибо