Raspberry PiのNode-REDでnode-red-contrib-usbcameraを使ってWEBカメラ撮影するメモ

Raspberry PiのNode-REDでnode-red-contrib-usbcameraを使ってWEBカメラ撮影するメモ

Raspberry PiのNode-REDでnode-red-contrib-usbcameraを使ってWEBカメラ撮影するメモです。

背景

https://www.1ft-seabass.jp/memo/2019/12/29/raspberrypi-node-red-webcamera-connect-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で320x240に解像度を指定します。

node-red-contrib-image-outputノードの設定です。

こちらはデフォルトのままでOKです。画像の通り。

動かしてみる

実際に動かしてみると、撮影されて画像が取得したあと、node-red-contrib-image-outputノードでプレビューが表示されます。