Node-REDで画像処理(sharp)

 17th October 2021 at 8:26pm

Node-RED(というかJavaScript)で画像処理を簡単に行いたい場合、「Sharp」モジュールを使うのが良いと思います。

インストール手順

Node.js バージョン12系/14系も、次のコマンドでインストールすることができます。

> npm install -g sharp

Node-REDのバージョン1.3以降の「Functionノードにおける外部npmモジュールの簡単に利用できる」機能を使えば、簡単に使えます。

ただし、「nrlint」モジュール(lint機能)とは相性が悪いようです。


こんな警告がでます。しかし、普通に動作するので、右クリックして、このノードもしくはフローにおいて無視(ignore)設定しましょう。

サンプルフロー

まず、右上の マークをクリックし、「パレットの管理」を選択してください。「node-red-contrib-image-output」がインストールされていなければ、「ノードを追加」⇒「ノードを検索」⇒「node-red-contrib-image-output」で追加してください。

次に、以下のようにノードを配置し接続します。

①「inject」ノード
単純にトリガーするためのノードです。
②「Function」ノード
c:/tmp/lena.jpg(適当に書き換えてください)を読み込んで、ぼかし処理をし、バッファー変換します。
③「image」ノード
単純に配置するだけです。画像表示用。

配置と接続が終了したら、「デプロイ」ボタンを押します。

①「inject」ノードのボタンを押すと、「image」ノードの下に画像が表示されます。

以下はフローをJSON形式で書き出したものです。以下をコピーして、Node-REDの右上の マークをクリックし、 「読み込み」で開いたテキストボックスにペーストしてください。上のフローを読み込むことができます。

[
    {
        "id": "b4ef144d424bce74",
        "type": "inject",
        "z": "c2f97dc56d34ab2d",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 200,
        "y": 120,
        "wires": [
            [
                "a2f6f3adcb37ef37"
            ]
        ]
    },
    {
        "id": "a2f6f3adcb37ef37",
        "type": "function",
        "z": "c2f97dc56d34ab2d",
        "name": "",
        "func": "msg.payload = await sharp(\"c:/tmp/lena.jpg\")\n    .blur(10)\n    .toBuffer();\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [
            {
                "var": "sharp",
                "module": "sharp"
            }
        ],
        "x": 380,
        "y": 120,
        "wires": [
            [
                "7c7a4c1120d017a7"
            ]
        ]
    },
    {
        "id": "7c7a4c1120d017a7",
        "type": "image",
        "z": "c2f97dc56d34ab2d",
        "name": "",
        "width": 160,
        "data": "payload",
        "dataType": "msg",
        "thumbnail": false,
        "active": true,
        "pass": false,
        "outputs": 0,
        "x": 560,
        "y": 120,
        "wires": []
    }
]


HomeへNode-REDの記事Topへ