RaspberryPiを使ってGPIOを操作することができるようになったので、今度はカメラを接続して見たいと思います。 カメラもRaspberryPiに端子の用意されたものと、USB接続の2タイプがあるのでそれぞれについても試してみたいと思います。
Raspberry Pi Cameraモジュール編
検索すると良い情報が結構あると思います。このエントリーをみていくことで問題なく進めていけるかなと思います。
【参考】
RaspberryPiのカメラといえば、直接リボンケーブルで接続できるカメラモジュールが挙げられます。最近本当に安くなっているので、カメラモジュールだけではなくケース込みでもかなり安く入手できるのがメリットだと思います。以前はもっと高価だったんですけどね…。
自分が買ったときには、カメラモジュールとケーブルのみでしたが、今購入するのであればケース付きのものをおすすめします。
では、使ってみましょう。
カメラモジュールを認識させる
RaspberryPiでカメラモジュールを使用するには、設定が必要になります。といってもraspi-config
でカメラを有効化させるだけです。
以下のコマンドを入力して操作していきます。
$ sudo raspi-config
メニュー画面になったら…
5 Interfacing Options
を選択して【Enter】キーを押下。
P1 Camera
を選択して【Enter】キーを押下。
カメラインターフェースの有効化を尋ねられるので
<Yes>
を選択して【Enter】キーを押下。
これでカメラインターフェースが有効化されました。【Enter】キーを押下してメニューに戻ります。
メニューに戻ったら<Finish>
を選択して【Enter】キーを押下します。
再起動するかを尋ねられるので<Yes>
を選択して【Enter】キーを押下して再起動を行います。
再起動が完了するとカメラモジュールが使用できるようになっています。 以下のコマンドで撮影ができているか確認しましょう。
$ raspistill -o image.jpg
エラーが発生せず、カレントディレクトリにimage.jpg
ファイルが生成されていれば大丈夫です。
Node-REDからカメラモジュールを使用する
ここまでできたら、次はNode-REDから制御を行ってみましょう。Node-REDからこのカメラモジュールを操作するには、拡張ノードが必要になってきます。 今回は以下のノードをNode-REDから導入してみます。
Node-REDをWebブラウザで開き、右上にある【三】のボタンをクリックしてメニューを開き
メニューの中から【パレットの管理】をクリックします。
すると、【ユーザ設定】の【パレット】が開き【現在のノード】の画面が表示されます。この画面の【ノードの追加】タブをクリックします。
追加するノードの検索画面が開きます。
検索のテキストボックスに今回の拡張ノード名を入力すると、該当するノードが検索され、リストに候補が表示されます。
今回はcamerapi
という名前の含まれているノードなので、これを入力します。
検索されたノードからインストールするノードの名前を確認して、【ノードの追加】ボタンをクリックします。
クリック後、インストール確認のダイアログが表示されるので【追加】ボタンをクリックします。
すると、インストールの作業が行われ、
拡張ノードがパレット(ノードのリスト)に追加されます。あー画面の左側のノードのリストはパレット
っていうのか…今更だ…。あとで他のエントリーも修正しておこうと思います。
では今回インストールされたノードを確認してみます。【RaspberryPi】グループに【camerapi takephoto】が追加されているのがわかります。
では、今回導入したこのノードを試してみたいと思います。 ワークスペースに以下のノードを追加します。
inject
ノードcamerapi takephoto
ノードdebug
ノード
以下のように配置し、
各端子を接続していきます。
あとは、camerapi takephoto
ノードを設定していきます。ノードをダブルクリックしてプロパティ画面を開きます。
ここで設定できることは以下となります。
- ファイル名の設定(File Mode)
- 画像の解像度(Image Resolution)
- 画像の角度の変更(Rotation)
- 画像の上下左右の反転(Image Flip)
- 画質のプロパティ設定(Image Properties)
- エフェクト(Image Effect)
- ISO感度(ISO)
- 露出・ホワイトバランス(Preset modes)
- AGCの調整(Wait for AGC )
- LEDの点灯・消灯(LED)
細かい設定に関してはそれぞれ試してもらえればと思いますが、画像の解像度(サイズ)は大きくても仕方ないので、今回は 【ImageResolution】のプルダウンから【640x480】を選択し、完了ボタンをクリックします。
あとは、【デプロイ】ボタンをクリックします。
デプロイが成功しましたという表示がでればOKです。
あとはinject
ノードをクリックして実行します。
カメラによるキャプチャが成功すると、デバッグのタブに
実際にファイルがあるかコンソールから確認すると
ちゃんとカメラの映像が入っています。
USBカメラ編
先ほどはRaspberryPiのカメラインターフェースに接続するモジュールでしたが、次はUSB接続のカメラをNode-REDから操作してみたいと思います。 Node-REDで使用できるUSBカメラの拡張ノードは調べてみるといくつかあります。
flows.nodered.org ↑の拡張ノードは使用できないようです(20191008現在Node-RED 0.20.7でインストールに失敗します)
まだまだあるかなとは思いますが、今回はこの中からnode-red-contrib-usbcamera
を使用してみたいと思います。
node-red-contrib-usbcamera
を使用してみる
今回使用したUSBカメラは以下のものです。カメラ自体は古いものなのですが、最新のUSBカメラものでもほとんど同じように使用することはできるかなと思います。
以前使用したときのエントリーはこちらになります。 uepon.hatenadiary.com
まずは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カメラの認識部分になっています。
【画面】
拡張ノードのインストール
カメラが認識できたら、拡張ノードをインストールするのですが、事前に準備が必要になります。そこからはじめて行きます。
拡張ノードのインストールの事前準備(追加インストールするパッケージ)
拡張ノードのページをみるとこのノードはfswebcam
コマンドを呼び出して実行をするようです。拡張ノードはfswebcam
パッケージがインストールされていない場合でもエラーは発生しません。ただし、拡張ノード実行時にはエラーします。
【fswebcam
パッケージがインストールされていない場合のエラー画面】
拡張ノードの説明では、以下のように書かれているので
You have to install fswebcam by following command.
$sudo apt install fswebcam
このコマンドを実行してパケージのインストールを行います。
すんなりとインストールできました。
拡張ノードのインストール
事前準備ができたので、拡張ノードのインストールを行っていきます。
画面の右上側にある【三】ボタンをクリックし、メニューの中から【パレットの管理】を選択しクリックをします。
【ユーザ設定】が表示されたら
【ノードを追加】のタブをクリックします。
検索のテキストボックスにusbcamera
を入力すると、拡張ノードが検出されます。
検出された拡張ノードの【ノードの追加】ボタンをクリックします。
インストールの確認が表示されるので【追加】ボタンを押します。
するとインストール処理がスタートし
少しするとインストールが完了の表示がされます。【閉じる】ボタンを押して【ユーザ設定】を閉じます。
インストールされた拡張ノードは【RaspberryPi】カテゴリーの中に【usbcamera】という形で組み込まれます。
では、先程同様にテストをやってみましょう。以下のノードをワークスペースに配置していきます。
- injectノード(配置すると名称がタイムスタンプになる)
usbcamera
ノード- debugノード
ノードを配置したら、端子の接続を行っていきます。これで準備は完了です。あとはusbcamera
ノードのプロパティ設定を行っていくことになります。
usbcamera
ノードをダブルクリックしてプロパティを開くと3つのモードを選択することができます。
File Mode
のプルダウンから選択することができるようになっています。Buffer
、File Mode
、Generate
というモードがありここから選んでいくことになります。
モード設定
Buffer
のプロパティ画面
Buffer
はカメラが撮影した画像をデータの配列として取得することができるモードになります。後続の処理がファイル操作ではなく、データ配列のだった場合に使用できます。ファイル化するオーバーヘッドも大きい(SDメモリにファイルを書き込むので結構処理は遅くなります)ので可能であれば、こちらを使用するのはありだと思います。(デバッグは難しいかもしれませんが)
以下の設定値があります。
- File Mode(
Buffer
) - Image Resolution(画像サイズ)
File Mode
のプロパティ画面
File Mode
はカメラが撮影した画像をファイルとして取得することができます。ただし、ファイル名は固定になります。(この処理の前にファイル名を生成することができれば可変のファイル名で保存も可能です)あと、保存するパスや画像フォーマットなども変更できるのがポイントです。PNGなどの画像ファイルを使用したい場合にはこちらで行うしかないかなと思います。
以下の設定値があります。
- File Mode(
File Mode
) - File Name(ファイル名)
- File Default Path(保存するディレクトリ、パス)
- File Format(保存する画像のフォーマット。PNGやJPGなど)
- Image Resolution(画像サイズ)
Generate
のプロパティ画面
Generate
は自動的にファイル名を生成して、カメラが撮影した画像を保存するモードです。画像サイズは変更できるのですが、JPG形式でしかできないのがちょっと物足りない感じです。ただ、学習電通データとして何枚も何枚も画像を生成する場合には便利だと思います。
以下の設定値があります。
- File Mode(
Generate
) - File Default Path(保存するディレクトリ、パス)
- Image Resolution(画像サイズ)
実行させてみる!
あとは実行させてみます。injectノードの左側のボタンをクリックするとこんな感じになります。
【Buffer
モードでの実行】
実行すると、デバッグ表示には配列データが出力されます。
【Generate
モードでの実行】
実行すると、デバッグ表示には出力されたがファイルパスが出力されます。
おわりに
カメラも使えるようになったぜーって感じなんですが、 なんと2019年9月30日にNode-REDのバージョンが1.0になりました!パチパチパチ nodered.org
ちょっとどうなっちゃうのかっていうのが気になるところではありますが、次回もなにかできるといいなと思っています。
【Node-RED 参考エントリ-】