【RaspberryPi】Node-Redでカメラを使用する(Cameraモジュール・USBカメラ)

RaspberryPiを使ってGPIOを操作することができるようになったので、今度はカメラを接続して見たいと思います。 カメラもRaspberryPiに端子の用意されたものと、USB接続の2タイプがあるのでそれぞれについても試してみたいと思います。

Raspberry Pi Cameraモジュール編

検索すると良い情報が結構あると思います。このエントリーをみていくことで問題なく進めていけるかなと思います。

【参考】

qiita.com

RaspberryPiのカメラといえば、直接リボンケーブルで接続できるカメラモジュールが挙げられます。最近本当に安くなっているので、カメラモジュールだけではなくケース込みでもかなり安く入手できるのがメリットだと思います。以前はもっと高価だったんですけどね…。

自分が買ったときには、カメラモジュールとケーブルのみでしたが、今購入するのであればケース付きのものをおすすめします。

では、使ってみましょう。

カメラモジュールを認識させる

RaspberryPiでカメラモジュールを使用するには、設定が必要になります。といってもraspi-configでカメラを有効化させるだけです。

以下のコマンドを入力して操作していきます。

$ sudo raspi-config

メニュー画面になったら…

f:id:ueponx:20191001083709p:plain

5 Interfacing Optionsを選択して【Enter】キーを押下。

f:id:ueponx:20191001083712p:plain

P1 Cameraを選択して【Enter】キーを押下。

f:id:ueponx:20191001083715p:plain

カメラインターフェースの有効化を尋ねられるので

f:id:ueponx:20191001083717p:plain

<Yes>を選択して【Enter】キーを押下。

f:id:ueponx:20191001083720p:plain

これでカメラインターフェースが有効化されました。【Enter】キーを押下してメニューに戻ります。

f:id:ueponx:20191001083722p:plain

メニューに戻ったら<Finish>を選択して【Enter】キーを押下します。

f:id:ueponx:20191001083726p:plain

再起動するかを尋ねられるので<Yes>を選択して【Enter】キーを押下して再起動を行います。

f:id:ueponx:20191001083728p:plain

再起動が完了するとカメラモジュールが使用できるようになっています。 以下のコマンドで撮影ができているか確認しましょう。

$ raspistill -o image.jpg

エラーが発生せず、カレントディレクトリにimage.jpgファイルが生成されていれば大丈夫です。

f:id:ueponx:20191001083731p:plain

Node-REDからカメラモジュールを使用する

ここまでできたら、次はNode-REDから制御を行ってみましょう。Node-REDからこのカメラモジュールを操作するには、拡張ノードが必要になってきます。 今回は以下のノードをNode-REDから導入してみます。

flows.nodered.org

Node-REDをWebブラウザで開き、右上にある【三】のボタンをクリックしてメニューを開き

f:id:ueponx:20191002075553p:plain

メニューの中から【パレットの管理】をクリックします。

f:id:ueponx:20191002075556p:plain

すると、【ユーザ設定】の【パレット】が開き【現在のノード】の画面が表示されます。この画面の【ノードの追加】タブをクリックします。

f:id:ueponx:20191002075558p:plain

追加するノードの検索画面が開きます。

f:id:ueponx:20191002075601p:plain

検索のテキストボックスに今回の拡張ノード名を入力すると、該当するノードが検索され、リストに候補が表示されます。 今回はcamerapiという名前の含まれているノードなので、これを入力します。 検索されたノードからインストールするノードの名前を確認して、【ノードの追加】ボタンをクリックします。

f:id:ueponx:20191002075604p:plain

クリック後、インストール確認のダイアログが表示されるので【追加】ボタンをクリックします。

f:id:ueponx:20191002075607p:plain

すると、インストールの作業が行われ、

f:id:ueponx:20191002075609p:plain

拡張ノードがパレット(ノードのリスト)に追加されます。あー画面の左側のノードのリストはパレットっていうのか…今更だ…。あとで他のエントリーも修正しておこうと思います。

f:id:ueponx:20191002075612p:plain

では今回インストールされたノードを確認してみます。【RaspberryPi】グループに【camerapi takephoto】が追加されているのがわかります。

f:id:ueponx:20191002075618p:plain

では、今回導入したこのノードを試してみたいと思います。 ワークスペースに以下のノードを追加します。

  • injectノード
  • camerapi takephotoノード
  • debugノード

