Coral USB TPU Accelerator(EdgeTPU)をRaspberry Pi Zero Wで使ってみる

## 【目的】
Edge TPUをRaspberry Pi Zero Wに接続してリアルタイムで物体検出を行います。

## 【注記】
うまくいったように見えたのですが最終的には異常終了するので、現時点ではリアルタイム検知は難しいそう…

## 【内容】
フリスクサイズのラズパイZeroWとEdgeTPUの組み合わせで、サクサクと物体検出できたらすごいと思いませんか?
そういう夢を描いて、やってみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454012/87e82115-caec-f43b-93b4-c964d41cd8b9.png)

## 【環境構築】
基本な手順はラズパイ3Bの時と同じですが、最初にダウンロードしてくるファイルが異なります。
下記のURLを参考にモジュールをダウンロードします。

[【EdgeTPU Platforms - Releases】](https://github.com/google-coral/edgetpu-platforms/releases)

CoralのGithubのコードなどはそのまま動かないことが多々ありますが、ここでも相変わらず間違っています…
下記は修正済みの手順です。

```bash
wget https://github.com/google-coral/edgetpu-platforms/releases/download/v1.9.2/edgetpu_api_1.9.2.tar.gz
tar xzf edgetpu_api_1.9.2.tar.gz
cd edgetpu_api 
sudo apt update
bash ./install.sh
```

インストール以降の手順は以下の記事の手順を踏襲します。
[【Coral USB TPU Accelerator(EdgeTPU)をとりあえず使う (Quick Start)】](https://qiita.com/rhene/items/4a55e9d428594092ee58)
[【Coral USB TPU Accelerator(EdgeTPU)を使ってとりあえず物体検出を行う】](https://qiita.com/rhene/items/1d6c267b1b739f337a75)




## 【ラズパイZeroWで物体検出してみる】
ラズパイ公式カメラを使って、とりあえず動かしてみます。

```bash
cd ~/examples-camera/raspicam/
python3 classify_capture.py
```
動いた～!!

```出力結果.txt
/usr/lib/python3/dist-packages/picamera/encoders.py:521: PiCameraAlphaStripping: using alpha-stripping to convert to non-alpha format; you may find the equivalent alpha format faster
  "using alpha-stripping to convert to non-alpha "
Inference: 143.72ms FPS: 5.5
22% desk
13% notebook, notebook computer
7% desktop computer
Inference: 21.72ms FPS: 6.9
21% desk
12% notebook, notebook computer
7% desktop computer
Inference: 21.21ms FPS: 7.1
30% desk
11% desktop computer
4% mouse, computer mouse
Inference: 20.93ms FPS: 7.8
33% desk
10% desktop computer
4% mouse, computer mouse
Inference: 21.09ms FPS: 7.8
28% desk
11% desktop computer
5% mouse, computer mouse
Inference: 20.99ms FPS: 8.3
23% desk
10% desktop computer
5% web site, website, internet site, site
Inference: 21.28ms FPS: 8.3
23% desk
12% desktop computer
6% screen, CRT screen
```
ラズパイ3Bの半分ぐらいのパフォーマンスですが、思ったよりも速い速度で動いています。
これは夢が広がります。

30秒後…

```出力結果_エラー.txt
Inference: 20.00ms FPS: 10.4
39% notebook, notebook computer
12% laptop, laptop computer
11% modem
Inference: 20.65ms FPS: 10.7
48% notebook, notebook computer
16% laptop, laptop computer
9% modem
Inference: 5906.01ms FPS: 2.6
50% notebook, notebook computer
14% laptop, laptop computer
9% modem
Inference: 5936.29ms FPS: 1.5
41% notebook, notebook computer
14% laptop, laptop computer
12% modem
Inference: 5889.02ms FPS: 1.0
39% notebook, notebook computer
13% laptop, laptop computer
10% modem
F /home/pi/edgetpu-ml-cpp-release-rpi0-1.9.2/darwinn/third_party/darwinn/driver/usb/usb_driver.cc:834] transfer on tag 1 failed. Abort. Deadline exceeded: USB transfer error 2 [LibUsbDataOutCallback]
中止
```

急に処理速度が遅くなり、最終的には異常終了してしまいました。
エラー内容的にEdge TPUのUSBドライバがエラーを吐いています。

処理が速すぎるのかと思いスリープを入れて処理速度を落としてみましたが、同じ不具合が発生します。
現時点で継続的に処理を続行させる方法は見つかっていません。
急激に夢がしぼんでしまいました。

エラー的にEdge TPUのUSBドライバに問題がある可能性があります。
Coral社のから新しいドライバがリリースされるのを待たないとダメそう?

## 【Edge TPUを使わない場合】
同じモデルでEdge TPUを使わない場合の結果は以下のとおりです。
認識時間が4000ms近くかかっており、リアルタイム性はありません。
Edge TPUの有用性を感じさせます。

```出力結果_CPU版.txt
/usr/lib/python3/dist-packages/picamera/encoders.py:521: PiCameraAlphaStripping: using alpha-stripping to convert to non-alpha format; you may find the equivalent alpha format faster
  "using alpha-stripping to convert to non-alpha "
Inference: 3964.48ms FPS: 0.5
45% spotlight, spot
10% toilet tissue, toilet paper, bathroom tissue
7% table lamp
Inference: 3953.47ms FPS: 0.3
60% spotlight, spot
6% toilet tissue, toilet paper, bathroom tissue
5% table lamp
Inference: 3948.12ms FPS: 0.3
20% projector
18% toilet tissue, toilet paper, bathroom tissue
9% printer
Inference: 3949.64ms FPS: 0.3
21% projector
12% printer
12% toilet tissue, toilet paper, bathroom tissue
Inference: 4036.60ms FPS: 0.2
23% projector
12% toilet tissue, toilet paper, bathroom tissue
11% printer
Inference: 3940.51ms FPS: 0.2
17% toilet tissue, toilet paper, bathroom tissue
15% projector
10% printer
Inference: 3657.90ms FPS: 0.2
19% projector
16% toilet tissue, toilet paper, bathroom tissue
10% printer
Inference: 3699.61ms FPS: 0.2
24% toilet tissue, toilet paper, bathroom tissue
12% projector
9% printer
```