azure-cognitiveservices-speechをpythonで利用してみる。
最新のazure-cognitiveservices-speech 1.38.0ではlinuxでopenssl3に対応したとあるが、Raspberry Piでは普通に使えなかったのでlibssl1.1をインストールする必要があった。
ちなみに※32bitだとazure-cognitiveservices-speechがインストールできなかった。
環境
項目 | コマンド | |
OS | Debian GNU/Linux 12 (bookworm) | lsb_release -a |
bit | Linux raspberrypi 6.6.31+rpt-rpi-2712 #1 SMP PREEMPT Debian 1:6.6.31-1+rpt1 (2024-05-29) aarch64 GNU/Linux | uname -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")
のように明示的に指定する。
おわりに
アーキテクチャが普通と違ったのか情報通りにいかなかったが無事に利用することができた。
音声認識を使っていろいろやってみたい。
コメント