以下のように配置し、

f:id:ueponx:20191002075626p:plain

各端子を接続していきます。

f:id:ueponx:20191002075629p:plain

あとは、camerapi takephotoノードを設定していきます。ノードをダブルクリックしてプロパティ画面を開きます。 ここで設定できることは以下となります。

  • ファイル名の設定(File Mode)
  • 画像の解像度(Image Resolution)
  • 画像の角度の変更(Rotation)
  • 画像の上下左右の反転(Image Flip)
  • 画質のプロパティ設定(Image Properties)
  • エフェクト(Image Effect)
  • ISO感度(ISO)
  • 露出・ホワイトバランス(Preset modes)
  • AGCの調整(Wait for AGC
  • LEDの点灯・消灯(LED)

f:id:ueponx:20191002075631p:plain

細かい設定に関してはそれぞれ試してもらえればと思いますが、画像の解像度(サイズ)は大きくても仕方ないので、今回は 【ImageResolution】のプルダウンから【640x480】を選択し、完了ボタンをクリックします。

f:id:ueponx:20191002075635p:plain

あとは、【デプロイ】ボタンをクリックします。

f:id:ueponx:20191002075638p:plain

デプロイが成功しましたという表示がでればOKです。

f:id:ueponx:20191002075643p:plain

あとはinjectノードをクリックして実行します。

f:id:ueponx:20191002075645p:plain

カメラによるキャプチャが成功すると、デバッグのタブに

f:id:ueponx:20191002075652p:plain

実際にファイルがあるかコンソールから確認すると

f:id:ueponx:20191002075649p:plain

ちゃんとカメラの映像が入っています。

USBカメラ編

先ほどはRaspberryPiのカメラインターフェースに接続するモジュールでしたが、次はUSB接続のカメラをNode-REDから操作してみたいと思います。 Node-REDで使用できるUSBカメラの拡張ノードは調べてみるといくつかあります。

flows.nodered.org

flows.nodered.org ↑の拡張ノードは使用できないようです(20191008現在Node-RED 0.20.7でインストールに失敗します)

flows.nodered.org

まだまだあるかなとは思いますが、今回はこの中からnode-red-contrib-usbcameraを使用してみたいと思います。

node-red-contrib-usbcameraを使用してみる

今回使用したUSBカメラは以下のものです。カメラ自体は古いものなのですが、最新のUSBカメラものでもほとんど同じように使用することはできるかなと思います。

以前使用したときのエントリーはこちらになります。 uepon.hatenadiary.com

www.logicool.co.jp

まずはUSBカメラをRaspberryPiのUSBコネクタに接続します。すると以下のようになります。

【認識前】

$ lsusb 
Bus 001 Device 004: ID 056e:4008 Elecom Co., Ltd 
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

【認識後】

$ lsusb 
Bus 001 Device 004: ID 056e:4008 Elecom Co., Ltd 
Bus 001 Device 005: ID 046d:082c Logitech, Inc. 
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bus 001 Device 005: ID 046d:082c Logitech, Inc.がUSBカメラの認識部分になっています。

【画面】

f:id:ueponx:20191007080935p:plain

拡張ノードのインストール

カメラが認識できたら、拡張ノードをインストールするのですが、事前に準備が必要になります。そこからはじめて行きます。

拡張ノードのインストールの事前準備(追加インストールするパッケージ)

拡張ノードのページをみるとこのノードはfswebcamコマンドを呼び出して実行をするようです。拡張ノードはfswebcamパッケージがインストールされていない場合でもエラーは発生しません。ただし、拡張ノード実行時にはエラーします。

fswebcamパッケージがインストールされていない場合のエラー画面】

f:id:ueponx:20191007081017p:plain

拡張ノードの説明では、以下のように書かれているので

You have to install fswebcam by following command.

$sudo apt install fswebcam

このコマンドを実行してパケージのインストールを行います。

f:id:ueponx:20191007081014p:plain

すんなりとインストールできました。

拡張ノードのインストール

事前準備ができたので、拡張ノードのインストールを行っていきます。

画面の右上側にある【三】ボタンをクリックし、メニューの中から【パレットの管理】を選択しクリックをします。

f:id:ueponx:20191007080939p:plain

【ユーザ設定】が表示されたら

f:id:ueponx:20191007080942p:plain

【ノードを追加】のタブをクリックします。

f:id:ueponx:20191007080946p:plain

検索のテキストボックスにusbcameraを入力すると、拡張ノードが検出されます。 検出された拡張ノードの【ノードの追加】ボタンをクリックします。

f:id:ueponx:20191008075801p:plain

インストールの確認が表示されるので【追加】ボタンを押します。

f:id:ueponx:20191007080951p:plain

するとインストール処理がスタートし

f:id:ueponx:20191007080955p:plain

少しするとインストールが完了の表示がされます。【閉じる】ボタンを押して【ユーザ設定】を閉じます。

f:id:ueponx:20191007080959p:plain

インストールされた拡張ノードは【RaspberryPi】カテゴリーの中に【usbcamera】という形で組み込まれます。

f:id:ueponx:20191007081005p:plain

では、先程同様にテストをやってみましょう。以下のノードをワークスペースに配置していきます。

  • injectノード(配置すると名称がタイムスタンプになる)
  • usbcameraノード
  • debugノード

f:id:ueponx:20191007081008p:plain

ノードを配置したら、端子の接続を行っていきます。これで準備は完了です。あとはusbcameraノードのプロパティ設定を行っていくことになります。

f:id:ueponx:20191007081028p:plain

usbcameraノードをダブルクリックしてプロパティを開くと3つのモードを選択することができます。

f:id:ueponx:20191007081011p:plain

File Modeのプルダウンから選択することができるようになっています。BufferFile ModeGenerateというモードがありここから選んでいくことになります。

f:id:ueponx:20191007081023p:plain

モード設定

Bufferのプロパティ画面

Bufferはカメラが撮影した画像をデータの配列として取得することができるモードになります。後続の処理がファイル操作ではなく、データ配列のだった場合に使用できます。ファイル化するオーバーヘッドも大きい(SDメモリにファイルを書き込むので結構処理は遅くなります)ので可能であれば、こちらを使用するのはありだと思います。(デバッグは難しいかもしれませんが)

以下の設定値があります。

  • File Mode(Buffer)
  • Image Resolution(画像サイズ)

f:id:ueponx:20191007081020p:plain

File Modeのプロパティ画面

File Modeはカメラが撮影した画像をファイルとして取得することができます。ただし、ファイル名は固定になります。(この処理の前にファイル名を生成することができれば可変のファイル名で保存も可能です)あと、保存するパスや画像フォーマットなども変更できるのがポイントです。PNGなどの画像ファイルを使用したい場合にはこちらで行うしかないかなと思います。

以下の設定値があります。

  • File Mode(File Mode)
  • File Name(ファイル名)
  • File Default Path(保存するディレクトリ、パス)
  • File Format(保存する画像のフォーマット。PNGやJPGなど)
  • Image Resolution(画像サイズ)

f:id:ueponx:20191007081011p:plain

Generateのプロパティ画面

Generateは自動的にファイル名を生成して、カメラが撮影した画像を保存するモードです。画像サイズは変更できるのですが、JPG形式でしかできないのがちょっと物足りない感じです。ただ、学習電通データとして何枚も何枚も画像を生成する場合には便利だと思います。

以下の設定値があります。

  • File Mode(Generate)
  • File Default Path(保存するディレクトリ、パス)
  • Image Resolution(画像サイズ)

f:id:ueponx:20191007081025p:plain

実行させてみる!

あとは実行させてみます。injectノードの左側のボタンをクリックするとこんな感じになります。

Bufferモードでの実行】 f:id:ueponx:20191008075145p:plain

実行すると、デバッグ表示には配列データが出力されます。

Generateモードでの実行】

f:id:ueponx:20191007081030p:plain

実行すると、デバッグ表示には出力されたがファイルパスが出力されます。

おわりに

カメラも使えるようになったぜーって感じなんですが、 なんと2019年9月30日にNode-REDのバージョンが1.0になりました!パチパチパチ nodered.org

ちょっとどうなっちゃうのかっていうのが気になるところではありますが、次回もなにかできるといいなと思っています。

【Node-RED 参考エントリ-】

uepon.hatenadiary.com

uepon.hatenadiary.com

uepon.hatenadiary.com

uepon.hatenadiary.com

uepon.hatenadiary.com

uepon.hatenadiary.com

uepon.hatenadiary.com

/* -----codeの行番号----- */