mirror of
https://github.com/opencv/opencv.git
synced 2025-06-11 03:33:28 +08:00
Merge pull request #26910 from CodeLinaro:FastcvHAL_Documentation
Documentation to enable FastCV based OpenCV HAL and Extensions #26910 ### Pull Request Readiness Checklist See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request - [x] I agree to contribute to the project under Apache 2 License. - [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV - [ ] The PR is proposed to the proper branch - [ ] There is a reference to the original bug report and related work - [ ] There is accuracy test, performance test and test data in opencv_extra repository, if applicable Patch to opencv_extra has the same branch name. - [ ] The feature is well documented and sample code can be built with the project CMake
This commit is contained in:
parent
3f1e7fcb8f
commit
a62b78d6e3
@ -0,0 +1,246 @@
|
|||||||
|
Building OpenCV with FastCV {#tutorial_building_fastcv}
|
||||||
|
===========================
|
||||||
|
|
||||||
|
| | |
|
||||||
|
| -: | :- |
|
||||||
|
| Compatibility | OpenCV >= 4.11.0 |
|
||||||
|
|
||||||
|
Enable OpenCV with FastCV for Qualcomm Chipsets
|
||||||
|
-----------------------------------------------
|
||||||
|
|
||||||
|
This document scope is to guide the Developers to enable OpenCV Acceleration with FastCV for the
|
||||||
|
Qualcomm chipsets with ARM64 architecture. Entablement of OpenCV with FastCV back-end on non-Qualcomm
|
||||||
|
chipsets or Linux platforms other than [Qualcomm Linux](https://www.qualcomm.com/developer/software/qualcomm-linux)
|
||||||
|
is currently out of scope.
|
||||||
|
|
||||||
|
About FastCV
|
||||||
|
------------
|
||||||
|
|
||||||
|
FastCV provides two main features to computer vision application developers:
|
||||||
|
|
||||||
|
- A library of frequently used computer vision (CV) functions, optimized to run efficiently on a wide variety of Qualcomm’s Snapdragon devices.
|
||||||
|
- A clean processor-agnostic hardware acceleration API, under which chipset vendors can hardware accelerate FastCV functions on Qualcomm’s Snapdragon hardware.
|
||||||
|
|
||||||
|
FastCV is released as a unified binary, a single binary containing two implementations of the algorithms:
|
||||||
|
|
||||||
|
- Generic implementation runs on Arm® architecture and is referred to as FastCV for Arm architecture.
|
||||||
|
- Implementation runs only on Qualcomm® Snapdragon™ chipsets and is called FastCV for Snapdragon.
|
||||||
|
|
||||||
|
FastCV library is Qualcomm proprietary and provides faster implementation of CV algorithms on various hardware as compared to other CV libraries.
|
||||||
|
|
||||||
|
OpenCV Acceleration with FastCV HAL and Extensions
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
OpenCV and FastCV integration is implemented in two ways:
|
||||||
|
|
||||||
|
1. FastCV-based HAL for basic computer vision and arithmetic algorithms acceleration.
|
||||||
|
2. FastCV module in opencv_contrib with custom algorithms and FastCV function wrappers that do not fit generic OpenCV interface or behaviour.
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Supported Platforms
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
1. Android : Qualcomm Chipsets with the Android from Snapdragon 8 Gen 1 onwards(https://www.qualcomm.com/products/mobile/snapdragon/smartphones#product-list)
|
||||||
|
2. Linux : Qualcomm Linux Program related boards mentioned in [Hardware](https://www.qualcomm.com/developer/software/qualcomm-linux/hardware)
|
||||||
|
|
||||||
|
Compiling OpenCV with FastCV for Android
|
||||||
|
----------------------------------------
|
||||||
|
|
||||||
|
1. **Follow Wiki page for OpenCV Compilation** : https://github.com/opencv/opencv/wiki/Custom-OpenCV-Android-SDK-and-AAR-package-build
|
||||||
|
|
||||||
|
Once the OpenCV repository code is cloned into the workspace, please add `-DWITH_FASTCV=ON` flag to cmake vars as below to arm64 entry
|
||||||
|
in `opencv/platforms/android/default.config.py` or create new one with the option to enable FastCV HAL and/or extenstions compilation:
|
||||||
|
|
||||||
|
```
|
||||||
|
ABI("3", "arm64-v8a", None, 24, cmake_vars=dict(WITH_FASTCV='ON')),
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Remaining steps can be followed as mentioned in [the wiki page](https://github.com/opencv/opencv/wiki/Custom-OpenCV-Android-SDK-and-AAR-package-build)
|
||||||
|
|
||||||
|
Compiling OpenCV with FastCV for Qualcomm Linux
|
||||||
|
-----------------------------------------------
|
||||||
|
|
||||||
|
@note: Only Ubuntu 22.04 is supported as host platform for eSDK deployment.
|
||||||
|
|
||||||
|
1. Install eSDK by following [Qualcomm® Linux Documentation](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-51/install-sdk.html)
|
||||||
|
|
||||||
|
2. After installing the eSDK, set the ESDK_ROOT:
|
||||||
|
|
||||||
|
```
|
||||||
|
export ESDK_ROOT=<eSDK install location>
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Add SDK tools and libraries to your environment:
|
||||||
|
|
||||||
|
```
|
||||||
|
source environment-setup-armv8-2a-qcom-linux
|
||||||
|
```
|
||||||
|
|
||||||
|
If you encounter the following message:
|
||||||
|
```
|
||||||
|
Your environment is misconfigured, you probably need to 'unset LD_LIBRARY_PATH'
|
||||||
|
but please check why this was set in the first place and that it's safe to unset.
|
||||||
|
The SDK will not operate correctly in most cases when LD_LIBRARY_PATH is set.
|
||||||
|
```
|
||||||
|
just unset your host `LD_LIBRARY_PATH` environment variable: `unset LD_LIBRARY_PATH`.
|
||||||
|
|
||||||
|
4. Clone OpenCV Repositories:
|
||||||
|
|
||||||
|
Clone the OpenCV main and optionally opencv_contrib repositories into any directory
|
||||||
|
(it does not need to be inside the SDK directory).
|
||||||
|
|
||||||
|
```
|
||||||
|
git clone https://github.com/opencv/opencv.git
|
||||||
|
git clone https://github.com/opencv/opencv_contrib.git
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Build OpenCV
|
||||||
|
|
||||||
|
Create a build directory, navigate into it and build the project with CMake there:
|
||||||
|
|
||||||
|
```
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=aarch64 -DWITH_FASTCV=ON -DBUILD_SHARED_LIBS=ON -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules/fastcv/ ../opencv
|
||||||
|
make -j$(nproc)
|
||||||
|
```
|
||||||
|
|
||||||
|
If the FastCV library is updated, please replace the old FastCV libraries located at:
|
||||||
|
```
|
||||||
|
<ESDK_PATH>\qcom-wayland_sdk\tmp\sysroots\qcs6490-rb3gen2-vision-kit\usr\lib
|
||||||
|
```
|
||||||
|
with the latest FastCV libraries downloaded in:
|
||||||
|
```
|
||||||
|
build\3rdparty\fastcv\libs
|
||||||
|
```
|
||||||
|
|
||||||
|
6. Validate
|
||||||
|
|
||||||
|
Push the OpenCV libraries, test binaries and test data on to the target. Execute the OpenCV conformance or performance tests.
|
||||||
|
During runtime, If libwebp.so.7 lib is missing, find the lib in the below Path and push it on the target
|
||||||
|
```
|
||||||
|
<ESDK_PATH>\qcom-wayland_sdk\tmp\sysroots\qcs6490-rb3gen2-vision-kit\usr\lib\libwebp.so.7
|
||||||
|
```
|
||||||
|
|
||||||
|
HAL and Extension list of APIs
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
**FastCV based OpenCV HAL APIs list :**
|
||||||
|
|
||||||
|
|OpenCV module |OpenCV API | Underlying FastCV API for OpenCV acceleration |
|
||||||
|
|---------------|------------------|-----------------------------------------------|
|
||||||
|
|IMGPROC |medianBlur |fcvFilterMedian3x3u8_v3 |
|
||||||
|
| |sobel |fcvFilterSobel3x3u8s16 |
|
||||||
|
| | |fcvFilterSobel5x5u8s16 |
|
||||||
|
| | |fcvFilterSobel7x7u8s16 |
|
||||||
|
| |boxFilter |fcvBoxFilter3x3u8_v3 |
|
||||||
|
| | |fcvBoxFilter5x5u8_v2 |
|
||||||
|
| |adaptiveThreshold |fcvAdaptiveThresholdGaussian3x3u8_v2 |
|
||||||
|
| | |fcvAdaptiveThresholdGaussian5x5u8_v2 |
|
||||||
|
| | |fcvAdaptiveThresholdMean3x3u8_v2 |
|
||||||
|
| | |fcvAdaptiveThresholdMean5x5u8_v2 |
|
||||||
|
| |pyrUp & pyrDown |fcvPyramidCreateu8_v4 |
|
||||||
|
| |cvtColor |fcvColorRGB888toYCrCbu8_v3 |
|
||||||
|
| | |fcvColorRGB888ToHSV888u8 |
|
||||||
|
| |GaussianBlur |fcvFilterGaussian5x5u8_v3 |
|
||||||
|
| | |fcvFilterGaussian3x3u8_v4 |
|
||||||
|
| |cvWarpPerspective |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 |
|
||||||
|
|
||||||
|
|
||||||
|
**FastCV based OpenCV Extensions APIs list :**
|
||||||
|
|
||||||
|
|OpenCV Extension APIs |Underlying FastCV API for OpenCV acceleration |
|
||||||
|
|----------------------|----------------------------------------------|
|
||||||
|
|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 |
|
||||||
|
|resizeDownBy2 |fcvScaleDownBy2u8_v2 |
|
||||||
|
|resizeDownBy4 |fcvScaleDownBy4u8_v2 |
|
||||||
|
|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 |
|
||||||
|
|sobel3x3u9 |fcvImageGradientSobelPlanars16_v2 |
|
||||||
|
|sobel3x3u10 |fcvImageGradientSobelPlanars16_v3 |
|
||||||
|
|sobel3x3u11 |fcvImageGradientSobelPlanarf32_v2 |
|
||||||
|
|sobel3x3u12 |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 |
|
BIN
doc/tutorials/introduction/building_fastcv/fastcv_hal_extns.png
Normal file
BIN
doc/tutorials/introduction/building_fastcv/fastcv_hal_extns.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 25 KiB |
@ -30,6 +30,7 @@ Introduction to OpenCV {#tutorial_table_of_content_introduction}
|
|||||||
- @subpage tutorial_arm_crosscompile_with_cmake
|
- @subpage tutorial_arm_crosscompile_with_cmake
|
||||||
- @subpage tutorial_crosscompile_with_multiarch
|
- @subpage tutorial_crosscompile_with_multiarch
|
||||||
- @subpage tutorial_building_tegra_cuda
|
- @subpage tutorial_building_tegra_cuda
|
||||||
|
- @subpage tutorial_building_fastcv
|
||||||
- @ref tutorial_ios_install
|
- @ref tutorial_ios_install
|
||||||
|
|
||||||
##### Usage basics
|
##### Usage basics
|
||||||
|
Loading…
Reference in New Issue
Block a user