/Image-Processing-Node-Editor

処理の検証や比較検討での用途を想定したノードエディターベースの画像処理アプリ(A node editor-based image processing application intended for use in processing verification and comparison studies)

Primary LanguagePythonApache License 2.0Apache-2.0

[Japanese/English]

Image-Processing-Node-Editor

ノードエディターベースの画像処理アプリです。
処理の検証や比較検討での用途を想定しています。

Note

ノードは作成者(高橋)が必要になった順に追加しているため、
画像処理における基本的な処理を担うノードが不足していることがあります。

opencv-python   4.5.5.64 or later
onnxruntime-gpu 1.12.0   or later
dearpygui       1.11.0   or later
mediapipe       0.8.10   or later ※mediapipeノード実行に必要
protobuf        3.20.0   or later ※mediapipeノード実行に必要
filterpy        1.4.5    or later ※motpyノード実行に必要

Installation

以下の何れかの方法で環境を準備してください。

  • スクリプトを直接実行
    1. リポジトリをクローン
      git clone https://github.com/Kazuhito00/Image-Processing-Node-Editor
    2. パッケージをインストール
      pip install -r requirements.txt
    3. 「main.py」を実行
      python main.py
  • Dockerを利用
    1. Image-Processing-Node-Editor/docker/nvidia-gpu を参照
  • 実行ファイルを利用(Windowsのみ)
    1. ipn-editor_win_x86_64.zipをダウンロード
    2. 「main.exe」を実行
  • pipインストールを利用
    ※インストールされるディレクトリ名が「node」「node_editor」となってしまうため修正予定
    →pip利用時はvenv等の仮想環境でのインストールを強く推奨
    1. ビルドツールをインストール
      Windows:https://visualstudio.microsoft.com/ja/visual-cpp-build-tools/
      Ubuntu:sudo apt-get install build-essential libssl-dev libffi-dev python3-dev
    2. Numpy、Cython、wheelをインストール
      pip install Cython numpy wheel
    3. GitHubリポジトリを指定し、pipインストール
      pip install git+https://github.com/Kazuhito00/Image-Processing-Node-Editor
    4. 以下コマンドでアプリケーションを起動
      ipn-editor

Usage

アプリの起動方法は以下です。

python main.py
  • --setting
    ノードサイズやVideoWriterの設定が記載された設定ファイルパスの指定
    デフォルト:node_editor/setting/setting.json
  • --unuse_async_draw
    非同期描画を使用しない
    →GUIイベントループとノードの更新処理を直列に実施
    ※ノード異常終了時などの原因調査用
    デフォルト:指定なし

Create Node

メニューから作成したいノードを選びクリック

Connect Node

出力端子をドラッグして入力端子に接続
端子に設定された型同士のみ接続可能

Delete Node

削除したいノードを選択した状態で「Del」キー

Export

メニューから「Export」を押し、ノード設定(jsonファイル)を保存

Import

Exportで出力したノード設定(jsonファイル)を読み込む

Node

Input Node
Image 静止画(bmp, jpg, png, gif)を読み込み、画像を出力するノード
「Select Image」ボタンでファイルダイアログをオープン
Video 動画(mp4, avi)を読み込み、フレーム毎の画像を出力するノード
「Select Movie」ボタンでファイルダイアログをオープン
動画をループ再生する場合は「Loop」にチェック
「Skip Rate」は動画読み込み時に、何フレームに1回出力するか指定する数値
Video(Set Frame Position) 動画(mp4, avi)を読み込み、指定フレーム位置の画像を出力するノード
「Select Movie」ボタンでファイルダイアログをオープン
WebCam Webカメラを読み込み、フレーム毎の画像を出力するノード
「Device No」ドロップダウンリストでカメラ番号を指定
RTSP ネットワークカメラのRTSP入力を読み込み、フレーム毎の画像を出力するノード
Int Value 整数値を出力するノード
Float Value フロート値を出力するノード
Process Node
ApplyColorMap 入力画像に疑似カラーを適用し、疑似カラー画像を出力するノード
Blur 入力画像に対し平滑化処理を実行し、平滑化画像を出力するノード
Brightness 入力画像に対し輝度調整処理を実行し、輝度調整画像を出力するノード
「alpha」スライドバーで輝度調整値を変更可能
Canny 入力画像に対しキャニー法を用いたエッジ検出処理を実行し
エッジ検出画像を出力するノード
スライダーで最小閾値と最大閾値を指定
Contrast 入力画像に対しコントラスト調整処理を実行し、コントラス調整画像を出力するノード
「beta」スライドバーでコントラスト調整値を変更可能
Crop 入力画像の切り抜きを実行し、切り抜き画像を出力するノード
左上座標(x1, y1)と右上座標(x2, y2)をスライダーで変更可能
EqualizeHist 入力画像の明度部分のヒストグラム平坦化を実行し、画像を出力するノード
Flip 入力画像に対し水**転/垂直反転を実行し、画像を出力するノード
Gamma Correction 入力画像に対しガンマ補正を実行し、画像を出力するノード
スライダーでγ値を変更可能
Grayscale 入力画像をグレースケール化し、画像を出力するノード
Threshold 入力画像を2値化し、画像を出力するノード
「type」で2値化アルゴリズムを指定
「threshold」で閾値変更

