Поиск оптимальной системы аудио распознавания речи с закрытым исходным кодом, но имеющими открытые API, для возможности интеграции. Google открыла доступ к Cloud Speech API, лежащей в основе Google Ассистента технологии распознавания речи

  • Asterisk ,
  • Google API ,
  • Яндекс API
  • Выбор API для распознавания речи

    Я рассматривал только вариант api, коробочные решения были не нужны, поскольку требовали ресурсы, данные для распознания не критичны для бизнеса, да и использование их существенно сложнее и требует больше человеко-часов.

    Первым был Yandex SpeechKit Cloud. Мне он сразу понравился простотой использования:

    Curl -X POST -H "Content-Type: audio/x-wav" --data-binary "@speech.wav" "https://asr.yandex.net/asr_xml?uuid=<идентификатор пользователя>&key=&topic=queries"
    Ценовая политика 400 рублей за 1000 запросов. Первый месяц бесплатно. Но после этого пошли только разочарования:

    На передачу большого предложения, приходил ответ из 2-3 слов
    - Распознавались эти слова в странной последовательности
    - Попытки изменения топика положительных результатов не принесли

    Возможно это было связано со средним качеством записи, мы все тестировали через голосовые шлюзы и древние телефоны panasonic. Пока планирую его в дальнейшем использовать для построения IVR.

    Следующим стал сервис от Google. Интернет пестрит статьями, в которых предлагается использовать API для разработчиков Chromium. Сейчас ключей для этого API уже так просто получить нельзя. Поэтому мы будем использовать коммерческую платформу.

    Ценовая политика - 0-60 минут в месяц бесплатно. Далее 0,006 $ за 15 секунд речи. Каждый запрос округляется к цифре кратной 15. Первые два месяца бесплатно, для создания проекта нужна кредитная карта. Варианты использования API в базовой документации разнообразны. Мы будем использовать скрипт на Python:

    Скрипт из документации

    """Google Cloud Speech API sample application using the REST API for batch processing.""" import argparse import base64 import json from googleapiclient import discovery import httplib2 from oauth2client.client import GoogleCredentials DISCOVERY_URL = ("https://{api}.googleapis.com/$discovery/rest?" "version={apiVersion}") def get_speech_service(): credentials = GoogleCredentials.get_application_default().create_scoped(["https://www.googleapis.com/auth/cloud-platform"]) http = httplib2.Http() credentials.authorize(http) return discovery.build("speech", "v1beta1", http=http, discoveryServiceUrl=DISCOVERY_URL) def main(speech_file): """Transcribe the given audio file. Args: speech_file: the name of the audio file. """ with open(speech_file, "rb") as speech: speech_content = base64.b64encode(speech.read()) service = get_speech_service() service_request = service.speech().syncrecognize(body={ "config": { "encoding": "LINEAR16", # raw 16-bit signed LE samples "sampleRate": 16000, # 16 khz "languageCode": "en-US", # a BCP-47 language tag }, "audio": { "content": speech_content.decode("UTF-8") } }) response = service_request.execute() print(json.dumps(response)) if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("speech_file", help="Full path of audio file to be recognized") args = parser.parse_args() main(args.speech_file)

    Подготовка к использованию Google Cloud Speech API

    Нам необходимо будет зарегистрировать проект и создать ключ сервисного аккаунта для авторизации. Вот ссылка для получения триала, необходим гугл-аккаунт. После регистрации необходимо активировать API и создать ключ для авторизации. После необходимо скопировать ключ на сервер.

    Перейдем к настройке самого сервера, нам необходимы будут:

    Python
    - python-pip
    - python google api client

    Sudo apt-get install -y python python-pip pip install --upgrade google-api-python-client
    Теперь нам необходимо экспортировать две переменных окружения, для успешной работы с апи. Первая это путь к сервисному ключу, вторая название вашего проекта.

    Export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service_account_file.json export GCLOUD_PROJECT=your-project-id
    Скачаем тестовый аудио файл и попытаемся запустить скрипт:

    Wget https://cloud.google.com/speech/docs/samples/audio.raw python voice.py audio.raw {"results": [{"alternatives": [{"confidence": 0.98267895, "transcript": "how old is the Brooklyn Bridge"}]}]}
    Отлично! Первый тест успешен. Теперь изменим в скрипте язык распознавания текста и попробуем распознать его:

    Nano voice.py service_request = service.speech().syncrecognize(body={ "config": { "encoding": "LINEAR16", # raw 16-bit signed LE samples "sampleRate": 16000, # 16 khz "languageCode": "ru-RU", # a BCP-47 language tag
    Нам необходим.raw аудио файл. Используем для этого sox

    Apt-get install -y sox sox test.wav -r 16000 -b 16 -c 1 test.raw python voice.py test.raw {"results": [{"alternatives": [{"confidence": 0.96161985, "transcript": "\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435 \u0412\u0430\u0441 \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f"}]}]}
    Гугл возвращает нам ответ в юникоде. Но мы хотим видеть нормальные буквы. Поменяем немного наш voice.py:

    Print(json.dumps(response))
    Мы будем использовать

    S = simplejson.dumps({"var": response}, ensure_ascii=False) print s
    Добавим import simplejson . Итоговый скрипт под катом:

    Voice.py

    """Google Cloud Speech API sample application using the REST API for batch processing.""" import argparse import base64 import json import simplejson from googleapiclient import discovery import httplib2 from oauth2client.client import GoogleCredentials DISCOVERY_URL = ("https://{api}.googleapis.com/$discovery/rest?" "version={apiVersion}") def get_speech_service(): credentials = GoogleCredentials.get_application_default().create_scoped(["https://www.googleapis.com/auth/cloud-platform"]) http = httplib2.Http() credentials.authorize(http) return discovery.build("speech", "v1beta1", http=http, discoveryServiceUrl=DISCOVERY_URL) def main(speech_file): """Transcribe the given audio file. Args: speech_file: the name of the audio file. """ with open(speech_file, "rb") as speech: speech_content = base64.b64encode(speech.read()) service = get_speech_service() service_request = service.speech().syncrecognize(body={ "config": { "encoding": "LINEAR16", # raw 16-bit signed LE samples "sampleRate": 16000, # 16 khz "languageCode": "en-US", # a BCP-47 language tag }, "audio": { "content": speech_content.decode("UTF-8") } }) response = service_request.execute() s = simplejson.dumps({"var": response}, ensure_ascii=False) print s if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("speech_file", help="Full path of audio file to be recognized") args = parser.parse_args() main(args.speech_file)


    Но перед его запуском нужно будет экспортировать ещё одну переменную окружения export PYTHONIOENCODING=UTF-8 . Без неё у меня возникли проблемы с stdout при вызове в скриптах.

    Export PYTHONIOENCODING=UTF-8 python voice.py test.raw {"var": {"results": [{"alternatives": [{"confidence": 0.96161985, "transcript": "Здравствуйте Вас приветствует компания"}]}]}}
    Отлично. Теперь мы можем вызывать этот скрипт в диалплане.

    Пример Asterisk dialplan

    Для вызова скрипта я буду использовать простенький диалплан:

    Exten => 1234,1,Answer exten => 1234,n,wait(1) exten => 1234,n,Playback(howtomaketicket) exten => 1234,n,Playback(beep) exten => 1234,n,Set(FILE=${CALLERID(num)}--${EXTEN}--${STRFTIME(${EPOCH},%d-%m-%Y--%H-%M-%S)}.wav) exten => 1234,n,MixMonitor(${FILE},/opt/test/send.sh [email protected] "${CDR(src)}" "${CALLERID(name)}" "${FILE}") exten => 1234,n,wait(28) exten => 1234,n,Playback(beep) exten => 1234,n,Playback(Thankyou!) exten => 1234,n,Hangup()
    Я использую для записи mixmonitor и после окончания запускаю скрипт. Можно использовать record и это, пожалуй, будет лучше. Пример send.sh для отправки - он предполагает, что у вас уже настроен mutt:

    #!/bin/bash #скрипт для отправки уведомлений # экспортируем необходимые переменные окружения # файл лицензии гугла export GOOGLE_APPLICATION_CREDENTIALS=/opt/test/project.json # название проекта export GCLOUD_PROJECT=project-id # кодировка для питона export PYTHONIOENCODING=UTF-8 #список переменных на входе EMAIL=$1 CALLERIDNUM=$2 CALLERIDNAME=$3 FILE=$4 # перекодируем звуковой файл в raw для того, чтобы отдать его гугл апи sox /var/spool/asterisk/monitor/$FILE -r 16000 -b 16 -c 1 /var/spool/asterisk/monitor/$FILE.raw # присваиваем переменной значение выполненного скрипта по конвертации звука в текст и обрезаем не нужное TEXT=`python /opt/test/voice.py /var/spool/asterisk/monitor/$FILE.raw | sed -e "s/.*transcript"://" -e "s/}]}]}}//"` # отправляем письмо, включаем в письмо распознанный текст echo "новое уведомление от номера: $CALLERIDNUM $CALLERIDNAME $TEXT " | mutt -s "Это заголовок письма" -e "set [email protected] realname="я присылаю оповещения"" -a "/var/spool/asterisk/monitor/$FILE" -- $EMAIL

    Заключение

    Таким образом мы решили поставленную задачу. Надеюсь кому-то пригодится мой опыт. Буду рад комментариям (пожалуй только ради этого и стоит читать Хабр!). В будущем планирую реализовать на основе этого IVR с элементами голосового управления.

    Google Speech API - сервис распознавания голоса Google.

    Распознавание речи позволяет создавать системы автоматического обслуживания клиентов в тех случаях, когда не применимо управление с помощью тонального набора. В качестве примера можно рассмотреть сервис бронирования авиабилетов, который подразумевает выбор их большого числа городов. Тональное меню в таком сервисе не удобно, поэтому голосовое управление будет самым эффективным. Диалог между системой и абонентом может выглядеть следующим образом:

    Система: Здравствуйте. Куда вы хотите лететь? Абонент: Казань Система: Откуда вы хотите лететь? Абонент: Москва Система: Назовите дату вылета Абонент: 10 апреля
    • Голосовой навигации в многоуровневых меню IVR и автоматического соединения с нужным сотрудником
    • Распознавания адреса для доставки
    • Автоматической голосовой аутентификации пользователей при запросе персонализированной или конфиденциальной информации по телефону или через интернет
    • Справочной системы информационного обслуживания
    • Корпоративной системы голосового самообслуживания клиентов (запрос баланса, проверка лицевого счета, бронирование билетов)

    Система распознавания речи, как правило, состоит из следующих частей:

    • Запись сообщения от абонента
    • Распознавание голоса и прием текстовых данных от сервиса
    • Анализ полученной информации и выполнение необходимых действий

    Для использования Google Speech API в вашей системе выполните следующие действия:

    Шаг 1. Скачайте и импортируйте сценарии в вашу систему Oktell .

    Скачать сценарий: (для версий Oktell старше 2.10)

    В архиве располагаются два сценария:

    После импорта сценариев в Oktell , сохраните их "На сервер "

    ВНИМАНИЕ: Google Speech API - это платный продукт. В сценарии (компонент Web-запроса GoogleVoice ) используется пробный ключ, который может быть заблокирован в следствие определенного числа запросов. При тестах максимальное количество запросов не обнаружено. Если вы хотите приобрести платную версию Google Speech API обратитесь в поддержку Google.

    Шаг 2. В модуле "Администрирование " - "Внутренние номера " добавьте внутренний номер с типом "Запуск IVR ". Выберите IVR-сценарий Google_Speech_API_main .

    Вот информация из Интернета с сайта vorabota.ru :

    Чтобы приступить к преобразованию голоса в текст, понадобится микрофон (в ноутбуках он встроенный), желательна хорошая скорость интернет соединения и браузер Google Chrome не ниже 25 версии. В других браузерах функция голосового набора текстов, к сожалению, не работает.

    Запустите страницу для ввода текста голосом в браузере Chrome. Внизу окна выберите язык, на котором Вы планируете диктовать текст. Нажмите на иконку микрофона в верхнем правом углу. И в всплывшей строке нажмите кнопку «разрешить» использование браузером микрофона.

    Теперь Вы можете не спеша и четко наговаривать недлинные фразы. После завершения диктовки текста голосом его можно выделить и при помощи комбинации клавиш Ctrl+C скопировать в буфер обмена, а затем вставить в любой редактор для обработки. При желании текст можно сразу отправить по электронной почте.

    Пожалуй, Web Speech API – самый простой и довольно качественный способ преобразовать свою речь в текст. Так как не надо отвлекаться на какие-то дополнительные манипуляции с клавиатурой. Просто включил микрофон и говори текст.

    В любом случае придется использовать какой-нибудь дополнительный текстовый редактор для дальнейшей корректировки надиктованного текста.

    Запустил в браузере Google Chrome страницу http://vorabota.ru/voice/text.html и опробовал голосовой ввод текста. Зачитал фразу «Web Speech API Голосовой набор текста. Выделить всё. Отправить Email «, а получил «Websphere api голосовой набор текста выделить все отправить email «. Вторая попытка: «Нажмите кнопку разрешить, чтобы включить микрофон » — «Нажмите кнопку разрешить чтобы включить микрофон «.

    Сравнение исходной фразы и результата показывает, что: а) русская фраза преобразуется в русский текст достаточно качественно; б) английская фраза преобразуется в английский текст с ошибками, которые легко скорректировать; в) требуется обязательная корректировка текста с исправлением ошибок и с расстановкой знаков препинания и заглавных букв; г) отличие этой реализации Голосового набора текста от других, доступных в Интернете, в предельной простоте: в ней нет ничего лишнего, что облегчает освоение и использование.

    Мой вывод таков: имеет смысл подобным образом реализовать Голосовой ввод текста на своём сайте, чтобы облегчить ввод текста на страницы сайта.

    Надо всего лишь вставить на соответствующую страницу сайта необходимый код.

    Создал отдельную страницу , предназначенную только для Голосового ввода текста , и начал её отладку.

    Вот код страницы Диктуем текст :

    Код в отладке…

    Можете использовать приведенный код на своём сайте, преобразовав его так, как сочтёте нужным.

    Приглашаю всех высказываться в

    Сейчас без компьютера просто нереально обойтись в современном мире. От вас не требуется быть мастером фотошопа или профессионально монтировать видео (если это не связано с работой, конечно). Но суметь набрать какой-нибудь текст – это необходимый минимум.

    №2. Web Speech API


    Онлайн-программа Web Speech API по функционалу абсолютно идентична предыдущим.

    Этот сервис, как и перечисленные выше, также был создан компанией Google.

    Главная страница выглядит так:


    В простом интерфейсе сразу очевидно, что для начала записи необходимо выбрать язык, а после нажать на микрофон.

    После того как вы нажмете на значок справа, система обязательно сделает запрос на доступ.


    После того как вы «дадите добро», можно сразу приступать к работе. Набирайте текст голосом, а его печатная версия будет появляться в окошке.

    После окончания работы текст можно скопировать туда, куда вам необходимо (опять же таки – ctrl+C, ctrl+V).

    №3. Talktyper

    Не менее простая программа – это Talktyper.

    Для начала работы перейдите на сайт: https://talktyper.com/ru/index.html.


    Для начала работы достаточно нажать на значок микрофона справа.

    В отличие от описанных выше, данный наборщик текста можно открывать с помощью любого браузера. Хотя сайт создан в США, приложение легко распознает самые популярные языки мира, в том числе и русский.

    Talktyper многофункциональный: он не только набирает текст, но и ставит знаки препинания, исправляет самостоятельно ошибки. Если какое-то начитанное вами слово система не может распознать, как правильное, то оно обязательно высветится.

    Кроме того, Talktyper имеет функцию перевода, а также его озвучивания.

    Обратите внимание! После того как вы закончите голосовой набор текста, обязательно нажмите на стрелочку, чтобы набранный документ был перенесен в другое поле. После этого его можно будет отправить по электронной почте или скопировать в нужный файл.

    Возможные проблемы при работе с программами голосового набора

    Когда вы начнете использовать эти программы, то обязательно задумаетесь, как же компьютер распознает наш голос, а после еще переводит в живой текст.

    Схема распознавания речи устройством выглядит так:

    Весь процесс можно разделить на 3 главных этапа:

      Акустический распознаватель.

      Важно говорить четко, громко, микрофон должен передавать голос без перебоев.

      Лингвистическая обработка.

      Чем больше в словаре программы есть слов, тем качественнее будет набранный текст. То есть, все вами сказанное будет опознаваться и передаваться в текстовом виде без искажения.

      Распознанный орфографический текст.

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

    При работе с компьютерными наборщиками текста чаще всего возникает 2 проблемы:

    1. Акустический распознаватель «улавливает» вашу речь с перебоями.
    2. В словаре системы недостаточно слов, чтобы распознать всё, сказанное вами.

    Чтобы решить первую проблему, необходимо четко и громко говорить. А вот для второй проблемы решения практически не существует, по крайней мере, бесплатного.

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

    Чтобы обеспечить программе обширный запас слов разработчикам требуется вложить немало денег, поэтому многие распознаватели демонстрируют низкий уровень перевода речи в текст.

    Дальше всех в этом деле продвинулась компания Google, т.к. имеет достаточно средств для инвестиций. Эта компания, кроме прочего, создала самый большой онлайн-словарь, который помогает распознавать голос и переводить его в графическую версию.

    Смотрите подробное руководство в этом ролике:

    1. Когда вы произносите речь, в комнате должно быть тихо. Звуки природы, музыка, плач ребенка воспринимаются системой, как шум. Из-за этого текст будет набран с большими ошибками.
    2. Не говорите, если что-то едите. Это не только скажется на качестве набора, но и опасно для жизни к тому же.
    3. Перед началом работы нужно подобрать правильную громкость вашего голоса, а также понять какая чувствительность у вашего микрофона.

      Для этого попробуйте записать несколько предложений привычным тоном. Если в записи будут перебои, обратитесь к настройкам микрофона.

    4. Делайте небольшие паузы между словами.
    5. Избегайте длинных фраз.

    Кто-то скажет, что программа для голосового набора – это прекрасный помощник, который освободил им руки и облегчил жизнь в целом. Другие решат, что «овчинка выделки не стоит». Потому выбрать, стоить ли их использовать, вам предстоит самостоятельно.

    А уж из каких сервисов выбирать, вы уже знаете…

    С этого дня независимые разработчики получили доступ к Cloud Speech API, технологии распознавания речи, на которой основаны продукты Google. Продукт, получивший обновление, теперь доступен в Google Cloud.

    Открытая бета-версия Cloud Speech была выпущена прошлым летом. Эта технология с простым API позволяет разработчикам преобразовывать аудио в текст. Модели нейронной сети могут распознавать более 80 языков и диалектов, а готовая транскрипция появляется сразу после проговаривания текста.

    API построен на базе технологии, которая обеспечивает функцию распознавания речи в Google Assistant, Search и Now, однако в новой версии были внесены изменения для адаптации технологии под нужды пользователей Cloud.

    Чем отличается новая версия Cloud Speech API?

    Благодаря отзывам разработчиков команда Google смогла повысить точность транскрипции продолжительных аудиозаписей и ускорить процесс обработки данных в 3 раза по сравнению с первоначальной версией. Также была добавлена поддержка других аудиоформатов, включая WAV, OPUS и Speex.

    По статистике, раньше этот API использовался чаще всего для управления приложениями и устройствами с помощью голосового поиска, речевых команд и голосового меню. Но Cloud Speech может быть использован в совершенно разных IoT-устройствах, включая автомобили, телевизоры, колонки и, конечно, телефоны и ПК.

    Среди частых случаев применения технологии стоит отметить её использование в организациях для анализа работы колл-центров, отслеживания общения с клиентами и повышения продаж.