OpenCV 5.0.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 5.0.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。

GComputationクラスは、キャプチャされた計算グラフを表す。GComputationオブジェクトは、ユーザーがG-APIで記述する式コードの境界を形成し、それをコンパイルして実行できるようにする。詳細...

#include <opencv2/gapi/gcomputation.hpp>

Collaboration diagram for cv::GComputation:

公開型

typedef std::function< GComputation()> Generator
 

公開メンバ関数

 GComputation (const Generator &gen)
 ジェネレータ関数を使って計算を定義する。
 
 GComputation (const std::vector< GMat > &ins, const std::vector< GMat > &outs)
 任意の入出力数を持つ計算を定義する。
 
GAPI_WRAP GComputation (GMat in, GMat out)
 単項(入力1つ・出力1つ)の計算を定義する。
 
GAPI_WRAP GComputation (GMat in, GScalar out)
 単項(入力1つ・出力1つ)の計算を定義する。
 
GAPI_WRAP GComputation (GMat in1, GMat in2, GMat out)
 二項(入力2つ・出力1つ)の計算を定義する。
 
 GComputation (GMat in1, GMat in2, GScalar out)
 二項(入力2つ・出力1つ)の計算を定義する。
 
GAPI_WRAP GComputation (GProtoInputArgs &&ins, GProtoOutputArgs &&outs)
 汎用のGComputationコンストラクタ。
 
void apply (const std::vector< cv::Mat > &ins, std::vector< cv::Mat > &outs, GCompileArgs &&args={})
 任意数の入出力を持つ計算を実行する(オンザフライでコンパイルする)。
 
void apply (cv::Mat in, cv::Mat &out, GCompileArgs &&args={})
 単項計算を実行する(オンザフライでコンパイルする)
 
void apply (cv::Mat in, cv::Scalar &out, GCompileArgs &&args={})
 単項計算を実行する(オンザフライでコンパイルする)
 
void apply (cv::Mat in1, cv::Mat in2, cv::Mat &out, GCompileArgs &&args={})
 二項計算を実行する(オンザフライでコンパイルする)
 
void apply (cv::Mat in1, cv::Mat in2, cv::Scalar &out, GCompileArgs &&args={})
 二項計算を実行する(オンザフライでコンパイルする)
 
void apply (GRunArgs &&ins, GRunArgsP &&outs, GCompileArgs &&args={})
 グラフをオンザフライでコンパイルし、入力データベクトルに対して即座に実行する。
 
template<typename... Ts>
auto compile (const Ts &... meta_and_compile_args) -> typename std::enable_if< detail::are_meta_descrs_but_last< Ts... >::value &&std::is_same< GCompileArgs, detail::last_type_t< Ts... > >::value, GCompiled >::type
 
template<typename... Ts>
auto compile (const Ts &... metas) -> typename std::enable_if< detail::are_meta_descrs< Ts... >::value, GCompiled >::type
 
GCompiled compile (GMetaArgs &&in_metas, GCompileArgs &&args={})
 特定の入力フォーマットに対して計算をコンパイルする。
 
template<typename... Ts>
auto compileStreaming (const Ts &... meta_and_compile_args) -> typename std::enable_if< detail::are_meta_descrs_but_last< Ts... >::value &&std::is_same< GCompileArgs, detail::last_type_t< Ts... > >::value, GStreamingCompiled >::type
 
template<typename... Ts>
auto compileStreaming (const Ts &... metas) -> typename std::enable_if< detail::are_meta_descrs< Ts... >::value, GStreamingCompiled >::type
 
GAPI_WRAP GStreamingCompiled compileStreaming (GCompileArgs &&args={})
 ストリーミングモード用に計算をコンパイルする。
 
GAPI_WRAP GStreamingCompiled compileStreaming (GMetaArgs &&in_metas, GCompileArgs &&args={})
 ストリーミングモード用に計算をコンパイルする。
 

限定公開メンバ関数

template<typename... Ts, int... IIs>
GStreamingCompiled compileStreaming (const std::tuple< Ts... > &meta_and_compile_args, detail::Seq< IIs... >)
 
void recompile (GMetaArgs &&in_metas, GCompileArgs &&args)
 

詳細説明

GComputationクラスは、キャプチャされた計算グラフを表す。GComputationオブジェクトは、ユーザーがG-APIで記述する式コードの境界を形成し、それをコンパイルして実行できるようにする。

G-APIの計算は入出力データオブジェクトによって定義される。G-APIは、指定された出力と入力を接続する演算を自動的に追跡し、実行すべき呼び出しグラフを構築する。以下の例は、エッジ検出のためのSobel演算子の計算(\(G = \sqrt{G_x^2 + G_y^2}\))を表している:

このオブジェクト宣言によって、パイプライン全体を次のようにキャプチャできる:

cv::GComputation sobelEdge(cv::GIn(in), cv::GOut(out));

呼び出しグラフを再構築すべき入出力データオブジェクトは、特別なラッパーcv::GIncv::GOutを使って渡される。G-APIは、入力から出力への経路を形成する演算を自動的に追跡し、実行グラフを適切に構築する。

cv::GComputationは、それを定義しているデータオブジェクトの所有権を持たないことに注意する。さらに、同じ式の上に複数のGComputationオブジェクトを定義することもできる。例えば、画像勾配が既に事前計算されていることを前提とする、より小さなパイプラインは次のように定義できる:

cv::GComputation sobelEdgeSub(cv::GIn(gx, gy), cv::GOut(out));

結果として得られるグラフは2つの入力を期待し、1つの出力を生成する。この場合、gx/gyデータオブジェクトがcv::gapi::Sobel演算子の結果であるかどうかは問題にならない。G-APIはこれらのデータオブジェクトに到達した時点で式の展開と内部グラフの構築を停止する。

GComputationの定義方法は重要である。その定義はグラフのプロトコル、すなわちグラフをどのように使うべきかを規定するからである。プロトコルは入力数、出力数、および入出力の形状によって定義される。

上記の例では、sobelEdge は入力として1つの Mat を期待し、1つの Mat を生成する。一方、sobelEdgeSub は入力として2つの Mat を期待し、1つの Mat を生成する。GComputation のプロトコルは、他の計算メソッド(cv::GComputation::compile()cv::GComputation::apply())の使い方を定義する。例えば、グラフが2つの GMat 入力で定義されている場合、実行のために2つの cv::Mat オブジェクトを apply() に渡さなければならない。GComputation は実行時にプロトコルの正しさをチェックするため、apply() に異なる個数のオブジェクトを渡したり、cv::Mat の代わりに cv::Scalar を渡したりすると、C++ ソースとしてはコンパイルできても実行時に例外が発生する。G-API には、このような型チェックをコンパイル時に導入する型付きラッパー cv::GComputationT<> も付属している。

cv::GComputation自体は、グラフが何であるかをキャプチャするだけの軽量なオブジェクトである。コンパイル済みグラフ(実際にデータを処理するもの)はGCompiledクラスで表される。指定したコンパイルオプションでコンパイル済みグラフを生成するにはcompile()メソッドを使用する。cv::GComputationは、オンザフライの暗黙的なグラフコンパイルによってデータを処理するためにも使用できる。詳細はapply()を参照のこと。

GComputationは参照カウント方式のオブジェクトである。いったん定義されると、そのすべてのコピーは同じインスタンスを参照する。

参照
GCompiled

型定義メンバ詳解

◆ Generator

構築子と解体子の詳解

◆ GComputation() [1/7]

cv::GComputation::GComputation ( const Generator & gen)
Python:
cv.GComputation(ins, outs) -> <GComputation object>
cv.GComputation(in_, out) -> <GComputation object>
cv.GComputation(in1, in2, out) -> <GComputation object>

ジェネレータ関数を使って計算を定義する。

グラフは、その構築の時点でラムダ式を使ってその場で直接定義できる:

cv::GComputation sobelEdgeGen([](){
cv::GMat gx = cv::gapi::Sobel(in, CV_32F, 1, 0);
cv::GMat gy = cv::gapi::Sobel(in, CV_32F, 0, 1);
return cv::GComputation(in, out);
});

これは、すべての一時オブジェクト(cv::GMat)や名前空間をラムダ式のスコープに局所化でき、おそらく不要なオブジェクトや情報で親スコープを汚染しないため、有用である。

引数
gencv::GComputation を返すジェネレータ関数。Generatorを参照する。

◆ GComputation() [2/7]

GAPI_WRAP cv::GComputation::GComputation ( GProtoInputArgs && ins,
GProtoOutputArgs && outs )
Python:
cv.GComputation(ins, outs) -> <GComputation object>
cv.GComputation(in_, out) -> <GComputation object>
cv.GComputation(in1, in2, out) -> <GComputation object>

汎用のGComputationコンストラクタ。

入出力オブジェクトを接続する演算のフローとして指定された、所定のプロトコルを持つ新しいグラフを構築する。渡された境界が無効な場合、例えば指定された出力と入力の間に機能的な依存関係(経路)が存在しない場合は例外を投げる。

引数
ins入力データベクトル。
outs出力データベクトル。
覚え書き
GProtoInputArgs/GProtoOutputArgsオブジェクトを直接構築せず、代わりにcv::GIn()/cvGOut()ラッパー関数を使用すること。
参照
G-API データ型

◆ GComputation() [3/7]

GAPI_WRAP cv::GComputation::GComputation ( GMat in,
GMat out )
Python:
cv.GComputation(ins, outs) -> <GComputation object>
cv.GComputation(in_, out) -> <GComputation object>
cv.GComputation(in1, in2, out) -> <GComputation object>

単項(入力1つ・出力1つ)の計算を定義する。

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

引数
in定義された単項計算の入力 GMat
out定義された単項計算の出力 GMat

◆ GComputation() [4/7]

GAPI_WRAP cv::GComputation::GComputation ( GMat in,
GScalar out )
Python:
cv.GComputation(ins, outs) -> <GComputation object>
cv.GComputation(in_, out) -> <GComputation object>
cv.GComputation(in1, in2, out) -> <GComputation object>

単項(入力1つ・出力1つ)の計算を定義する。

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

引数
in定義された単項計算の入力 GMat
out定義された単項計算の出力 GScalar

◆ GComputation() [5/7]

GAPI_WRAP cv::GComputation::GComputation ( GMat in1,
GMat in2,
GMat out )
Python:
cv.GComputation(ins, outs) -> <GComputation object>
cv.GComputation(in_, out) -> <GComputation object>
cv.GComputation(in1, in2, out) -> <GComputation object>

二項(入力2つ・出力1つ)の計算を定義する。

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

引数
in1定義された二項計算の第1の入力 GMat
in2定義された二項計算の第2の入力 GMat
out定義された二項演算の出力GMat

◆ GComputation() [6/7]

cv::GComputation::GComputation ( GMat in1,
GMat in2,
GScalar out )
Python:
cv.GComputation(ins, outs) -> <GComputation object>
cv.GComputation(in_, out) -> <GComputation object>
cv.GComputation(in1, in2, out) -> <GComputation object>

二項(入力2つ・出力1つ)の計算を定義する。

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

引数
in1定義された二項計算の第1の入力 GMat
in2定義された二項計算の第2の入力 GMat
out定義された二項演算の出力GScalar

◆ GComputation() [7/7]

cv::GComputation::GComputation ( const std::vector< GMat > & ins,
const std::vector< GMat > & outs )
Python:
cv.GComputation(ins, outs) -> <GComputation object>
cv.GComputation(in_, out) -> <GComputation object>
cv.GComputation(in1, in2, out) -> <GComputation object>

任意の入出力数を持つ計算を定義する。

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

引数
insこの計算への入力GMatのベクトル
outsこの計算からの出力GMatのベクトル

計算の入出力数がコンパイル時に分からない場合、このオーバーロードを使用する。例えば、指定された段数の画像ピラミッドを構築するためにグラフをプログラム的に生成する場合などである。

メンバ関数詳解

◆ apply() [1/6]

void cv::GComputation::apply ( const std::vector< cv::Mat > & ins,
std::vector< cv::Mat > & outs,
GCompileArgs && args = {} )
Python:
cv.GComputation.apply(callback[, args]) -> retval

任意数の入出力を持つ計算を実行する(オンザフライでコンパイルする)。

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

引数
ins計算で処理する入力 cv::Mat オブジェクトのベクトル。
outs計算で生成する出力 cv::Mat オブジェクトのベクトル。
args内部のコンパイル処理に渡すコンパイル引数。

ins/outsベクトルの要素数は、このGComputationを定義するために使われた入出力数と一致しなければならない。

◆ apply() [2/6]

void cv::GComputation::apply ( cv::Mat in,
cv::Mat & out,
GCompileArgs && args = {} )
Python:
cv.GComputation.apply(callback[, args]) -> retval

単項計算を実行する(オンザフライでコンパイルする)

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

引数
in単項計算のための入力 cv::Mat
out単項演算用の出力 cv::Mat
args内部のコンパイル処理に渡すコンパイル引数。

◆ apply() [3/6]

void cv::GComputation::apply ( cv::Mat in,
cv::Scalar & out,
GCompileArgs && args = {} )
Python:
cv.GComputation.apply(callback[, args]) -> retval

単項計算を実行する(オンザフライでコンパイルする)

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

引数
in単項計算のための入力 cv::Mat
out単項演算の出力cv::Scalar
args内部のコンパイル処理に渡すコンパイル引数。

◆ apply() [4/6]

void cv::GComputation::apply ( cv::Mat in1,
cv::Mat in2,
cv::Mat & out,
GCompileArgs && args = {} )
Python:
cv.GComputation.apply(callback[, args]) -> retval

二項計算を実行する(オンザフライでコンパイルする)

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

引数
in1二項計算のための1番目の入力 cv::Mat
in2二項計算のための2番目の入力 cv::Mat
out二項演算用の出力 cv::Mat
args内部のコンパイル処理に渡すコンパイル引数。

◆ apply() [5/6]

void cv::GComputation::apply ( cv::Mat in1,
cv::Mat in2,
cv::Scalar & out,
GCompileArgs && args = {} )
Python:
cv.GComputation.apply(callback[, args]) -> retval

二項計算を実行する(オンザフライでコンパイルする)

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

引数
in1二項計算のための1番目の入力 cv::Mat
in2二項計算のための2番目の入力 cv::Mat
out二項演算の出力cv::Scalar
args内部のコンパイル処理に渡すコンパイル引数。

◆ apply() [6/6]

void cv::GComputation::apply ( GRunArgs && ins,
GRunArgsP && outs,
GCompileArgs && args = {} )
Python:
cv.GComputation.apply(callback[, args]) -> retval

グラフをオンザフライでコンパイルし、入力データベクトルに対して即座に実行する。

入出力データオブジェクトの個数は GComputation のプロトコルと一致しなければならない。また、ホストデータオブジェクトの型(cv::Mat, cv::Scalar)は、プロトコルのデータオブジェクト(cv::GMat, cv::GScalar)の形状と一致しなければならない。不一致がある場合、実行時例外が生成される。

内部的には、指定された入力フォーマット構成に対してcv::GCompiledオブジェクトが生成され、それが入力データに対して即座に実行される。cv::GComputationapply()内で生成されたコンパイル済みオブジェクトをキャッシュする。このメソッドが次回同じ入力パラメータ(画像フォーマット、画像解像度など)で呼び出された場合、内部のコンパイル済みグラフは再コンパイルされることなく再利用される。新しいメタデータがキャッシュされたものと一致しない場合、内部のコンパイル済みグラフは再生成される。

