【中級者向け】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

動いている様子

既知の不具合

メモリリークしているらしく、長く実行できません(爆)自分のスキルではまだまだ解消できないので今後頑張ります。(※ もし解決方法分かる方がいらっしゃったら教えてください。)

参考にしたブログや記事

まとめ

駆け足ですが、このような流れでJuliusをUnitV2で動かし日本語の音声認識が可能なことが分かりました。今後もUnitV2を使いこんでいきたいと思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です