Raspberry piとedge TPUでしゃべるカメラを作った
始めに
Googleが出したCoral USB acceleratorは、edge TPUというgoogleが開発するディープラーニングアクセラレータTPUのエッジコンピューティング版というチップを搭載したアクセラレータです。USB接続なので、raspberry piなどに手軽に接続してディープラーニングの行列乗算を爆速にします。今回はedge TPUを体感できるデモとして以前作ってみた、しゃべるカメラについて作成方法を公開いたします。
参考サイト
Raspberry piで日本語音声合成(Open JTalk)を試してみる。
Raspberry Piでプログラムを自動起動する5種類の方法を比較・解説
目次
準備するもの
- raspberry pi 2/3 raspbianがインストールされているもの
- Google Coral USB Accelerator ( Edge TPU )
- raspberry pi 用カメラモジュール
- 外付けスピーカー
- raspberry pi 用ディスプレイモジュール 本体接続でGPIOが引き出せるもの
- raspberry pi 2/3 raspbianがインストールされているもの
- Google Coral USB Accelerator ( Edge TPU )
- raspberry pi 用カメラモジュール
- 外付けスピーカー
- raspberry pi 用ディスプレイモジュール 本体接続でGPIOが引き出せるもの
- GPIOボタン2個 押すとGPIOとGNDをショートするもの。シャッターとシャットダウンボタンに使用します。写真のようにボタンに線を2本取り付け、一方はGPIO、もう一方はGNDに接続します。自作しています。
作成
raspbianセットアップ
今回はraspberry piではメジャーなraspbianを使いました。バージョンは最新のbusterを使用。基本的にDebianであれば同じレシピが使えるはずなので、以前のバージョンや、ubuntuでも動作すると思います(未確認)。
raspbianのセットアップはnobosでもイメージファイルのセットアップどちらでも可能です。タイプはdesktopでもliteでも可能です。ネットワーク接続は、有線、無線どちらでも構いません。最終的にスタンドアロンで使用いたします。今回は、raspberry pi 3にbusterのliteをイメージファイル書き込みで作成し、有線でssh接続でセットアップしました。この場合、イメージファイル書き込み直後にbootフォルダにsshという名前の空ファイルかフォルダを作成しておくと、そのままsshで接続でき、ディスプレイ無しでのセットアップができます。
インストール直後はupdateとupgradeを必ずしましょう。
$ sudo apt update
$ sudo apt upgrade
この状態からセットアップを行います。
Edge TPUのセットアップ
まずは今回メインのデバイスとなるEdge TPUのセットアップを行います。以前は環境ファイル一式をダウンロードしてインストールする形式でしたが、現在はaptでインストールが可能なようになり、手軽に環境構築ができるようになりました。
セットアップはこのページに従って行います。まずレポジトリの追加を行います。
$ 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 update
これでEdge TPUの環境がインストールできます。Edge TPUの実行環境、python環境、テストのためのexampleをインストールします。
$ sudo apt install libedgetpu1-max
$ sudo apt install python3-edgetpu
$ sudo apt install edgetpu-examples
$ cp -r /usr/share/edgetpu .
これでEdge TPUの環境が整いました。
ここでEdge TPUをraspberry piに接続して、再起動します。
再起動したら、テストをしてみます。
$ cd ./edgetpu/examples
$ python3 classify_image.py \
--model models/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite \
--label models/inat_bird_labels.txt \
--image images/parrot.jpg
これで以下のような結果が出ればEdge TPUは動作しています。
---------------------------
Ara macao (Scarlet Macaw)
Score : 0.61328125
---------------------------
Platycercus elegans (Crimson Rosella)
Score : 0.15234375
pythonの環境構築
今回使用したインストールタイプがliteだったため、pipすら入っていない環境でした。よって、セットアップします。fullのバージョンでは、予め一部入っております。
$ sudo apt install python3-pip python3-dev
$ sudo pip3 install picamera RPi.gpio
$ sudo pip3 install Pillow
camaiのダウンロード
今回作成したファイルをgithubで公開しています。一式ダウンロードします。liteで行う場合はgitが入っていないので、インストールしてから行います。
$ sudo apt install git
$ git clone https://github.com/yoshiki9636/camai
camaiディレクトリ中に、以下のファイルがあります。
camai.py :しゃべるカメラのpythonプログラム
test_camai.py :環境のテストプログラム
jsay.sh :Open Jtalk用スクリプト
categories_jp.txt :Imagenetのラベルを日本語化したもの(お手製です)
camai内部で作業を行います。
今回しゃべるカメラで使用するモデルをダウンロードしておきます。
$ cd camai/
$ wget https://github.com/google-coral/edgetpu/raw/master/test_data/mobilenet_v2_1.0_224_quant_edgetpu.tflite
また、テストのための画像を1枚edgetpu/exampleからコピーしておきます。
$ cp ../edgetpu/examples/images/cat.bmp .
テストを実行します。
$ python3 test_camai.py
以下のようになれば実行成功です。
---------------------------
トラネコ
Score : 0.26171875
---------------------------
エジプト猫
Score : 0.234375
---------------------------
ジャガーネコ
Score : 0.1171875
elTime : 0.12408232688903809
ifTime : 121.68702697753906
カメラのイネーブル
raspberry pi接続カメラのイネーブルをします。
$ sudo raspi-config
メニューの中で
5 Interfacing Option -> P1 Camera
と選択し、Enableにして終了します。
終了時、再起動されます。
Open Jtalkのインストール
日本語の発声にOpen Jtalkを使用します。レコメンドされるモデルと辞書もインストールします。
sudo apt install open-jtalk
sudo apt install hts-voice-nitech-jp-atr503-m001 open-jtalk-mecab-naist-jdic
camai/の中にjsay.shというスクリプトがあるので、実行権限を与えてテストを行います。
$ chmod +x jsay.sh
$ ./jsay.sh "おはよう"
「おはよう」とスピーカーから聞こえたら、テストOKです。
全体の組み上げ
一度電源を落とし、Coral USB Accelerator、カメラ、ディスプレイ、スピーカー、GPIOボタン2個を接続し、立ち上げます。
GPIOボタンは、GPIO23にシャッターボタン、GPIO24にシャットダウンボタンを接続し、それぞれもう片方はどこかのGNDピンに接続します。
動作テストをします。
$ cd camai/
$ mkdir image
$ python3 camai.py
ディスプレイ画面全体がカメラの画像表示になります。
GPIOシャッターボタンを押すと、「カシャ」としゃべり、
しばらくすると「これはXXです」と写ったものをしゃべります。
試すのであれば、categories_jp.txt内でラベルとなっているものを試してください。
自動起動化とシャットダウン
カメラとして単体で成立させるには、プログラムの自動起動が必要となります。この記事からsystemdを使った起動方法を選択しました。
まずcamai.serviceファイルを作成します。
[Unit]
Description=cameraai
After=syslog.target
[Service]
Type=simple
WorkingDirectory=/home/pi/camai
ExecStart=/usr/bin/python3 /home/pi/camai/camai.py
TimeoutStopSec=5
StandardOutput=null
[Install]
WantedBy = multi-user.target
以下を実行します。
$ sudo cp camai.service /etc/systemd/system
$ sudo systemctl daemon-reload
$ sudo systemctl start camai
$ sudo systemctl enable camai
3行目実行時にcamai.pyを実行したときと同じ状態となっていれば、成功です。
あと、GPIO24のシャットダウン機能をオンします。camai.pyの最終行がコメントアウトされていますが、このコメントを外します。
#os.system("sudo shutdown -h now")
os.system("sudo shutdown -h now")
リブートしてもcamai.pyが立ち上がった状態となり、シャットダウンボタンでシャットダウンするようになります。
最後に
小学生にちょっとデモする機会があったのですが、思いのほか受けが良かったのを覚えています。筆者はケースを作るのが苦手で、デモも100均のプラスチックケースに不細工な穴をあけて作っておりました。その辺識者おりましたら、教えを請いたいです。
Author And Source
この問題について(Raspberry piとedge TPUでしゃべるカメラを作った), 我々は、より多くの情報をここで見つけました https://qiita.com/yoshiki9636/items/e1edff107f179c0245ef著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .