先日のエントリでNode-RED
で生成した画像をデバッグ用途でフロー上に表示するという処理を使用しました。
今回はその部分を取り出して説明するとともに、もう一つの表示方法についても取り上げてみたいと思います。
生成した画像をフロー上に表示していた箇所
フロー上に画像を表示する方法?
Node-RED
のデフォルト情報ではフロー上に画像を表示する機能(ノード)はありません。その機能を持つものは以下の2つが代表的だと思います。
node-red-contrib-image-output
こちらの拡張ノードは前述のエントリでも使用したものになります。msg.payloadに与えられた画像データ表示処理を持ったシンプルなノードになります。
node-red-contrib-image-tools
こちらは画像を表示する以外にも、与えられたデータにフィルタ機能など画像処理が行える、多機能なノードになっています。表示するだけならオーバースペックかもしれません。
上記の2つを使ってみます。
拡張ノードのインストール
拡張ノードのインストールは簡単にしておきます。 画面の右上の【三】ハンバーガーメニューから、プルダウンメニューを開き、
【パレットの管理】をクリックします。
すると、ユーザ設定のダイアログが開くのでダイアログ中の【ノードの追加】タブをクリックして
【ノードを検索】の入力ボックスに拡張ノードの名前を入力します。
node-red-contrib-image-output
のインストールでは名前の一部であるimage-output
を入力することで候補が1つに絞られます。そこで【ノードを追加】ボタンをクリックすると
インストール確認のダイアログが表示されるので、【追加】ボタンをクリックしてインストールを行います。
しばらく待つと、拡張ノードがパレットに追加されたメッセージが表示されます。
同様にして、node-red-contrib-image-tools
の拡張ノードは入力ボックスにimage-tools
と入力することで候補が1つに絞られます。あとは同じなので、操作を行ってインストールを行います。
インストールが完了するとパレットの出力カテゴリ
にimage
というノードと、
image toolsカテゴリ
(viewer
を含めて4つのノード)が生成されます。表示させるだけであればviewerノード
だけで大丈夫です。
imageノード
は入力された画像データのフィルタ操作などを行うことができるノードになります。今回は使用しません。
インストールが終わって準備ができたので、これらを実際に使ってみましょう。
node-red-contrib-image-output
を使用してフロー上に画像を表示する
画像の表示を行うために3つのノードをフローエディタに用意して端子を接続しておきます。
injectノード
(配置するとタイムスタンプ
に名前が変わります)read fileノード
imageノード
(配置するとimage preview
に名前が変わります)
今回設定が必要になるのはread fileノード
になります。このノードでファイルの読み込みを行っています。ダブルクリックをして、プロパティの設定を行っていきます。
以下のように設定します。
- 【ファイル名】 … 表示する画像ファイルのパス(カレントパスは
Node-RED
の起動パスになっています) - 【出力形式】 … バイナリバッファ
設定が行えたら【完了】ボタンをクリックして、【デプロイ】ボタンをクリックします。
これで準備は完了です。injectノード
のトリガをクリックすれば、指定した画像ファイルがフロー内(imageノード
の下の部分)に表示されます。
表示される画像サイズはimageノード
のプロパティで拡大することも可能です。
小さい場合には大きく表示してみやすくするのもいいでしょう。
このようにして簡単にフロー内に画像を表示することが可能です。どちらかといえばこちらの方法はdebugノード
の画像版といった使い方になるのかなと思います。
node-red-contrib-image-tools
を使用してフロー上に画像を表示する
つづいてnode-red-contrib-image-tools
のviewerノード
は似た感じで使用することができます。画像の表示を行うために3つのノードをフローエディタに用意して端子を接続しておきます。
injectノード
(配置するとタイムスタンプに名前が変わります)read fileノード
viewerノード
read fileノード
のプロパティは先ほどと同様に以下で設定を行います。
- 【ファイル名】 … 表示する画像ファイルのパス(カレントパスは
Node-RED
の起動パスになっています) - 【出力形式】 … バイナリバッファ
後はフローを実行すると画像が表示されます。先ほどのimageノード
に比べると少し速度が遅いかもしれません。
viewerノード
のプロパティを設定することで画像を大きくすることができます。
基本的にはほぼ同じ機能かなと思います。
Web API経由での画像の表示
画像ファイルの表示はできたのですが、実際にはWeb API経由で取得したファイルの表示を行うことの方が多いと思いますのでそちらもやってみます。
以下の情報を参考にWeb API経由で画像を取得しています。ちなみにこのエントリは2022年2月22日に書いていることにちなんで猫画像をランダムに取得するAPI
を使用しています。
参考 github.com
フローは先程のread fileノード
からhttp requestノード
とchangeノード
に変更します。
変更したノードのプロパティは以下の様に変更します。この変更によって以下のような処理が行われます。http request
を行うとJSONデータ
が帰ってくるので、その中に含まれるfileパラメータ
の値がURL
になっています。それを後続のノードに渡す処理をしています。
実行結果(node-red-contrib-image-output
)
実行結果(node-red-contrib-image-tools
)
今回紹介したフローは以下のGitHubのリポジトリに公開しておりますので、よかったら使ってみてください。
2種類のフローに分けてあります。
おわりに
Node-RED
のフローに画像を表示する方法をまとめてみました。
拡張ノードを導入することで比較的容易に画像の表示を行うことができます。node-red-contrib-image-tools
については画像にフィルタをかけることやバーコードなどの処理ができるといった便利機能もあるので、試し甲斐のある拡張ノードになっています。
バーコードの処理に関してはDashboard
関連のノードとも相性がよさそうなのでまたまとめてみたいと思います。