GPU を利用するには、ハードウェアがグラフィック プログラミング フレームワーク (OpenGL/OpenCV) に対応している必要がありますか? そのような API はどこにありますか?
OpenCL と OpenGL はどちらも GPU ドライバーによってハードウェア命令に変換されるため、これらのフレームワークをサポートするオペレーティング システム用のドライバーが必要です。ほとんどの GPU ドライバーは、OpenGL のいくつかのバージョンをサポートしているため、動作するはずです。
OpenGL 標準はKhronos Groupによって管理されており、 neheでいくつかのチュートリアルを見つけることができます。
OpenGL の仕組み
OpenGL は三角形を入力として受け入れ、描画が発行されたときの状態に従ってそれらを描画します。ほとんどの OpenGL 関数は、この状態を操作することによって実行される操作を変更するためにあります。画像操作は、入力画像をテクスチャとしてロードし、テクスチャをアクティブにしていくつかの頂点を描画することで実行できます。これにより、新しい画像 (または、より一般的なデータの新しい 2D グリッド) が生成されます。
バージョン > 2 (または適切な ARB 拡張機能) から、画像に対して実行される操作は、頂点およびフラグメント シェーダーと呼ばれる GLSL プログラムで制御できます (シェーダーは他にもありますが、これらは最も古いものです)。頂点シェーダーは頂点ごとに 1 回呼び出され、この結果は補間されてフラグメント シェーダーに転送されます。新しいフラグメント (ピクセル) が結果に書き込まれるたびに、フラグメント シェーダーが呼び出されます。
さて、これは画像の読み取りと書き込みに関するものですが、オブジェクト検出にどのように使用するのでしょうか? Vertices を使用して、入力テクスチャをビューポート全体に広げます。RGB カラーを計算して結果に格納する代わりに、グレースケール画像/グラデーション画像を計算し、ピクセルが特定のサイズのサイクルの中心にある場合、各ピクセルのこれらのテクスチャをチェックするフラグメントシェーダーを作成できます。または、周囲に比べて勾配が比較的高い (優れた機能) か、適切な並列アルゴリズムを見つけることができる他の何かがあります。(これは自分ではしていません)
最終結果を CPU に読み戻す必要があります (これを行う前に、シェーダーを使用してデータを縮小できる場合があります)。OpenCL はグラフィックスのような感じが少なく、自由度が高いですが、サポートが少ないです。