Raspberry PiのNode-REDでnode-red-contrib-usbcameraを使ってWEBカメラ撮影するメモです。
背景
Raspberry PiのNode-REDで撮影したWebカメラ画像をMicrosoft Custom Vision Serviceで判定させるメモ
こちらのナレッジですが、node-red-contrib-usbcameraノードを利用するパートはあるものの、node-red-contrib-usbcameraの説明に紹介されているとこが何となく端折り気味なのでまとめてみました。
今回の環境
- Raspberry Pi 4
- Raspbian Buster は2020-02のもの
で進めます。
Node-RED は 1.0.3 で、Raspberry Piで実行する ドキュメントにある、Raspbian Busterに入っているものを最新にアップデートするために update-nodejs-and-nodered を利用しています。
私の場合は、Power ShellのSSHコマンドで、このあたりの対応を行っています。こちらも便利。
node-red-contrib-usbcamera を使う前準備に fswebcam を使えるようにする
node-red-contrib-usbcamera (node) – Node-RED
こちらに書いてある通りで、USBカメラを撮影するコアのコマンドであるfswebcamをインストールします。ちなみに、以下のWEBカメラは自分でも動作確認しています。
ということで、以下コマンドでインストール。
sudo apt install fswebcam
ずらずらっとインストールログ。
USBでWEBカメラが認識しているかチェック
lsusb コマンドで認識されているか見てみます。
1度目が、WEBカメラを接続してない時。2度目が接続したときマス。こうすることで変化を分かりやすくして接続されたかを見ておきましょう。
ためしに fswebcam 動かす。
このまま、Node-REDのほうで動かしてもいいのですが、一度 fswebcam が動くかチェックしておきましょう。
fswebcam image.jpg
こちらのコマンドを実行します。
今回は /home/pi の階層で実行したので /home/pi/image.jpg に保存されました。うまくいかない場合は、この時点で何らかのエラーが出ます。
SSHだと画像が見れなので、 VNCで入って image.jpg をみてみると、無事撮影されていることが確認できました。これで準備完了です。
Node-REDの準備
node-red-contrib-usbcameraのインストール
node-red-contrib-usbcameraノードをインストールします。
node-red-contrib-image-outputのインストール
node-red-contrib-image-outputノードをインストールします。
フロー作成
このようなフローを作ります。injectノード→node-red-contrib-usbcameraノード→node-red-contrib-image-outputノードの流れです。
[{"id":"91f416c.9aee8e8","type":"inject","z":"5ddc68c8.77b208","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":240,"y":240,"wires":[["a5353b8c.6c5568"]]},{"id":"a5353b8c.6c5568","type":"usbcamera","z":"5ddc68c8.77b208","filemode":"0","filename":"image01.jpg","filedefpath":"1","filepath":"","fileformat":"jpeg","resolution":"1","name":"","x":490,"y":240,"wires":[["da37feec.616c6"]]},{"id":"da37feec.616c6","type":"image","z":"5ddc68c8.77b208","name":"","width":160,"data":"payload","dataType":"msg","thumbnail":false,"active":true,"x":740,"y":240,"wires":[]}]
インポートできるフローJSONも置いておきます。
node-red-contrib-usbcameraノードの設定です。
FileModeはBufferで320×240に解像度を指定します。
node-red-contrib-image-outputノードの設定です。
こちらはデフォルトのままでOKです。画像の通り。
動かしてみる
実際に動かしてみると、撮影されて画像が取得したあと、node-red-contrib-image-outputノードでプレビューが表示されます。