LoginSignup
2
2

More than 3 years have passed since last update.

Raspberry piとedge TPUでしゃべるカメラを作った

Posted at

始めに

Googleが出したCoral USB acceleratorは、edge TPUというgoogleが開発するディープラーニングアクセラレータTPUのエッジコンピューティング版というチップを搭載したアクセラレータです。USB接続なので、raspberry piなどに手軽に接続してディープラーニングの行列乗算を爆速にします。今回はedge TPUを体感できるデモとして以前作ってみた、しゃべるカメラについて作成方法を公開いたします。

参考サイト

Google Coral USB accelerator

edge TPU環境のインストール

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が引き出せるもの

IMG_20200302_103541.jpg

  • GPIOボタン2個 押すとGPIOとGNDをショートするもの。シャッターとシャットダウンボタンに使用します。写真のようにボタンに線を2本取り付け、一方はGPIO、もう一方はGNDに接続します。自作しています。

IMG_20200303_151323.jpg

作成

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ピンに接続します。

IMG_20200303_153354.jpg

動作テストをします。

 $ cd camai/
 $ mkdir image
 $ python3 camai.py

ディスプレイ画面全体がカメラの画像表示になります。
GPIOシャッターボタンを押すと、「カシャ」としゃべり、
しばらくすると「これはXXです」と写ったものをしゃべります。
試すのであれば、categories_jp.txt内でラベルとなっているものを試してください。

自動起動化とシャットダウン

カメラとして単体で成立させるには、プログラムの自動起動が必要となります。この記事からsystemdを使った起動方法を選択しました。

まずcamai.serviceファイルを作成します。

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の最終行がコメントアウトされていますが、このコメントを外します。

camai.py(before)
#os.system("sudo shutdown -h now")
camai.py(after)
os.system("sudo shutdown -h now")

リブートしてもcamai.pyが立ち上がった状態となり、シャットダウンボタンでシャットダウンするようになります。

最後に

小学生にちょっとデモする機会があったのですが、思いのほか受けが良かったのを覚えています。筆者はケースを作るのが苦手で、デモも100均のプラスチックケースに不細工な穴をあけて作っておりました。その辺識者おりましたら、教えを請いたいです。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2