Распознавание речи на Bash

в 10:36, , рубрики: bash, Google API, lame, linux, sox, будущее здесь, распознование голоса, метки: , , ,

Здравствуй, Уважаемый %username%.

Небольшое введение

В данной статье я хотел бы рассказать вам о распознавании голоса, написанном на таком языке программирования как Bash. В качестве OC я выбрал Ubuntu 12.04

Ближе к теме

Распознавание голоса будет осуществляться сервисом Google, который используется в браузере Google Chrome для голосового поиска. Приступим?

Алгоритм работы

  1. Записываем звуковой файл speech.wav длиной в 3 секунды с рейтом 16 мГц
  2. Конвертируем speech.wav в speech.flac (лишь такой формат умеет принимать Google)
  3. Отправляем Google speech.flac, представившись браузером Google Chrome
  4. Получаем ответ вида:
    {"status":0,"id":"37h03bf4efe17fa76594732d6dokf3-1","hypotheses":[{"utterance":"раз два три","confidence":0.75936891}]}
    раз два три — распознанный текст
    0.75936891 — достоверность распознавания (если данное значение больше 0.5, то распознавание считается достоверным)
  5. Вычленяем значения utterance и confidence в отдельные переменные и выводим их на экран
Реализация

  1. Создаём файл speech.sh следующего содержания (код с комментариями):
    #!/bin/bash
    echo "Начинается запись..."
    arecord -d 3 -q -f cd -r 16000 speech.wav # Записываем звуковой файл speech.wav длиной в 3 секунды с рейтом 16 мГц
    echo "Запись закончена"
    sox speech.wav speech.flac gain -n -5 silence 1 5 2% # Конвертируем speech.wav в speech.flac
    rm speech.wav # Удаляем speech.wav, т.к. он нам уже не требуется
    echo "Анализ голоса..."
    wget -q -U "Mozilla/5.0" --post-file speech.flac --header="Content-Type: audio/x-flac; rate=16000" -O - "http://www.google.com/speech-api/v1/recognize?lang=ru-RU&client=chromium" > all.ret # Отправляем Google speech.flac, представившись браузером Google Chrome и полученный ответ сохраняем в файл all.ret
    rm speech.flac # Удаляем speech.flac, т.к. он нам уже не требуется
    cat all.ret | sed 's/.*utterance":"//' | sed 's/","confidence.*//' > text.txt # Вычленяем значение utterance в файл text.txt
    cat all.ret | sed 's/.*confidence"://' | sed 's/}]}.*//' > confidence.txt # Вычленяем значение confidence в файл confidence.txt
    rm all.ret # Удаляем all.ret, т.к. он нам уже не требуется
    TEXT="$(cat text.txt)" # Переменной TEXT присваиваем содержимое файла text.txt 
    CONFIDENCE="$(cat confidence.txt)" # Переменной CONFIDENCE присваиваем содержимое файла confidence.txt
    rm text.txt # Удаляем text.txt, т.к. он нам уже не требуется
    rm confidence.txt # Удаляем confidence.txt, т.к. он нам уже не требуется
    echo $TEXT # Выводим значение переменной TEXT
    echo $CONFIDENCE # Выводим значение переменной CONFIDENCE
    
  2. Закачиваем через консоль необходимые пакеты:
    sudo apt-get install lame
    sudo apt-get install sox
  3. Устанавливаем через консоль файлу speech.sh права на запуск:
    sudo chmod 755 speech.sh

Ну а теперь можно запустить наш скриптик и проверить его работоспособность консольной командой:
./speech.sh

Как это всё выглядит у меня:
Распознавание речи на Bash

Итого

И так, подведём итоги: распознавание голоса не такая уж и «нереальность». Умелый человек с прямыми сможет найти полезное применение. К примеру, на его основе я создаю «Умный дом» с голосовым управлением.

До скорых встреч, %username%.

Автор: AnthonyCherepkov

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js