feat: 切换后端至PaddleOCR-NCNN,切换工程为CMake

1.项目后端整体迁移至PaddleOCR-NCNN算法,已通过基本的兼容性测试
2.工程改为使用CMake组织,后续为了更好地兼容第三方库,不再提供QMake工程
3.重整权利声明文件,重整代码工程,确保最小化侵权风险

Log: 切换后端至PaddleOCR-NCNN,切换工程为CMake
Change-Id: I4d5d2c5d37505a4a24b389b1a4c5d12f17bfa38c
This commit is contained in:
wangzhengyang
2022-05-10 09:54:44 +08:00
parent ecdd171c6f
commit 718c41634f
10018 changed files with 3593797 additions and 186748 deletions

View File

@ -0,0 +1,10 @@
# This file is part of OpenCV project.
# It is subject to the license terms in the LICENSE file found in the top-level directory
# of this distribution and at http://opencv.org/license.html
set(SEMIHOSTING_SUFFIX semihosting)
add_subdirectory(include)
set(RAW_PIXEL_INCLUDE ${CMAKE_CURRENT_BINARY_DIR}/include)
add_subdirectory(histogram)
add_subdirectory(norm)

View File

@ -0,0 +1,27 @@
# Arm semihosting
This folder contain a toolchain file and a couple of examples for
building OpenCV based applications that can run in an [Arm
semihosting](https://developer.arm.com/documentation/100863/latest)
setup.
OpenCV can be compiled to target a semihosting platform as follows:
```
cmake ../opencv/ \
-DCMAKE_TOOLCHAIN_FILE=../opencv/platforms/semihosting/aarch64-semihosting.toolchain.cmake \
-DSEMIHOSTING_TOOLCHAIN_PATH=/path/to/baremetal-toolchain/bin/ \
-DBUILD_EXAMPLES=ON -GNinja
```
A barematel toolchain for targeting aarch64 semihosting can be found
[here](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads),
under `aarch64-none-elf`.
The code of the examples in the `norm` and `histogram` folders can be
executed with qemu in Linux userspace:
```
qemu-aarch64 ./bin/example_semihosting_histogram
qemu-aarch64 ./bin/example_semihosting_norm
```

View File

@ -0,0 +1,26 @@
# This file is part of OpenCV project.
# It is subject to the license terms in the LICENSE file found in the top-level directory
# of this distribution and at http://opencv.org/license.html
set(PROJECT_NAME histogram)
project(${PROJECT_NAME})
ocv_install_example_src(histogram *.cpp *.hpp CMakeLists.txt)
set(LOCAL_DEPS
opencv_core
opencv_imgproc
${OPENCV_MODULES_PUBLIC}
${OpenCV_LIB_COMPONENTS})
ocv_check_dependencies(${LOCAL_DEPS})
if(NOT OCV_DEPENDENCIES_FOUND)
return()
endif()
ocv_define_sample(histogram histogram.cpp ${SEMIHOSTING_SUFFIX})
ocv_include_modules_recurse(${LOCAL_DEPS})
target_include_directories(${histogram} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
target_include_directories(${histogram} PRIVATE ${RAW_PIXEL_INCLUDE})
ocv_target_link_libraries(${histogram} PRIVATE ${OPENCV_LINKER_LIBS}
${LOCAL_DEPS})

View File

@ -0,0 +1,43 @@
// This file is part of OpenCV project.
// It is subject to the license terms in the LICENSE file found in the top-level directory
// of this distribution and at http://opencv.org/license.html
#include <opencv2/imgproc.hpp>
#include <opencv2/imgcodecs.hpp>
#include <cstdint>
#include <array>
#include <iostream>
#include "raw_pixels.hpp"
#define IMG_ROWS 100
#define IMG_COLS 100
static_assert(IMG_ROWS * IMG_COLS <= RAW_PIXELS_SIZE, "Incompatible size");
int main(void)
{
// Number of experiment runs
int no_runs = 2;
// https://docs.opencv.org/master/d3/d63/classcv_1_1Mat.html
cv::Mat src_new(IMG_ROWS, IMG_COLS, CV_8UC1, (void *)raw_pixels);
// Set parameters
int imgCount = 1;
const int channels[] = {0};
cv::Mat mask = cv::Mat();
cv::Mat hist;
int dims = 1;
const int hist_sizes[] = {256};
float Range[] = {0,256};
const float *ranges[] = {Range};
// Run calc Hist
for(int i=0; i < no_runs; i++){
std::cout << "Running iteration # "<< i << std::endl;
cv::calcHist(&src_new, imgCount, channels, mask, hist, dims, hist_sizes, ranges);
}
return 0;
}

View File

@ -0,0 +1,16 @@
# Populate a C array with random data.
set(RAW_PIXELS_SIZE 102400)
set(RAW_PIXELS_HEADER ${CMAKE_CURRENT_BINARY_DIR}/raw_pixels.hpp)
set(RAW_PIXELS_HEADER_IN ${CMAKE_CURRENT_SOURCE_DIR}/raw_pixels.hpp.in)
set(RAW_PIXEL_VALUES "")
# Seed the random number generator.
string(RANDOM LENGTH 8 ALPHABET 0123456789abcdf RANDOM_SEED 314 number)
math(EXPR LOOP_RANGE "${RAW_PIXELS_SIZE} - 1")
foreach(i RANGE ${LOOP_RANGE})
string(RANDOM LENGTH 8 ALPHABET 0123456789abcdf number)
string(CONCAT RAW_PIXEL_VALUES ${RAW_PIXEL_VALUES} "0x${number}, \\\n")
endforeach()
configure_file(${RAW_PIXELS_HEADER_IN} ${RAW_PIXELS_HEADER})

View File

@ -0,0 +1,11 @@
#ifndef RAW_PIXELS_HPP
#define RAW_PIXELS_HP
#include <cstdint>
#cmakedefine RAW_PIXEL_VALUES @RAW_PIXEL_VALUES@
#cmakedefine RAW_PIXELS_SIZE @RAW_PIXELS_SIZE@
static std::uint32_t raw_pixels[RAW_PIXELS_SIZE] = {
RAW_PIXEL_VALUES
};
#endif //RAW_PIXELS_HPP

View File

@ -0,0 +1,25 @@
# This file is part of OpenCV project.
# It is subject to the license terms in the LICENSE file found in the top-level directory
# of this distribution and at http://opencv.org/license.html
set(PROJECT_NAME norm)
project(${PROJECT_NAME})
ocv_install_example_src(norm *.cpp *.hpp CMakeLists.txt)
set(LOCAL_DEPS
opencv_core
${OPENCV_MODULES_PUBLIC}
${OpenCV_LIB_COMPONENTS})
ocv_check_dependencies(${LOCAL_DEPS})
if(NOT OCV_DEPENDENCIES_FOUND)
return()
endif()
ocv_define_sample(norm norm.cpp ${SEMIHOSTING_SUFFIX})
ocv_include_modules_recurse(${LOCAL_DEPS})
target_include_directories(${norm} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
target_include_directories(${norm} PRIVATE ${RAW_PIXEL_INCLUDE})
ocv_target_link_libraries(${norm} PRIVATE ${OPENCV_LINKER_LIBS}
${LOCAL_DEPS})

View File

@ -0,0 +1,33 @@
// This file is part of OpenCV project.
// It is subject to the license terms in the LICENSE file found in the top-level directory
// of this distribution and at http://opencv.org/license.html
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <cstdint>
#include <array>
#include <iostream>
#include "raw_pixels.hpp"
#define IMG_ROWS 100
#define IMG_COLS 100
static_assert(IMG_ROWS * IMG_COLS <= RAW_PIXELS_SIZE, "Incompatible size");
int main(void)
{
// Number of experiment runs
int no_runs = 2;
// https://docs.opencv.org/master/d3/d63/classcv_1_1Mat.html
cv::Mat src(IMG_ROWS, IMG_COLS, CV_8UC1, (void *)raw_pixels);
// Run calc Hist
for(int i=0; i < no_runs; i++){
std::cout << "Running iteration # "<< i << std::endl;
cv::norm(src);
}
return 0;
}