![]() |
OpenCV 5.0.0
Open Source Computer Vision
|
| 互換性 | OpenCV >= 4.11.0 |
本ドキュメントの範囲は、ARM64 アーキテクチャの Qualcomm チップセットにおいて FastCV を用いた OpenCV のアクセラレーションを有効化する手順を開発者に案内することである。Qualcomm 以外のチップセットや、Qualcomm Linux 以外の Linux プラットフォームで FastCV バックエンドを用いた OpenCV を有効化することは、現時点では範囲外である。
FastCV はコンピュータビジョンアプリケーション開発者に2つの主要な機能を提供する。
FastCV は統合バイナリ、すなわちアルゴリズムの2つの実装を含む単一のバイナリとしてリリースされている。
FastCV ライブラリは Qualcomm 独自のものであり、他の CV ライブラリと比較してさまざまなハードウェア上での CV アルゴリズムのより高速な実装を提供する。
OpenCV と FastCV の統合は次の2通りの方法で実装されている:
OpenCV のコンパイルについては Wiki ページを参照すること : https://github.com/opencv/opencv/wiki/Custom-OpenCV-Android-SDK-and-AAR-package-build
OpenCV リポジトリのコードをワークスペースにクローンしたら、FastCV HAL および/または拡張機能のコンパイルを有効にするため、以下のように -DWITH_FASTCV=ON フラグを opencv/platforms/android/default.config.py 内の arm64 エントリの cmake 変数に追加するか、このオプションを指定して新しいエントリを作成すること:
eSDK のインストール後、ESDK_ROOT を設定する:
SDK のツールとライブラリを環境に追加する:
次のメッセージが表示された場合:
ホストの LD_LIBRARY_PATH 環境変数を解除するだけでよい: unset LD_LIBRARY_PATH。
OpenCV のリポジトリをクローンする:
OpenCV の main リポジトリと、必要に応じて opencv_contrib リポジトリを任意のディレクトリにクローンする(SDK ディレクトリ内である必要はない)。
OpenCV をビルドする
ビルドディレクトリを作成し、そこに移動して、CMake でプロジェクトをビルドする:
FastCV ライブラリが更新された場合は、次の場所にある古い FastCV ライブラリを置き換えること:
次の場所にダウンロードした最新の FastCV ライブラリに:
検証
OpenCV ライブラリ、テストバイナリ、テストデータをターゲットにプッシュする。OpenCV の適合性テストまたは性能テストを実行する。実行時に libwebp.so.7 ライブラリが不足している場合は、以下のパスでそのライブラリを探してターゲットにプッシュする
FastCV ベースの OpenCV HAL API 一覧:
| OpenCV モジュール | OpenCV API | OpenCV の高速化に用いる基盤の FastCV API |
|---|---|---|
| IMGPROC | medianBlur | fcvFilterMedian3x3u8_v3 |
| sobel | fcvFilterSobel3x3u8s16 | |
| fcvFilterSobel5x5u8s16 | ||
| fcvFilterSobel7x7u8s16 | ||
| boxFilter | fcvBoxFilter3x3u8_v3 | |
| fcvBoxFilter5x5u8_v2 | ||
| fcvBoxFilterNxNf32 | ||
| adaptiveThreshold | fcvAdaptiveThresholdGaussian3x3u8_v2 | |
| fcvAdaptiveThresholdGaussian5x5u8_v2 | ||
| fcvAdaptiveThresholdMean3x3u8_v2 | ||
| fcvAdaptiveThresholdMean5x5u8_v2 | ||
| pyrDown | fcvPyramidCreateu8_v4 | |
| cvtColor | fcvColorRGB888toYCrCbu8_v3 | |
| fcvColorRGB888ToHSV888u8 | ||
| gaussianBlur | fcvFilterGaussian5x5u8_v3 | |
| fcvFilterGaussian3x3u8_v4 | ||
| warpPerspective | fcvWarpPerspectiveu8_v5 | |
| Canny | fcvFilterCannyu8 | |
| CORE | lut | fcvTableLookupu8 |
| norm | fcvHammingDistanceu8 | |
| multiply | fcvElementMultiplyu8u16_v2 | |
| transpose | fcvTransposeu8_v2 | |
| fcvTransposeu16_v2 | ||
| fcvTransposef32_v2 | ||
| meanStdDev | fcvImageIntensityStats_v2 | |
| flip | fcvFlipu8 | |
| fcvFlipu16 | ||
| fcvFlipRGB888u8 | ||
| rotate | fcvRotateImageu8 | |
| fcvRotateImageInterleavedu8 | ||
| multiply | fcvElementMultiplyu8 | |
| fcvElementMultiplys16 | ||
| fcvElementMultiplyf32 | ||
| addWeighted | fcvAddWeightedu8_v2 | |
| subtract | fcvImageDiffu8f32_v2 | |
| SVD & solve | fcvSVDf32_v2 | |
| gemm | fcvMatrixMultiplyf32_v2 | |
| fcvMultiplyScalarf32 | ||
| fcvAddf32_v2 |
FastCV ベースの OpenCV 拡張 API 一覧:
これらの OpenCV 拡張 API は cv::fastcv 名前空間の下に実装されている。
| OpenCV拡張API | OpenCV の高速化に用いる基盤の FastCV API |
|---|---|
| matmuls8s32 | fcvMatrixMultiplys8s32 |
| clusterEuclidean | fcvClusterEuclideanu8 |
| FAST10 | fcvCornerFast10InMaskScoreu8 |
| fcvCornerFast10InMasku8 | |
| fcvCornerFast10Scoreu8 | |
| fcvCornerFast10u8 | |
| FFT | fcvFFTu8 |
| IFFT | fcvIFFTf32 |
| fillConvexPoly | fcvFillConvexPolyu8 |
| houghLines | fcvHoughLineu8 |
| moments | fcvImageMomentsu8 |
| fcvImageMomentss32 | |
| fcvImageMomentsf32 | |
| runMSER | fcvMserInit |
| fcvMserNN8Init | |
| fcvMserExtu8_v3 | |
| fcvMserExtNN8u8 | |
| fcvMserNN8u8 | |
| fcvMserRelease | |
| remap | fcvRemapu8_v2 |
| remapRGBA | fcvRemapRGBA8888BLu8 |
| fcvRemapRGBA8888NNu8 | |
| resizeDown | fcvScaleDownBy2u8_v2 |
| fcvScaleDownBy4u8_v2 | |
| fcvScaleDownMNInterleaveu8 | |
| fcvScaleDownMNu8 | |
| meanShift | fcvMeanShiftu8 |
| fcvMeanShifts32 | |
| fcvMeanShiftf32 | |
| bilateralRecursive | fcvBilateralFilterRecursiveu8 |
| thresholdRange | fcvFilterThresholdRangeu8_v2 |
| bilateralFilter | fcvBilateralFilter5x5u8_v3 |
| fcvBilateralFilter7x7u8_v3 | |
| fcvBilateralFilter9x9u8_v3 | |
| calcHist | fcvImageIntensityHistogram |
| gaussianBlur | fcvFilterGaussian3x3u8_v4 |
| fcvFilterGaussian5x5u8_v3 | |
| fcvFilterGaussian5x5s16_v3 | |
| fcvFilterGaussian5x5s32_v3 | |
| fcvFilterGaussian11x11u8_v2 | |
| filter2D | fcvFilterCorrNxNu8 |
| fcvFilterCorrNxNu8s16 | |
| fcvFilterCorrNxNu8f32 | |
| sepFilter2D | fcvFilterCorrSepMxNu8 |
| fcvFilterCorrSep9x9s16_v2 | |
| fcvFilterCorrSep11x11s16_v2 | |
| fcvFilterCorrSep13x13s16_v2 | |
| fcvFilterCorrSep15x15s16_v2 | |
| fcvFilterCorrSep17x17s16_v2 | |
| fcvFilterCorrSepNxNs16 | |
| sobel3x3u8 | fcvImageGradientSobelPlanars8_v2 |
| sobel3x3u8 | fcvImageGradientSobelPlanars16_v2 |
| sobel3x3u8 | fcvImageGradientSobelPlanars16_v3 |
| sobel3x3u8 | fcvImageGradientSobelPlanarf32_v2 |
| sobel3x3u8 | fcvImageGradientSobelPlanarf32_v3 |
| sobel | fcvFilterSobel3x3u8_v2 |
| fcvFilterSobel3x3u8s16 | |
| fcvFilterSobel5x5u8s16 | |
| fcvFilterSobel7x7u8s16 | |
| DCT | fcvDCTu8 |
| iDCT | fcvIDCTs16 |
| sobelPyramid | fcvPyramidAllocate |
| fcvPyramidAllocate_v2 | |
| fcvPyramidAllocate_v3 | |
| fcvPyramidSobelGradientCreatei8 | |
| fcvPyramidSobelGradientCreatei16 | |
| fcvPyramidSobelGradientCreatef32 | |
| fcvPyramidDelete | |
| fcvPyramidDelete_v2 | |
| fcvPyramidCreatef32_v2 | |
| fcvPyramidCreateu8_v4 | |
| trackOpticalFlowLK | fcvTrackLKOpticalFlowu8_v3 |
| fcvTrackLKOpticalFlowu8 | |
| warpPerspective2Plane | fcv2PlaneWarpPerspectiveu8 |
| warpPerspective | fcvWarpPerspectiveu8_v5 |
| arithmetic_op | fcvAddu8 |
| fcvAdds16_v2 | |
| fcvAddf32 | |
| fcvSubtractu8 | |
| fcvSubtracts16 | |
| integrateYUV | fcvIntegrateImageYCbCr420PseudoPlanaru8 |
| normalizeLocalBox | fcvNormalizeLocalBoxu8 |
| fcvNormalizeLocalBoxf32 | |
| merge | fcvChannelCombine2Planesu8 |
| fcvChannelCombine3Planesu8 | |
| fcvChannelCombine4Planesu8 | |
| split | fcvDeinterleaveu8 |
| fcvChannelExtractu8 | |
| warpAffine | fcvTransformAffineu8_v2 |
| fcvTransformAffineClippedu8_v3 | |
| fcv3ChannelTransformAffineClippedBCu8 |
FastCV QDSP ベースの OpenCV 拡張 API 一覧: これらの OpenCV 拡張 API は cv::fastcv::dsp 名前空間の下に実装されている。この名前空間は、FastCV の Q サフィックス付き API を用いて QDSP (Qualcomm's Digital Signal Processor) による高速化を活用する最適化実装を提供する。これらの関数は DSP の初期化 (fcvQ6Init) を必要とする。
| OpenCV拡張API | OpenCV の高速化に用いる基盤の FastCV API |
|---|---|
| filter2D | fcvFilterCorr3x3s8_v2Q |
| fcvFilterCorrNxNu8Q | |
| fcvFilterCorrNxNu8s16Q | |
| fcvFilterCorrNxNu8f32Q | |
| FFT | fcvFFTu8Q |
| IFFT | fcvIFFTf32Q |
| fcvdspinit | fcvQ6Init |
| fcvdspdeinit | fcvQ6DeInit |
| Canny | fcvFilterCannyu8Q |
| sumOfAbsoluteDiffs | fcvSumOfAbsoluteDiffs8x8u8_v2Q |
| thresholdOtsu | fcvFilterThresholdOtsuu8Q |
FastCV QDSP ベースの OpenCV 拡張 API の使い方
本節では、QDSP(Qualcomm's Digital Signal Processor) 上で FastCV により高速化される OpenCV 拡張 API を使用するために必要な基本手順を概説する。
参考例: opencv_contrib リポジトリにある、OpenCV 拡張 API を使用した動作するテストケースを参照すること:opencv_contrib/modules/fastcv/test/test_thresh_dsp.cpp