Coral Edge TPU USB のサンプルの Object Detection が公開されていたので、
試してみました。の#3 です。
https://github.com/google-coral/examples-camera
テスト環境
Raspberry Pi 3B+
Coral Edge TPU USB
Python3.7
Tensorflow 1.15.0
Raspi カメラ
前回のプログラムでは、Raspi で実行させると、発声のタイミングで、Stream バッファに画像が貯まるので、声が出た後の画像が、
実際のカメラの前の映像と一致しない問題が出ました。
OpenCV でのStream バッファのクリア自体は用意されていなくて、代替手段として、cap.read() または、 cap.grab() を5回繰り返して、
受け捨てする方法が、Web に出ていたので試してみました。が、
結論としては、余り良くないので、 picamera stream to OpenCV が出来ないか、Webで検索していたら、
丁度良いサンプルが在ったので、それを取り入れてみました。
Accessing the Raspberry Pi Camera with OpenCV and Python
結局は、下記、が元ネタみたいです。
色々な使い方が、出来るようです。
https://picamera.readthedocs.io/en/release-1.13/recipes2.html
前置きが長くなりましたが、プログラムは下記になります。
detect-speaker3.py
サンプルのまま、Object Detection を組み込まない状態で、11 FPS 位です。
Object Detection を組み込んで、 6 ~ 7 FPS 位になりました。
この差は、やはり Coral Edge TPU (Raspi 3B+ and USB2.0 and Low performance) での遅延だと思います。
ここが、よくなれば、それでも、 11 FPS が限界でしょうか?
後、問題点としては、スピーカーに声が出た時に、その該当の画像が画面に表示されるのが、
遅くて、出ても一瞬なので、見た目、声だけ聞こえて、ボックスの画面が出ていないと思える場合があります。
どうやら、cv2.imshow('frame', cv2_im) の処理の画面の flush が後回しになっているようです。
obj_speaker(objs,wav_tb) の後で、声出しした場合は、delay でもさせた方が良いかもしれません。
結局、下記の様に修正しました。
声だしする時は、声だしの前に cv2.waitKey(2) で 2ms Wait
そうでないときは、cv2.waitKey(1) で 1ms Wait にしました。
detect-speaker3.py 改
上記、修正でなんとか、感覚と一致するようになりました。
やはり、6~7 FPS は、ちょっと遅いかな。
20 FPS は欲しいかな?
これ以上の高速化には、Raspberry Pi 4 を使うしか無いぞね!!
画像サイズ= 300 x 300 でもよいのかな!!