![]() |
OpenCV 4.12.0
开源计算机视觉
|
| 兼容性 | OpenCV >= 4.11.0 |
本文档旨在指导开发者在高通芯片组(采用 ARM64 架构)上启用 FastCV 加速 OpenCV。目前,在非高通芯片组或除 高通 Linux 之外的 Linux 平台上启用带有 FastCV 后端的 OpenCV 不在本文档范围内。
FastCV 为计算机视觉应用程序开发者提供两个主要功能:
FastCV 以统一二进制文件的形式发布,即一个包含算法两种实现的二进制文件:
与其他 CV 库相比,FastCV 库是高通专有的,可在各种硬件上提供更快的 CV 算法实现。
OpenCV 和 FastCV 的集成通过两种方式实现:
请按照 OpenCV 编译的 Wiki 页面进行操作:https://github.com/opencv/opencv/wiki/Custom-OpenCV-Android-SDK-and-AAR-package-build
将 OpenCV 存储库代码克隆到工作区后,请将 -DWITH_FASTCV=ON 标志添加到 cmake 变量中,如下所示,添加到 opencv/platforms/android/default.config.py 中的 arm64 条目,或创建一个新的条目,其中包含启用 FastCV HAL 和/或扩展编译的选项。
安装 eSDK 后,设置 ESDK_ROOT
将 SDK 工具和库添加到您的环境中
如果您遇到以下消息
只需取消设置您的主机 LD_LIBRARY_PATH 环境变量:unset LD_LIBRARY_PATH。
克隆 OpenCV 存储库
将 OpenCV 主存储库和可选的 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(高通数字信号处理器)加速。这些函数需要 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
本节概述了使用 FastCV 在 QDSP(高通数字信号处理器)上加速的 OpenCV 扩展 API 所需的基本步骤。
参考示例:参考在 opencv_contrib 存储库中使用 OpenCV 扩展 API 的有效测试用例:opencv_contrib/modules/fastcv/test/test_thresh_dsp.cpp