Teachable Machineで機械学習のモデルを作って、RaspberryPiとTensorFlow Liteで音声分類してみる

RaspberryPiとPythonで機械学習を使った音声分類をしてみたいということで、TensorFlow のサンプルコードを試してみましたメモ。

Raspberry Pi OS インストール

まず、Raspberry Piをセットアップします。今回は Raspberry Pi 4 Model B / 8GB を使いました。

  1. パソコンからRaspberry Pi OS – Raspberry Pi のサイトにアクセスして、Raspberry Pi Imagerをダウンロードする。
  2. Raspberry Pi をインストールするmicroSDカードをパソコンに挿しこむ。
  3. Raspberry Pi Imagerを起動して、「Raspberry Pi OS (64-bit)」を選択。
  4. ストレージにSDカードを指定して、「書き込む」を実行する。
  5. 書き込みが終了したら、SDカードをRaspberry Piに挿して起動する。

Raspberry Pi 初期設定

Raspberry Piを起動したら、GUI画面の指示に従って「言語」や「キーボード」、「Wifi接続」や「アップデート」などの初期設定をひと通り行います。

USBマイク設定

Pythonで音声をラズパイに取得するためにはUSBマイクを使います。

今回使ったのはAmazonでポチったこんな↓感じの小型マイクです。ただこのマイク、値段もかなりお手頃なのですが、使ってみると音質は限りなくイマイチだったので、動作検証用と割り切ったほうが良さそうです。ちゃんと音声分類をやる時にはもう少し音質の良さそうなマイクを使おうと思います。

さておき、USBマイクはラズパイに挿しこむだけで認識されます。

$ lsusb
: 
Bus 001 Device 006: ID 8086:0808 Intel Corp. USB PnP Sound Device
: 

音声デバイスとして認識していることも確認します。

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

録音できることも確認します。録音停止はCtrl+Cです。

$ arecord test.wav
録音中 WAVE 'test.wav' : Unsigned 8 bit, レート 8000 Hz, モノラル
^Cシグナル 割り込み で中断...

/home/(user)/ 下にwavファイルが生成されるので、実行して録音した音声を確認してみます。

$ aplay test.wav
再生中 WAVE 'test.wav' : Unsigned 8 bit, レート 8000 Hz, モノラル

Pythonのバージョン確認

Raspberry Pi OSには標準でPythonがインストールされています。一応バージョンを確認しておきます。

$ pip -V
pip 20.3.4 from /usr/lib/python3/dist-packages/pip (python 3.9)
$ python -V
Python 3.9.2

libportaudio2 パッケージのインストール

Portable audio I/O – shared library(オーディオI/Oライブラリ)をインストールします。

$ sudo apt install libportaudio2

サンプル環境を構築

TensorFlow Examplesからサンプルコードを取得します。

$ git clone https://github.com/tensorflow/examples.git --depth 1

サンプルの中にあるTensorFlow Lite Python audio classification example with Raspberry Pi.のディレクトリに移動します。

$ cd examples/lite/examples/sound_classification/raspberry_pi

ここでセットアップ sh setup.sh を実行すれば必要なパッケージがインストールされるのですが、インストールされた tflite-support のバージョンが0.4.1ではサンプルコードがうまく動かず、結局0.4.0に指定し直す必要がありました。ここ、一番てこずりました。※2022年6月17日現在
Pythonの環境で使われるパッケージの名前とバージョンの一覧が記載されている requirements.txt を以下のように編集します。また、途中でエラーが出たのでprotobufもバージョンを指定して追加しました。

- tflite-support>=0.4.0
+ tflite-support==0.4.0
+ protobuf==3.20.*

そしてセットアップを実行すると、諸々のパッケージがインストールされます。

$ sh setup.sh

path の設定

PATHに/home/{user}/.local/bin を追加します。/home/{user}/ の部分はホームディレクトリです。

$ vi ~/.bashrc
+ export PATH=$PATH:/home/{user}/.local/bin
$ source ~/.bashrc
$ echo $PATH

サンプルの分類を実行してみる

$ python classify.py

動きました!

TeachableMachine で作成した機械学習モデルをラズパイで使う

今度は、自分で作成した機械学習モデルを使ってみましょう。

まず、TeachableMachineで機械学習モデルを作成したら、「TensorFlow Lite」形式でラズパイにダウンロードします。TensorFlow Liteというのは、モバイル端末やIoTデバイス等のエッジコンピューティングな環境で軽量高速にモデルを実行できるようにするためのフォーマット及び実行環境です。

ダウンロードされた converted_tflite.zip を解凍して、以下2つのファイルを適当な場所に置きます。

  • soundclassifier_with_metadata.tflite
  • labels.txt

tfliteファイルの場所を –model オプションで指定して、classify.pyを実行します。

$ python classify.py --model soundclassifier_with_metadata.tflite

フォントの関係でクラス名「バックグラウンド ノイズ」が文字化けしちゃってますが、Teachable Machineで作成した機械学習モデルを使って、音声の分類が動作するところまで確認することができました!

ここまでくれば、あとはPythonを覚えながら、サンプルコードを参考にゴニョゴニョしていけば、自分好みの仕組みも作れますね!😊

そして、以下はおまけです。

Coral USB Accelerator

Coral USB Accelerator は、GoogleのEdge TPUを搭載し、既存のLinuxシステムで機械学習を利用できるようにするデバイスです。

これをUSBでラズパイにつなげると、更に快適な機械学習環境が実現します。設定方法は以下のサイトに掲載されているとおりです。

Edge TPU ランタイムをインストールします。

$ echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
$ curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install libedgetpu1-std

PyCoral ライブラリーをインストールします。

$ sudo apt-get install python3-pycoral

ラズパイのUSBコネクタに挿して、認識していることを確認。

$ lsusb
Bus 002 Device 002: ID 1a6e:089a Global Unichip Corp.

ここまででCoralの設定は完了。Coralのサイトには動作サンプルコードもあります。

  • https://coral.ai/docs/accelerator/get-started/#3-run-a-model-on-the-edge-tpu

Coral を使った音声認識

TensorFlow ExamplesのサンプルコードでCoralを使うには、 –enableEdgeTPU オプションを指定すれば良いようです。

$ python classify.py \
  --model yamnet_edgetpu.tflite \
  --enableEdgeTPU

以上、ML2ScratchやTM2Scratchでは飽き足らず、更に機械学習で遊んでみたい人向けに、ざっとひと通り触りながらまとめてみました。ミスや漏れがあったらご指摘いただけると幸いです🙏

参考)

  • TensorFlow の概要 https://www.tensorflow.org/learn
  • Build a smart IoT device with TensorFlow Lite and Raspberry Pi https://youtu.be/Lyh84KMqUPI


投稿日

カテゴリー:

投稿者:

タグ:

コメント

コメントを残す

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

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください