OpenCV4で追加されたG-APIについて。





お品書き


お品書き

  • OpenCV4新機能、変更点ざっくりまとめ
  • G-APIとは
  • とりあえずコードを見る。
  • 動かす。
  • 感想

OpenCV4.0.0リリース!

めでたい。

新機能とか変更点

OpenCV4.0になって、いろいろ変更とか追加があったので詳細は公式
を読むのが一番詳しいですが本流のほうだけざっくり

  • OpenCVはC++11なライブラリになって、CのレガシーなコードはAPIの多くがは削除したよ!(includeにはopecv2しか入ってない)
  • DNN(深層学習ってやつ)の諸所が改善されているよ!(これはOpenCV3でcontribeからdnnモジュールが本流(?)に移ってから引き続きという感じ)
    • OpenCLが無理な環境用にVulkanを実験的に導入
  • パフォーマンス改善!(アプデ毎に高速化されてるし凄すぎて怖い)
  • QRコード検出とデコーダが乗っかった(地味にうれしい)
  • G-API追加!

G-APIってなんだ!!

OpenCV4から完全に新しく実装されたG-APIとかいうやつがいるのです。コイツは画像処理をグラフでとらえてノードとノードつなげて処理しようぜ!という感じのもの。ノードの分岐もよしなに出きるっぽい。
詳しい話はここ
に書いてあるのですが、書いてあることざっくりまとめると

  • 実験的API(ここ大事)
  • 4.0.0リリースの段階で開発途中である(4系の内に完成させるつもりみたい)
  • 手続き的じゃなくて式的に処理を宣言して画像処理ができたりする。
  • バックエンドはCPU onlyじゃなくてちゃんとGPUも環境によっては回せるみたい(GPUは実験段階)。
  • メモリがいい感じ(雑)

って感じなのですが、手続き的じゃなくて式的なのが重要なのかなって感じがしますね。(最近の流行りですねぇ)
とりあえず次にソースみますが、tensorflowとかいじったことあれば分かると馴染みがある感じだと思います。

「あ~ノードとノードつないでるぜ~」

みたいな感覚が得られます。

サンプルコード眺めてみる。

一番シンプルなサンプル眺めてみます。

実行結果は以下です。一応動画撮りましたがまぁ想像通りだと思いますw

雑にコメント入れておきました。
簡単ですね。非常に簡単です。
ノード結んで処理書いてますって感じ。
C++11ライクなのでstd::tieとかで良しなに受け取っていますね。C++11になるまでだとvectorを作ってから引数に投げる,みたいな形で受け取っていたので非常に良いです。

ちなみにこれがどれだけ良さみの深い書き方かというのを示すため、愚直に手続き的に書いてみます。

グラフのほうが分かりやすいですね…?

ちなみにOpenCV4になってCのAPIがいろいろ削除されたので、グローバルにあった

みたいな定数は使えなくなって、cv空間にある

を使うことが強制されるようになりました(これ自体はOpenCV3の時すでにありました)。なので、

などを使うときは気を付けましょう。

ちなみに速度差は対して出ませんでした。

感想

G-APIシンプルにシュと書けるので結構よさそうだなって思った(小並感)
cv::gapiの中身とか読むと、あ~C++11だ~ええんじゃ~みたいお気持ちになれるのでよろしい。

dnn系のフレームが画像処理の今の最先端ではありますが、OpenCVはやはり好きです。


neno

都内のJK大学生。趣味はドールと一緒にお出かけして撮影すること。C++とC#が好き。C++は主にリアルタイム画像処理, C#はUnity, WPF, UWP, .NET Coreとかいろいろ。ASPとXamarin学習中。 専攻はCV。最近のおもちゃはHoloLens。

あわせて読みたい

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

%d人のブロガーが「いいね」をつけました。