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

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の説明に紹介されているとこが何となく端折り気味なのでまとめてみました。

今回の環境

image

  • Raspberry Pi 4
  • Raspbian Buster は2020-02のもの

で進めます。

image

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

ずらずらっとインストールログ。

image

USBでWEBカメラが認識しているかチェック

lsusb コマンドで認識されているか見てみます。

image

1度目が、WEBカメラを接続してない時。2度目が接続したときマス。こうすることで変化を分かりやすくして接続されたかを見ておきましょう。

ためしに fswebcam 動かす。

このまま、Node-REDのほうで動かしてもいいのですが、一度 fswebcam が動くかチェックしておきましょう。

fswebcam image.jpg

こちらのコマンドを実行します。

image

今回は /home/pi の階層で実行したので /home/pi/image.jpg に保存されました。うまくいかない場合は、この時点で何らかのエラーが出ます。

image

SSHだと画像が見れなので、 VNCで入って image.jpg をみてみると、無事撮影されていることが確認できました。これで準備完了です。

Node-REDの準備

image

node-red-contrib-usbcameraのインストール

node-red-contrib-usbcameraノードをインストールします。

image

node-red-contrib-image-outputのインストール

node-red-contrib-image-outputノードをインストールします。

image

フロー作成

image

このようなフローを作ります。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も置いておきます。

image

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

image

FileModeはBufferで320×240に解像度を指定します。

image

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

image

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

動かしてみる

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

image