覚え書き
compile()は、類似したオブジェクトがapply()を介してキャッシュされているかどうかに関係なく、常にコンパイル処理を起動し、新しいGCompiledオブジェクトを生成する。
引数
ins処理する入力データのベクトル。GRunArgsオブジェクトを手動で生成せず、代わりにcv::gin()ラッパーを使用すること。
outs結果を格納する出力データのベクトル。このベクトル内の cv::Mat オブジェクトは空でよく、G-API が必要な形式と次元で自動的に初期化する。GRunArgsP オブジェクトを手動で作成せず、代わりに cv::gout() ラッパーを使用すること。
args内部のコンパイル処理に渡すコンパイル引数のリスト。GCompileArgsオブジェクトを手動で生成せず、代わりにcv::compile_args()ラッパーを使用すること。
参照
G-API データ型, G-API グラフコンパイル引数

◆ compile() [1/3]

template<typename... Ts>
auto cv::GComputation::compile ( const Ts &... meta_and_compile_args) -> typename std::enable_if<detail::are_meta_descrs_but_last<Ts...>::value && std::is_same<GCompileArgs, detail::last_type_t<Ts...> >::value, GCompiled>::type
inline

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

コンパイル済みオブジェクトを生成するためのメタデータ記述子の可変長パラメータパックを取り、続いてこの処理のコンパイル引数を表すGCompileArgsオブジェクトを取る。

戻り値
GCompiled。指定された入力パラメータ用に特化してコンパイルされた実行可能な計算。

◆ compile() [2/3]

template<typename... Ts>
auto cv::GComputation::compile ( const Ts &... metas) -> typename std::enable_if<detail::are_meta_descrs<Ts...>::value, GCompiled>::type
inline

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

コンパイル済みオブジェクトを生成するためのメタデータ記述子の可変長パラメータパックを取る。

戻り値
GCompiled。指定された入力パラメータ用に特化してコンパイルされた実行可能な計算。

◆ compile() [3/3]

GCompiled cv::GComputation::compile ( GMetaArgs && in_metas,
GCompileArgs && args = {} )

特定の入力フォーマットに対して計算をコンパイルする。

このメソッドはコンパイル処理を起動し、指定されたフォーマットのデータを処理できる新しいGCompiledオブジェクトを生成する。異なるフォーマットのデータをコンパイル済みの計算に渡すと、実行時例外が生成される。

引数
in_metas入力メタデータ構成のベクトル。cv::descr_of() を使って実データオブジェクト(cv::Matcv::Scalar など)からメタデータを取得するか、自分で作成する。
argsこのコンパイル処理のコンパイル引数。コンパイル引数は生成される実行可能オブジェクトの種類に直接影響する。例えば、計算の実行にどのカーネル(ひいてはどのデバイス)が使われるかなどである。
戻り値
GCompiled。指定された入力パラメータ用に特化してコンパイルされた実行可能な計算。
参照
G-API グラフコンパイル引数

◆ compileStreaming() [1/5]

template<typename... Ts, int... IIs>
GStreamingCompiled cv::GComputation::compileStreaming ( const std::tuple< Ts... > & meta_and_compile_args,
detail::Seq< IIs... >  )
inlineprotected
Python:
cv.GComputation.compileStreaming(in_metas[, args]) -> retval
cv.GComputation.compileStreaming([, args]) -> retval
cv.GComputation.compileStreaming(callback[, args]) -> retval

◆ compileStreaming() [2/5]

template<typename... Ts>
auto cv::GComputation::compileStreaming ( const Ts &... meta_and_compile_args) -> typename std::enable_if<detail::are_meta_descrs_but_last<Ts...>::value && std::is_same<GCompileArgs, detail::last_type_t<Ts...> >::value, GStreamingCompiled>::type
inline
Python:
cv.GComputation.compileStreaming(in_metas[, args]) -> retval
cv.GComputation.compileStreaming([, args]) -> retval
cv.GComputation.compileStreaming(callback[, args]) -> retval

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

コンパイル済みオブジェクトを生成するためのメタデータ記述子の可変長パラメータパックを取り、続いてこの処理のコンパイル引数を表すGCompileArgsオブジェクトを取る。

戻り値
GStreamingCompiled。指定された入力パラメータ用に特化してコンパイルされた、ストリーミング志向の実行可能な計算。

◆ compileStreaming() [3/5]

template<typename... Ts>
auto cv::GComputation::compileStreaming ( const Ts &... metas) -> typename std::enable_if<detail::are_meta_descrs<Ts...>::value, GStreamingCompiled>::type
inline
Python:
cv.GComputation.compileStreaming(in_metas[, args]) -> retval
cv.GComputation.compileStreaming([, args]) -> retval
cv.GComputation.compileStreaming(callback[, args]) -> retval

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

コンパイル済みオブジェクトを生成するためのメタデータ記述子の可変長パラメータパックを取る。

戻り値
GStreamingCompiled。指定された入力パラメータ用に特化してコンパイルされた、ストリーミング志向の実行可能な計算。

◆ compileStreaming() [4/5]

GAPI_WRAP GStreamingCompiled cv::GComputation::compileStreaming ( GCompileArgs && args = {})
Python:
cv.GComputation.compileStreaming(in_metas[, args]) -> retval
cv.GComputation.compileStreaming([, args]) -> retval
cv.GComputation.compileStreaming(callback[, args]) -> retval

ストリーミングモード用に計算をコンパイルする。

このメソッドはコンパイル処理を起動し、任意のフォーマットのビデオストリームデータを処理できる新しいGStreamingCompiledオブジェクトを生成する。内部のメカニズムは新しい入力ビデオストリームごとに自動的に調整されるが、すべての既存バックエンドがこれをサポートしているわけではないことに注意する(reshape()を参照)。

引数
argsこのコンパイル処理のコンパイル引数。コンパイル引数は生成される実行可能オブジェクトの種類に直接影響する。例えば、計算の実行にどのカーネル(ひいてはどのデバイス)が使われるかなどである。
戻り値
GStreamingCompiled。任意の入力画像フォーマット用にコンパイルされた、ストリーミング志向の実行可能な計算。
参照
G-API グラフコンパイル引数

◆ compileStreaming() [5/5]

GAPI_WRAP GStreamingCompiled cv::GComputation::compileStreaming ( GMetaArgs && in_metas,
GCompileArgs && args = {} )
Python:
cv.GComputation.compileStreaming(in_metas[, args]) -> retval
cv.GComputation.compileStreaming([, args]) -> retval
cv.GComputation.compileStreaming(callback[, args]) -> retval

ストリーミングモード用に計算をコンパイルする。

このメソッドはコンパイル処理を起動し、指定されたフォーマットのビデオストリームデータを処理できる新しいGStreamingCompiledオブジェクトを生成する。異なるフォーマットのストリームをコンパイル済みの計算に渡すと、実行時例外が生成される。

引数
in_metas入力メタデータ構成のベクトル。cv::descr_of() を使って実データオブジェクト(cv::Matcv::Scalar など)からメタデータを取得するか、自分で作成する。
argsこのコンパイル処理のコンパイル引数。コンパイル引数は生成される実行可能オブジェクトの種類に直接影響する。例えば、計算の実行にどのカーネル(ひいてはどのデバイス)が使われるかなどである。
戻り値
GStreamingCompiled。指定された入力パラメータ用に特化してコンパイルされた、ストリーミング志向の実行可能な計算。
参照
G-API グラフコンパイル引数

◆ recompile()

void cv::GComputation::recompile ( GMetaArgs && in_metas,
GCompileArgs && args )
protected

このクラス詳解は次のファイルから抽出されました: