【Raspberry Pi5】pythonでazure Speech SDK を利用してみる

azure-cognitiveservices-speechをpythonで利用してみる。

最新のazure-cognitiveservices-speech 1.38.0ではlinuxでopenssl3に対応したとあるが、Raspberry Piでは普通に使えなかったのでlibssl1.1をインストールする必要があった。

1.40.0では修正された?

ちなみに※32bitだとazure-cognitiveservices-speechがインストールできなかった。

環境

項目コマンド
OSDebian GNU/Linux 12 (bookworm)lsb_release -a
bitLinux raspberrypi 6.6.31+rpt-rpi-2712 #1 SMP PREEMPT Debian 1:6.6.31-1+rpt1 (2024-05-29) aarch64 GNU/Linuxuname -a

Debian 12で利用するために必要なライブラリーをインストール

AzureではOSによって追加でインストールが必要がものがある

公式ではlibssl-devとあったがそれではopenssl3がインストールされ、動作しなかったのでlibssl1.1をインストールする。

今後ラズパイのarm64でもlibssl-devで動作するようになるかもしれない。

sudo apt-get update
sudo apt-get install build-essential libssl1.1 ca-certificates libasound2 wget

pyenvをインストール

直接関係ないがpythonのバージョンを管理したいのでpyenvをインストールする。

  • pyenvに必要なライブラリーをインストール

suggested-build-environmentからdebian系のOSなのでpyenvに必要なライブラリーをインストール

sudo apt update
sudo apt install build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev curl git libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
  • git cloneでpyenvを取得
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
  • ~/.bashrcに起動設定を記載
vi ~/.bashrc
// 最後に
export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

もじくはechoで登録

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
  • 変更を反映pyenv確認
source ~/.bashrc
pyenv -v

pyenvでpythonをインストール

  • インストールできるpythonを確認
pyenv install --list
// ある程度表示を制限する場合
pyenv install --list | grep 3.12
  • インストール
pyenv install 3.12.4

デフォルトのpython設定、pythonのアンインストール

// systemのpythonを利用
pyenv global system
// グローバル設定としてpyenvのpythonを利用
pyenv global 3.12.4
// インストールしたpythonを削除
pyenv uninstall 3.12.4

pythonの環境

python 11以降は仮想環境を利用しないとpipのインストールなどできないようなのでvenvを利用して仮想環境を作成する

  • 仮想環境の作成
python -m venv 【仮想環境名】
python -m venv .venv
  • 仮想環境のアクティベート
source .venv/bin/activate
  • 仮想環境終了
deactivate

仮想環境にpyenvのpythonのバージョンを使うようにする

pyenvの設定を3.12.4にしたがその前に仮想環境を構築したのでsystemのpython 3.11.2が使われてしまっている。

  • 仮想環境のクリア※必ず仮想環境を終了させておく
deactivate
python -m venv 【仮想環境名】 --clear
python -m venv .venv --clear

azure-cognitiveservices-speechのインストール

source 【仮想環境名】/bin/activate
source .venv/bin/activate

で仮想環境に入っておく。

pip install azure-cognitiveservices-speech

インストール時のエラー

  • もしかしたらOSが32bitの可能性があるので64bitOSを入れなおす
ERROR: Could not find a version that satisfies the requirement azure-cognitiveservices-speech (from versions: none)
ERROR: No matching distribution found for azure-cognitiveservices-speech
  • PEP 668に準拠出来ていない、おそらく仮想環境に作成してインストールする
hint: See PEP 668 for the detailed specification.
  • X-ConnectionId SessionIdのエラー
Error details: Connection failed (no connection to the remote host). Internal error: 1. Error details: Failed with error: WS_OPEN_ERROR_UNDERLYING_IO_OPEN_FAILED
wss://japanwest.stt.speech.microsoft.com/speech/universal/v2
X-ConnectionId: eb8f10020e1145d4a19881f1d622e44e SessionId: eb8f10020e1145d4a19881f1d622e44e

opensslが3になっているのでopenssl1.1.1をインストールすること。

azure-cognitiveservices-speechを動かす準備

マイクを確認

基本的に何もしなくても問題なく利用できた。

うまくいかない場合

/etc/modprobe.d/alsa-base.conf

を新規作成or編集してusbマイクの優先度を変えるとあったがうまくいかなかったので

pythonのazureを利用するときにデバイスを明示してみる。

おそらくpythonでazureの音声認識を利用するときは

audio_config = speechsdk.audio.AudioConfig(use_default_microphone=True)

このような指定をしているので明示的にデバイスを指定する。

arecord -l
**** ハードウェアデバイス CAPTURE のリスト ****
カード 3: Microphone [USB Microphone], デバイス 0: USB Audio [USB Audio]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0

カード3のデバイス0なので

audio_config = speechsdk.audio.AudioConfig(device_name="hw:3,0") 

のように明示的に指定する。

おわりに

アーキテクチャが普通と違ったのか情報通りにいかなかったが無事に利用することができた。

音声認識を使っていろいろやってみたい。

コメント