【中級者向け】M5Stack UnitV2 で音声認識【Julius】を動かす
2021/5にM5Stackから発売されたAIカメラUnitV2ですが、カメラ用途では使い勝手はいいのですが、音声認識の動かし方が分からず購入から1年半も経った頃やっと実現できました。かなりマニアックだとは思いますが、動かし方を記録しておきます。
もくじ(Index)M5Stack関連の目次へ戻る
実はマイク搭載なんです。
UnitV2はAIカメラとしても高性能ですが、、、実はマイクもあります。また、USB端子搭載版のUnitV2-USBであればUSBマイクかUSBオーディオアダプタを付けてマイクを付ければ認識します。(※すべての機器が対応しているかは保証できません。)
前提スキル
恐らく下記の知識が無いと詰みます。
- Linuxのコマンドでファイル操作
- Linuxのディレクトリ構造の理解
- Dockerのしくみと動かし方
- スクリプトを書き換える知識
- SCPでファイルコピー
- クロスコンパイルの概要を理解している
UnitV2の下準備
下記の記事を見て、作業しやすいようにSSHの設定等を行っておきます。パスワードの設定とSCPの設定を行っておけばよいです。
【中級者向け】M5Stack UnitV2をハックするためのTipsクロスコンパイルが必要なライブラリやアプリ
下記のものを母艦PCのLinux上でクロスコンパイルしUnitV2上に展開する必要があります。
- alsa-lib-1.2.8
- libiconv-1.17
- julius-4.3.1
クロスコンパイル環境の構築
ししかわさんのブログを参考にして、OpenCV4.4.0の環境を構築します。
今回は自分のGitHubの「julius」ブランチにDockerfileをまとめたのでこのフォルダをVSCodeで開きます。
環境
下記の環境でクロスコンパイル環境を作成しました。
- Ubuntu 22.04
- VSCode + Remote Development
- Docker 20.10.16
構築手順
①GitHubから環境をクローンする
~/workフォルダ上で作業すると仮定しています。
git cloneしてjuliusブランチをチェックアウトします。
mkdir ~/work
https://github.com/mongonta0716/UnitV2Framework-docker
cd UnitV2Framework-docker
git checkout julius
②VSCodeで開く
~/work/UnitV2Framework-dockerを開きます。右下にダイアログが出るので「ReOpen」を選択します。
すると、Dockerが起動してOpenCV4.4.0のビルドを始めます。これは環境によりますが30~1時間かかります。
コンパイル作業
Dockerfileでできるようにしたいところなのですが、私はDockerのスキルが無く今回は地道にやっています。下記のようにコンパイルしていきます。
必要なライブラリ、アプリのビルド
VSCode上のターミナルから実行します。
alsa-lib-1.2.8
alsa-libはunitv2上にありますが、Juliusのビルドに必要なのでコンパイルします。
mkdir ~/alsa
cd ~/alsa
wget wget http://www.alsa-project.org/files/pub/lib/alsa-lib-1.2.8.tar.bz2
tar xvf alsa-lib-1.2.8.tar.bz2
cd alsa-lib-1.2.8/
CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ ./configure --host=arm-none-linux-gnueabihf
make
sudo make install
iconv
iconvはJulius実行時に文字化けを防ぐために必要です。/external/unitv2_rootにインストールします。
sudo mkdir /external/unitv2_root
mkdir ~/iconv
cd ~/iconv
wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.17.tar.gz
tar xvf libiconv-1.17.tar.gz
cd libiconv-1.17/
CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ ./configure --prefix=/external/unitv2_root --host=arm-none-linux-gnueabihf
make
sudo make install
Julius
JuliusはUnitV2のストレージが小さい(512MB)のでバージョン4.3.1を利用します。こちらも/external/unitv2_rootにインストールします。
mkdir ~/julius
cd ~/julius
wget https://github.com/julius-speech/julius/archive/refs/tags/v4.3.1.tar.gz
tar xvf v4.3.1.tar.gz
cd julius-4.3.1/
CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ ./configure --prefix /external/unitv2_root --host=arm-none-linux-gnueabihf --enable-charconv=iconv --with-mictype=alsa
make
sudo make install
tarファイルで圧縮する
下記のように/external/unitv2_root配下のディレクトリを圧縮します。
cd /external/unitv2_root
sudo tar cvf julius_files.tar bin include lib man
sudo mv julius_files.tar /workspaces/UnitV2Framework-docker/
Juliusのdictation-kit-v4.1
UnitV2はストレージが512MBと少ないのでdictation-kitはv4.1をダウンロードします。UnitV2のLinuxはgunzipコマンドが無いので母艦PCでtarファイルにしておきます。
gunzip dictation-kit-v4.1.tar.gz
SSHでファイルを転送
scpでjulius_files.tarとdictation-kit-4.1.tarをUnitV2に転送します。
scp *.tar m5stack@10.254.239.1:/home/m5stack
Juliusのインストール
ここからはsshでUnitV2に接続して作業を行います。
ssh m5stack@10.254.239.1
dictation-kit-4.1.tar
/home/m5stack配下に解凍します。
cd ~
tar xvf dictation-kit-v4.1.tar
rm dictation-kit-v4.1.tar
julius_files.tar
UnitV2にsshで接続し、転送したファイルをルート上で解凍します。
sudo mv ~/julius_files.tar /
cd /
sudo tar xvf julius_files.tar
sudo rm julius_files.tar
Juliusの実行
dictation-kit-v4.1のフォルダ上で下記のコマンドを実行するとJuliusが起動します。
cd ~/dictation-kit-v4.1
sudo julius -C fast.jconf | iconv -f eucjp -t UTF-8
動いている様子
既知の不具合
メモリリークしているらしく、長く実行できません(爆)自分のスキルではまだまだ解消できないので今後頑張ります。(※ もし解決方法分かる方がいらっしゃったら教えてください。)
参考にしたブログや記事
- M5Stack UnitV2Frameworkをビルドする:ししかわの二足ロボ研修 Part.6
- CQ出版社・インターフェース2012/10 山本 隆一郎:実験!オープン・ソースの音声認識ライブラリ「Julius」
まとめ
駆け足ですが、このような流れでJuliusをUnitV2で動かし日本語の音声認識が可能なことが分かりました。今後もUnitV2を使いこんでいきたいと思います。