Переводчик на Raspberry Pi с распознаванием речи и воспроизведением (более 60 языков)
Оценка пользователей: / 10
ПлохоОтлично 
Translation Raspberry PiС очень небольшим усилием, мы можем превратить этот мини-компьютер в многофункциональный языковой переводчик, который не только поддерживает распознавание голоса и воспроизведение носителя языка.
Он также способен на динамическую трансляцию между 1000 языковыми парами, бесплатно! Даже если Вы не заинтересованы в создании именно такого инструмента перевода, есть еще много частей этого руководства, которые могут заинтересовать Вас (распознавание речи, преобразование текста в речь, API перевода от Microsoft/Google). Пост начинается из списка покупок, хотя большинство читателей, вероятно, уже имеет многие из этих предметов.
Список покупок
Translation Raspberry Pi-A
*Есть определенно более дешевые варианты USB-гарнитуры, но автор выбрал Logitech, потому что она удобна в использовании. Для альтернативы, просмотрите список для проверки, какие звуковые карты поддерживаются Raspberry Pi.
Предположения
Это руководство предполагает, что Ваш Raspberry Pi имеет:
  • установленную последнюю версию Raspian
  • подключение к Интернету
  • соответствующие драйверы звуковой карты для гарнитуры
Настройка и тестирование гарнитуры
Прежде чем мы начнем писать код, убедитесь, что можем записывать и воспроизводить звук с помощью нашей гарнитуры USB. Самый простой способ сделать это с помощью встроенных в Linux команд "arecord" и "aplay". Но сначала давайте убедимся, что наша файловая система находится в актуальном состоянии:
sudo apt-get update
sudo apt-get upgrade
Теперь, подключите наушники USB и выполните следующие команды:
cat /proc/asound/cards
cat /proc/asound/modules
Вы должны увидеть, что Logitech Headset указан как карта 1. Кроме того, вторая команда должна показать, что драйвер для карты 0 (выход по умолчанию raspberry pi) является snd_bcm2835 и драйвер для карты 1 (наш Logitech Headset) является snd_usb_audio:
Translation Raspberry Pi-1
Это проблема, потому что это показывает, что по умолчанию Raspberry Pi передает звук через свои встроенные аппаратные средства, и не имеет настроенного устройства ввода звука. Чтобы решить эту проблему, нам необходимо обновить ALSA (Advanced Linux Sound Architecture), чтобы использовать нашу гарнитуру по умолчанию для ввода и вывода звука. Это может быть сделано путем быстрого изменения в конфигурационном файле ALSA, который находится в /etc/modprobe.d/alsa-base.conf:
sudo nano /etc/modprobe.d/alsa-base.conf
Ближе к концу этого файла, измените строку, которая выглядит как
options snd-usb-audio index=-2
на
options snd-usb-audio index=0
Сохраните и закройте файл, перезагрузите Raspberry Pi с помощью следующей команды:
sudo reboot
После того, как система вернется в Интернет, звуковая система должна перезагрузиться, и когда мы повторно выполним приведенные выше команды...
cat /proc/asound/cards
cat /proc/asound/modules
...то должны увидеть, что теперь устройство ввода/вывода по умолчанию гарнитура USB (карта 0), как показано ниже:
Translation Raspberry Pi-2
Теперь мы можем проверить это с помощью записи 5 секундного клипа с микрофона:
arecord -d 5 -r 48000 daveconroy.wav
и воспроизвести его через динамики гарнитуры
aplay daveconroy.wav
Для настройки уровней можно использовать встроенную утилиту alsamixer. Этот инструмент обрабатывает как аудиовход, так и выходные уровни:
sudo alsamixer
Теперь, когда наша гарнитура настроена, мы можем перейти к следующему шагу преобразования речи в текст.
Речь в текст или распознавание речи с Raspberry Pi
Есть несколько вариантов для распознавания речи с RPI, но автор думал, что лучшее решение для этого урока то, которое использует сервис Google's Speech to Text. Эта услуга позволяет загрузить файл, который мы только что записали, и превратить его в текст (который мы позже будем использовать для перевода).
Давайте создадим для себя скрипт для обработки этого процесса:
sudo nano stt.sh
со следующим содержимым:
echo "Recording your Speech (Ctrl+C to Transcribe)"
arecord -D plughw:0,0 -q -f cd -t wav -d 0 -r 16000 | flac - -f --best --sample-rate 16000 -s -o daveconroy.flac;
 
echo "Converting Speech to Text..."
wget -q -U "Mozilla/5.0" --post-file daveconroy.flac --header "Content-Type: audio/x-flac; rate=16000" -O - "http://www.google.com/speech-api/v1/recognize?lang=en-us&client=chromium" | cut -d" -f12  > stt.txt
 
echo "You Said:"
value=`cat stt.txt`
echo "$value"
Сделайте его исполняемым:
sudo chmod +x stt.sh
Последний шаг перед тем, как запустить сценарий, это установить FLAC кодек, который не включен в стандартный образ Raspian:
sudo apt-get install flac
Теперь мы можем запустить скрипт::
./stt.sh
Он автоматически начинает запись голоса, просто нажмите Ctrl+C, когда начнете говорить. В этот момент сценарий загружает звуковой файл в Google, они транскрибируют его и возвращают, чтобы он мог отразиться на нашем экране. Впечатляющий результат лишь нескольких строчек кода! Пример вывода ниже:
Translation Raspberry Pi-3
Перевод от Microsoft и преобразование текста в речь от Google
Теперь, когда мы можем записывать свой ​​голос и преобразовывать его в текст, мы должны перевести его на желаемый нам иностранный язык. Автор хотел бы использовать инструмент Google’s Translate для этого, но, к сожалению, он требует 20$ оплаты за регистрацию, чтобы использовать этот API. Возможно, Вы купите его для себя, но автор хотел бы, чтобы этот проект был бесплатным и каждый имел возможность его попробовать.
Как альтернативу, мы будем использовать сервис Microsoft’s translate, который в настоящее время, по-прежнему, бесплатный для публичного использования. Список поддерживаемых языков и соответствующих кодов можно найти здесь. В нашем предыдущем примере мы использовали простой скрипт, но для процесса перевода и воспроизведения - автор статьи написал более мощный сценарий на python.
Весь этот код можно найти в его хранилище github.
Давайте сначала создадим файл:
sudo nano PiTranslate.py
и добавим следующее содержание:
import json
import requests
import urllib
import subprocess
import argparse
 