「type」で「大津の2値化(THRESH_OTSU)」は
閾値自動決定アルゴリズムのため「threshold」値は無視
Simple Filter 入力画像に3×3の2次元フィルタリング処理を行い、画像を出力するノード
Omnidirectional Viewer 入力画像(360度画像)を指定のロール軸、ピッチ軸、ヨー軸で変換して、画像を出力するノード
入力画像は正距円筒図法の画像を想定
Resize 入力画像を指定の高さ、幅、補間方法でリサイズして、画像を出力するノード
Deep Learning Node

ドロップダウンリストでモデルを指定し、CPU/GPUチェックボックスで推論時のデバイスを変更可能
※モデルがGPU推論に対応していない場合はGPUにチェックを入れてもCPU推論
ノードが使用するモデルのライセンスは「node/deep_learning_node/XXXXXXXX/」の各ディレクトリを参照

Classification 入力画像に対しクラス分類を実行するノード
出力画像は未加工の画像

Object Detectionノードを接続した場合
バウンディングボックスに対しクラス分類を実行
Face Detection 入力画像に対し顔検出を実行するノード
出力画像は未加工の画像
Low-Light Image Enhancement 入力画像に対し暗所ノイズ除去(Low-Light Image Enhancement)を実行するノード
出力画像はノイズ除去適用済みの画像
Monocular Depth Estimation 入力画像に対し単眼深度推定を実行するノード
出力画像は単眼深度推定を適用しグレースケール化した画像
Object Detection 入力画像に対し物体検出を実行するノード
出力画像は未加工の画像
Pose Estimation 入力画像に対し姿勢推定を実行するノード
出力画像は未加工の画像
Semantic Segmentation 入力画像に対しセマンティックセグメンテーションを実行するノード
出力画像は未加工の画像
QR Code Detection 入力画像に対しQRコード検出を実行するノード
出力画像は未加工の画像
Analysis Node
FPS ノードの処理時間(ms)を元にFPSを算出するノード
「Add Slot」で処理時間入力端子を追加可能
RGB Histgram 入力画像のRGB各チャンネルのヒストグラムを算出して
グラフに表示するノード
BRISQUE BRISQUEを用いた画質評価を行うノード
※数値が高いほど悪い
Draw Node
Draw Information ClassificationノードやObject Detectionノードなどの
未加工画像を出力するノードの画像に対して、
解析結果を描画する
Image Concat 複数入力画像を並べて表示するノード
「Add Slot」で画像入力端子を追加可能
PutText 入力画像の左上にテキストを描画するノード
描画色はカラーマップで選択可能
処理時間入力端子を接続することで処理時間もあわせて描画
Result Image 画像を表示するノード
処理ノードよりも大きい表示を行う
また、ClassificationノードやObject Detectionノードなどの
未加工画像を出力するノードを接続すると解析結果を追加して描画
Result Image(Large) Result Imageノードよりも大きく表示
Other Node
ON/OFF Switch 入力画像を出力するか切り替えるノード
Video Writer 入力画像を動画をして書き出すノード
出力先、出力サイズ、FPSは「setting.json」にて指定
Preview Release Node

今後大きく仕様を変更する可能性のあるノード

MOT Object Detectionノードを入力しMOT(Multi Object Tracking)を実行するノード
Exec Python Code Pythonコードを実行するノード
入力画像用の変数は「input_image」
出力画像用の変数は「output_image」
Screen Capture デスクトップ全画面をキャプチャして出力するノード

Node(Another repository)

他リポジトリで公開しているノードです。
Image-Processing-Node-Editor で使用するには、各リポジトリのインストール方法に従ってください。

Input Node
YouTube YouTubeを読み込み、画像を出力するノード
URL欄にYouTube動画のURLを指定して「Start」ボタンを押してください
再生が始まるまでに少々時間がかかります
Interval(ms)でYouTube読み込み間隔を指定します

ToDo

  • RGB Histgramノードのグラフ部分が常に最前面に表示される問題の調査
  • 複数ノードを接続したノードを削除した際に接続線が残る問題の調査
  • Import機能がノード追加前にしか利用できない挙動の修正

Author

高橋かずひと(https://twitter.com/KzhtTkhs)

License

Image-Processing-Node-Editor is under Apache-2.0 license.

Image-Processing-Node-Editorのソースコード自体はApache-2.0 licenseですが、
各アルゴリズムのソースコードは、それぞれのライセンスに従います。
詳細は各ディレクトリ同梱のLICENSEファイルをご確認ください。

License(Image)

サンプルで表示している画像はフリー素材ぱくたそ様、NHKクリエイティブ・ライブラリー様からお借りしています。