Node-REDのフロー上に画像を表示する方法

先日のエントリでNode-REDで生成した画像をデバッグ用途でフロー上に表示するという処理を使用しました。 今回はその部分を取り出して説明するとともに、もう一つの表示方法についても取り上げてみたいと思います。

uepon.hatenadiary.com

生成した画像をフロー上に表示していた箇所

f:id:ueponx:20220221231845p:plain

フロー上に画像を表示する方法?

Node-REDのデフォルト情報ではフロー上に画像を表示する機能(ノード)はありません。その機能を持つものは以下の2つが代表的だと思います。

  • node-red-contrib-image-output

flows.nodered.org

こちらの拡張ノードは前述のエントリでも使用したものになります。msg.payloadに与えられた画像データ表示処理を持ったシンプルなノードになります。

  • node-red-contrib-image-tools

flows.nodered.org

こちらは画像を表示する以外にも、与えられたデータにフィルタ機能など画像処理が行える、多機能なノードになっています。表示するだけならオーバースペックかもしれません。

上記の2つを使ってみます。

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

拡張ノードのインストールは簡単にしておきます。 画面の右上の【三】ハンバーガーメニューから、プルダウンメニューを開き、

f:id:ueponx:20220222011728p:plain

【パレットの管理】をクリックします。

f:id:ueponx:20220222011733p:plain

すると、ユーザ設定のダイアログが開くのでダイアログ中の【ノードの追加】タブをクリックして

f:id:ueponx:20220222011736p:plain

f:id:ueponx:20220222011739p:plain

【ノードを検索】の入力ボックスに拡張ノードの名前を入力します。

node-red-contrib-image-outputのインストールでは名前の一部であるimage-outputを入力することで候補が1つに絞られます。そこで【ノードを追加】ボタンをクリックすると

f:id:ueponx:20220222011742p:plain

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

f:id:ueponx:20220222011745p:plain

しばらく待つと、拡張ノードがパレットに追加されたメッセージが表示されます。

f:id:ueponx:20220222011748p:plain

同様にして、node-red-contrib-image-toolsの拡張ノードは入力ボックスにimage-toolsと入力することで候補が1つに絞られます。あとは同じなので、操作を行ってインストールを行います。

f:id:ueponx:20220222011750p:plain

f:id:ueponx:20220222011754p:plain

f:id:ueponx:20220222011757p:plain

インストールが完了するとパレットの出力カテゴリimageというノードと、

f:id:ueponx:20220222011759p:plain

image toolsカテゴリviewerを含めて4つのノード)が生成されます。表示させるだけであればviewerノードだけで大丈夫です。

f:id:ueponx:20220222011802p:plain

imageノードは入力された画像データのフィルタ操作などを行うことができるノードになります。今回は使用しません。

f:id:ueponx:20220222011804p:plain

インストールが終わって準備ができたので、これらを実際に使ってみましょう。

node-red-contrib-image-outputを使用してフロー上に画像を表示する

画像の表示を行うために3つのノードをフローエディタに用意して端子を接続しておきます。

  • injectノード(配置するとタイムスタンプに名前が変わります)
  • read fileノード
  • imageノード(配置するとimage previewに名前が変わります)

f:id:ueponx:20220222011809p:plain

今回設定が必要になるのはread fileノードになります。このノードでファイルの読み込みを行っています。ダブルクリックをして、プロパティの設定を行っていきます。

f:id:ueponx:20220222011807p:plain

以下のように設定します。

  • 【ファイル名】 … 表示する画像ファイルのパス(カレントパスはNode-REDの起動パスになっています)
  • 【出力形式】 … バイナリバッファ

f:id:ueponx:20220222011811p:plain

設定が行えたら【完了】ボタンをクリックして、【デプロイ】ボタンをクリックします。

f:id:ueponx:20220222011814p:plain

これで準備は完了です。injectノードのトリガをクリックすれば、指定した画像ファイルがフロー内(imageノードの下の部分)に表示されます。

f:id:ueponx:20220222011817p:plain

表示される画像サイズはimageノードのプロパティで拡大することも可能です。 小さい場合には大きく表示してみやすくするのもいいでしょう。

f:id:ueponx:20220222011827p:plain

このようにして簡単にフロー内に画像を表示することが可能です。どちらかといえばこちらの方法はdebugノードの画像版といった使い方になるのかなと思います。

node-red-contrib-image-toolsを使用してフロー上に画像を表示する

つづいてnode-red-contrib-image-toolsviewerノードは似た感じで使用することができます。画像の表示を行うために3つのノードをフローエディタに用意して端子を接続しておきます。

  • injectノード(配置するとタイムスタンプに名前が変わります)
  • read fileノード
  • viewerノード

f:id:ueponx:20220222011856p:plain

read fileノードのプロパティは先ほどと同様に以下で設定を行います。

  • 【ファイル名】 … 表示する画像ファイルのパス(カレントパスはNode-REDの起動パスになっています)
  • 【出力形式】 … バイナリバッファ

後はフローを実行すると画像が表示されます。先ほどのimageノードに比べると少し速度が遅いかもしれません。

f:id:ueponx:20220222011820p:plain

viewerノードのプロパティを設定することで画像を大きくすることができます。

f:id:ueponx:20220222011823p:plain

基本的にはほぼ同じ機能かなと思います。

Web API経由での画像の表示

画像ファイルの表示はできたのですが、実際にはWeb API経由で取得したファイルの表示を行うことの方が多いと思いますのでそちらもやってみます。

以下の情報を参考にWeb API経由で画像を取得しています。ちなみにこのエントリは2022年2月22日に書いていることにちなんで猫画像をランダムに取得するAPIを使用しています。

参考 github.com

フローは先程のread fileノードからhttp requestノードchangeノードに変更します。

f:id:ueponx:20220221234647p:plain

変更したノードのプロパティは以下の様に変更します。この変更によって以下のような処理が行われます。http requestを行うとJSONデータが帰ってくるので、その中に含まれるfileパラメータの値がURLになっています。それを後続のノードに渡す処理をしています。

f:id:ueponx:20220222011830p:plain

f:id:ueponx:20220222011833p:plain

実行結果(node-red-contrib-image-output

f:id:ueponx:20220222011836p:plain

実行結果(node-red-contrib-image-tools

f:id:ueponx:20220222011852p:plain

今回紹介したフローは以下のGitHubリポジトリに公開しておりますので、よかったら使ってみてください。

github.com

2種類のフローに分けてあります。

おわりに

Node-REDのフローに画像を表示する方法をまとめてみました。

拡張ノードを導入することで比較的容易に画像の表示を行うことができます。node-red-contrib-image-toolsについては画像にフィルタをかけることやバーコードなどの処理ができるといった便利機能もあるので、試し甲斐のある拡張ノードになっています。

バーコードの処理に関してはDashboard関連のノードとも相性がよさそうなのでまたまとめてみたいと思います。

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