要約
Electron + Vue.js で、OpenCVをビジュアルプログラミング的に実行できるアプリ(仮称: OpenCVFlow)を自分の勉強がてら作ってみました。
上の動画のように、画像処理を定義したブロックを並べ、それをリンクでつなげることで、処理を順次実行して結果を確認、保存することができます。機能としてはそれほど多くなく、実用まではいかないかもしれませんが、なにか参考になれば幸いです。(個人的には、ElectronやVue.jsを本格的に使用するのは初めてでしたが、それなりに動くものが作れて満足しています。)
採用技術
- アプリケーションエンジン: Electron
- フロントエンドフレームワーク: Vue.js
- UIフレームワーク: Photon
- OpenCVライブラリ: opencv4nodejs
- デザインパターン: アトミックデザイン
アトミックデザインについて
今回は、UIを構築するためのデザインパターンとして、アトミックデザインを採用してみました。アトミックデザインの詳細については、他の記事を参照してください。アトミックデザインに基づいた設計・コーディングは初めてでしたが、Vue.jsの単一ファイルコンポーネントとの親和性がとてもよかったです。
Atoms・Molecules
本アプリでは、各種画像処理を定義する視覚的な要素として、下の図のようなものを採用し、"ブロック"と名付けました。
このブロックは、以下に示すようなさらに細かい要素を組み合わせて形成されており、この細かい要素1つ1つをAtom、ブロック1つをMoleculeと定義いたしました。
ブロックの左側に伸びている線と付随する点は、"リンク"と名付けた別のMoleculeで定義しておりますので、ここでは除外します。
Organisms・Templates
Organisms・Templatesは、以下に示すように、アプリの左側の処理選択の領域、中央の処理のフローを組み立てるキャンバス領域、処理結果を表示する領域の1つ1つをOrganismとして定義し、それを組み合わせて1つのページのTemplateとしました。
登録している画像処理の種類
現在、本アプリで実行できる画像処理の種類は以下のとおりです。どちらかというとGUI作成の練習をメインとして作成したので、処理の種類は多くありません。各種、詳細な画像処理については、こちらを参照してください。
- グレースケール
- 二値化
- BINARY
- TOZERO
- OTSU
- フィルタ
- Average
- Gaussian
- 勾配・エッジ処理
- Sobel
- Laplacian
- Canny
GUI機能
GUIとして機能は以下のとおりです。
処理対象の画像を入力
"File Input"ブロックをダブルクリックし、降りてくるダイアログで入力。
処理の実行と保存
画像を入力し、各種ブロックをリンクで繋げると、"File Input"につながるブロックの上部に実行ボタンが表示されるので、クリックして実行できます。処理が終わったら、右側に処理結果が表示されますので、各処理結果のラベルをクリックすると、画像が保存できます。
処理のパラメータを変更
画像処理を定義している各種ブロック(グレースケール以外)をダブルクリックすると、処理のパラメータを変更するためのダイアログが表示されます。
分岐の作成
一連の処理の途中で分岐を作成することが可能です。途中にフィルタ処理を入れて別の処理フローを定義するといったことに利用できます。分岐したブロックの実行ボタンを押すと、そのブロックから、"File Input"ブロックまでの一連のブロックが順に実行されます。別の分岐の処理は実行されません。
ブロックやリンクの削除
各種ブロックやリンクは、ポインタを合わせて右クリックをすることで削除することができます。誤った処理を繋いでしまった場合などに利用できます。