parser = argparse.ArgumentParser(description='This is a demo script by DaveConroy.com.')
parser.add_argument('-o','--origin_language', help='Origin Language',required=True)
parser.add_argument('-d','--destination_language', help='Destination Language', required=True)
parser.add_argument('-t','--text_to_translate', help='Text to Translate', required=True)
args = parser.parse_args()
 
## show values ##
print ("Origin: %s" % args.origin_language )
print ("Destination: %s" % args.destination_language )
print ("Text: %s" % args.text_to_translate )
 
text = args.text_to_translate
origin_language=args.origin_language
destination_language=args.destination_language
 
 
def speakOriginText(phrase):
    googleSpeechURL = "http://translate.google.com/translate_tts?tl="+ origin_language +"&q=" + phrase
    subprocess.call(["mplayer",googleSpeechURL], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 
def speakDestinationText(phrase):
    googleSpeechURL = "http://translate.google.com/translate_tts?tl=" + destination_language +"&q=" + phrase
    print googleSpeechURL
    subprocess.call(["mplayer",googleSpeechURL], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 
args = {
        'client_id': '',#your client id here
        'client_secret': '',#your azure secret here
        'scope': 'http://api.microsofttranslator.com',
        'grant_type': 'client_credentials'
    }
 
oauth_url = 'https://datamarket.accesscontrol.windows.net/v2/OAuth2-13'
oauth_junk = json.loads(requests.post(oauth_url,data=urllib.urlencode(args)).content)
translation_args = {
        'text': text,
        'to': destination_language,
        'from': origin_language
        }
 
headers={'Authorization': 'Bearer '+oauth_junk['access_token']}
translation_url = 'http://api.microsofttranslator.com/V2/Ajax.svc/Translate?'
translation_result = requests.get(translation_url+urllib.urlencode(translation_args),headers=headers)
translation=translation_result.text[2:-1]
 
speakOriginText('Translating ' + translation_args["text"])
speakDestinationText(translation)
Для запуска скрипта нам нужно импортировать несколько библиотек python и медиа-плеер:
sudo apt-get install python-pip mplayer
sudo pip install requests
Последнее, что нам нужно сделать, прежде чем мы сможем запустить сценарий, это зарегистрироваться для ключа Microsoft Azure Marketplace API. Чтобы сделать это, просто посетите marketplace, зарегистрируйте приложение, введите идентификатор клиента и секретный код доступа в сценарий выше.
Теперь мы можем запустить скрипт:
sudo python PiTranslate.py -o en -d es -t "hello my name is david conroy"
Сценарий имеет 3 необходимые входы:
  • -o язык оригинала
  • -d виходной язык
  • -t "текст для перевода"
Translation Raspberry Pi-4
Приведенная выше команда начинает с английского языка и переводит на испанский. Любимая часть автора о целом учебнике, как быстро Вы можете менять языки, на которых переводите, и как выходной голос изменяется в соответствии с исходным языком.
Собираем все вместе
На самом деле очень легко объединить два сценария, которые мы создали в этом учебнике. На самом деле, это займет всего одну строку кода, которая будет добавлена к нижней части скрипта stt.sh, который мы создали ранее (при условии, что PiTranslate.py и stt.sh находятся в одном каталоге):
sudo nano stt.sh
python PiTranslate.py -o en -d es -t "$value"
Для тех из Вас, кто перепрыгнул в этом уроке, вот опять весь сценарий с добавленной строкой:
echo "Recording your Speech (Ctrl+C to Transcribe)"
arecord -D plughw:0,0 -f cd -t wav -d 0 -q -r 16000 | flac - -s -f --best --sample-rate 16000 -o daveconroy.flac;
 
echo "Converting Speech to Text..."
wget -q -U "Mozilla/5.0" --post-file daveconroy.flac --header "Content-Type: audio/x-flac; rate=16000" -O - "http://www.google.com/speech-api/v1/recognize?lang=en-us&client=chromium" | cut -d" -f12  > stt.txt
 
echo "You Said:"
value=`cat stt.txt`
echo "$value"
 
#translate from English to Spanish and play over speakers
python PiTranslate.py -o en -d es -t "$value"
Теперь запустите сценарий преобразования речи в текст снова, и он переведет с английского на испанский по умолчанию:
./stt.sh
Измените оригинальный и выходной языки в последней строке, в соответствии с пожеланиями, и сценарий PiTranslate.py сделает все остальное! Существуют буквально 1000 языковых пар, которые здесь поддерживаются. Вот скриншот:
Translation Raspberry Pi-5
Демо-видео
Автор просит прощения, что видео немного неустойчиво, потому что было трудно держать гарнитуру у телефона при запуске сценариев:
(Источник EN: daveconroy.com)
 
>
КнигаНовости Практика поискаПартнерыО нас
Підтримка та дизайн: Могильний С.С. Шаблон: Joomla Templates by BuyHTTP Joomla Hosting