树莓派5 raspberry pi 5 8G 车辆识别开发环境部署 HyperLPR-3.0 3

树莓派5 raspberry pi 5 8G 车辆识别开发环境部署 HyperLPR-3.0 3

一、

cd  /opt/openAI/project/HyperLPR-3.0

CMakeLists.txt 更新如下:

cmake_minimum_required(VERSION 3.14)
project(HyperLPR3-Source)

set(CMAKE_CXX_STANDARD 17)

set(LIBRARY_NAME hyperlpr3)

option( LINUX_FETCH_MNN             "Fetch and build MNN from git"  ON )
option( LINUX_USE_3RDPARTY_OPENCV   "Linux platform using pre-compiled OpenCV library from 3rdparty_hyper_inspire_op" OFF)
option( BUILD_SHARE                 "Build shared libs"                 ON )
option( BUILD_SAMPLES               "Build samples demo"                OFF )
option( BUILD_TEST                  "Build unit-test exec"              OFF )


set(PATH_3RDPARTY ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty_hyper_inspire_op)

# find all cpp file
file(GLOB_RECURSE SRC_BUFFER_MODULE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/cpp/src/buffer_module/*.cpp)
file(GLOB_RECURSE SRC_CONTEXT_MODULE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/cpp/src/context_module/*.cpp)
file(GLOB_RECURSE SRC_NN_MODULE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/cpp/src/nn_module/*.cpp)
file(GLOB_RECURSE SRC_NN_IMPL_MODULE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/cpp/src/nn_implementation_module/*.cpp)
file(GLOB SRC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/cpp/src/*.cpp)
# local files
set(SRC_INFERENCE_HELPER_LOCAL_FILES ${CMAKE_CURRENT_SOURCE_DIR}/cpp/src/inference_helper_module/inference_helper.cpp cpp/src/inference_helper_module/inference_helper_mnn.cpp)
# include src header
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/cpp/src)


set(SRC_C_CPP_FILES ${SRC_BUFFER_MODULE_FILES}
        ${SRC_CONTEXT_MODULE_FILES}
        ${SRC_LOADER_MODULE_FILES}
        ${SRC_NN_MODULE_FILES}
        ${SRC_NN_IMPL_MODULE_FILES}
        ${SRC_SLOG_MODULE_FILES}
        ${SRC_FILES}
        ${SRC_INFERENCE_HELPER_LOCAL_FILES})

# find all c file for c_api
file(GLOB_RECURSE CAPI_CC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/cpp/c_api/*.cc)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/cpp/c_api)

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/cpp/platform)

# must use mnn
add_definitions("-DINFERENCE_HELPER_ENABLE_MNN")

set(LINK_THIRD_LIBS pthread MNN m)

if (ANDROID)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 ")
    set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS}")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
    file(GLOB_RECURSE NATIVE_CPP_FILES ${CMAKE_CURRENT_SOURCE_DIR}/cpp/platform/jni/android/*.cpp)

    find_package(OpenCV REQUIRED)
    include_directories(${MNN_INCLUDE_DIRS})
    link_directories(${MNN_LIBS})

    add_library(${LIBRARY_NAME} SHARED ${NATIVE_CPP_FILES} ${SRC_C_CPP_FILES} ${CAPI_CC_FILES})
    target_link_libraries(${LIBRARY_NAME} ${OpenCV_LIBS} jnigraphics log -Wl,--whole-archive MNN -Wl,--no-whole-archive)

elseif(IOS)
    # TODO: Not implement
else ()
    # Build Linux or MacOS
    if (BUILD_CUDA)
        # TODO: Not implement
    elseif (BUILD_LINUX_ARM7)
        message("[BUILD]Linux Armv7")
        add_definitions("-DLINUX_ARM7")
        set(PLAT linux-arm32)
        # MNN Third party dependence
        set(MNN_INCLUDE_DIRS ${PATH_3RDPARTY}/MNN-2.2.0/${PLAT}-static/include)
        set(MNN_LIBS ${PATH_3RDPARTY}/MNN-2.2.0/${PLAT}-static/lib)
        # OpenCV Third party dependence
        set(OpenCV_DIR ${PATH_3RDPARTY}/opencv/opencv-linux-armhf/share/OpenCV)
        set(OpenCV_STATIC_INCLUDE_DIR ${PATH_3RDPARTY}/opencv/opencv-linux-armhf/include/)
        find_package(OpenCV REQUIRED)

    elseif (BUILD_LINUX_ARM64)
        # TODO: Not implement
    else()
        # Local Build
        message("[BUILD]Local")
        if (APPLE)
            set(PLAT darwin)
        else()
            set(PLAT linux)
        endif ()

        # Fetch MNN from git if the option is enabled
        if (LINUX_FETCH_MNN)
            # Include FetchContent module
            include(FetchContent)
            # Fetch MNN
            message("Downloading MNN from https://github.com/alibaba/MNN.git, this may take a while.")
            FetchContent_Declare(
                    mnn
                    GIT_REPOSITORY https://github.com/alibaba/MNN.git
                    GIT_TAG        2.2.0
            )
            set(MNN_BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
            set(MNN_BUILD_TOOLS OFF CACHE BOOL "" FORCE)

            FetchContent_MakeAvailable(mnn)
            set(MNN_INCLUDE_DIRS ${mnn_SOURCE_DIR}/include)
            set(MNN_LIBS ${mnn_BINARY_DIR})
        else()
            # MNN Third party dependence
           # set(MNN_INCLUDE_DIRS ${PATH_3RDPARTY}/MNN-2.2.0/${PLAT}/include)
           # set(MNN_LIBS ${PATH_3RDPARTY}/MNN-2.2.0/${PLAT}/lib)
             # 优先使用用户传入的MNN路径,未传入则使用3rdparty自带版本
            if(NOT DEFINED MNN_INCLUDE_DIRS)
                set(MNN_INCLUDE_DIRS ${PATH_3RDPARTY}/MNN-2.2.0/${PLAT}/include)
            endif()
            if(NOT DEFINED MNN_LIBS)
                set(MNN_LIBS ${PATH_3RDPARTY}/MNN-2.2.0/${PLAT}/lib)
            endif()
        endif()


        if(LINUX_USE_3RDPARTY_OPENCV)
            # OpenCV Third party dependence (static)
            set(OpenCV_DIR ${PATH_3RDPARTY}/opencv-4.5.1/${PLAT}/lib/cmake/opencv4)
            set(OpenCV_STATIC_INCLUDE_DIR ${PATH_3RDPARTY}/opencv-4.5.1/${PLAT}/include/opencv4)
        endif()
        find_package(OpenCV REQUIRED)

    endif()
endif()

if (NOT ANDROID)
    # mnn
    message(MNN_INCLUDE_DIRS=${MNN_INCLUDE_DIRS})
    message(MNN_LIBS=${MNN_LIBS})
    include_directories(${MNN_INCLUDE_DIRS})
    link_directories(${MNN_LIBS})
    # opencv
    message(OpenCV_Version: ${OpenCV_VERSION})
    message(libraries: ${OpenCV_LIBS})
    message(libraries path: ${OpenCV_DIR})
    message(OpenCV_INCLUDE_DIRS=${OpenCV_STATIC_INCLUDE_DIR})
    include_directories(${OpenCV_STATIC_INCLUDE_DIR})

    if (BUILD_SAMPLES)
        # built samples exec
       # add_executable(ContextSample ${CMAKE_CURRENT_SOURCE_DIR}/cpp/samples/sample_context.cpp ${SRC_C_CPP_FILES})
       # target_link_libraries(ContextSample ${OpenCV_LIBS} ${LINK_THIRD_LIBS} )

       # add_executable(SplitDetSample ${CMAKE_CURRENT_SOURCE_DIR}/cpp/samples/sample_split_model.cpp ${SRC_C_CPP_FILES})
       # target_link_libraries(SplitDetSample ${OpenCV_LIBS} ${LINK_THIRD_LIBS} )

       # add_executable(CAPISample ${CMAKE_CURRENT_SOURCE_DIR}/cpp/samples/sample_capi.cpp ${SRC_C_CPP_FILES} ${CAPI_CC_FILES})
       # target_link_libraries(CAPISample ${OpenCV_LIBS} ${LINK_THIRD_LIBS} )

        if (BUILD_SAMPLES)
        # built samples exec
        add_executable(ContextSample ${CMAKE_CURRENT_SOURCE_DIR}/cpp/samples/sample_context.cpp ${SRC_C_CPP_FILES})
        target_link_directories(ContextSample PRIVATE ${MNN_LIBS})
        target_link_libraries(ContextSample ${OpenCV_LIBS} ${LINK_THIRD_LIBS} -L${MNN_LIBS} -Wl,-rpath,${MNN_LIBS})
        
        add_executable(SplitDetSample ${CMAKE_CURRENT_SOURCE_DIR}/cpp/samples/sample_split_model.cpp ${SRC_C_CPP_FILES})
        target_link_directories(SplitDetSample PRIVATE ${MNN_LIBS})
        target_link_libraries(SplitDetSample ${OpenCV_LIBS} ${LINK_THIRD_LIBS} -L${MNN_LIBS} -Wl,-rpath,${MNN_LIBS})
        
        add_executable(CAPISample ${CMAKE_CURRENT_SOURCE_DIR}/cpp/samples/sample_capi.cpp ${SRC_C_CPP_FILES} ${CAPI_CC_FILES})
        target_link_directories(CAPISample PRIVATE ${MNN_LIBS})
        target_link_libraries(CAPISample ${OpenCV_LIBS} ${LINK_THIRD_LIBS} -L${MNN_LIBS} -Wl,-rpath,${MNN_LIBS})
    endif()
    endif()

    if (BUILD_TEST)
        if (ENABLE_BENCHMARK_TEST)
            message([Test]Open Benchmark Test)
            add_definitions(-DENABLE_BENCHMARK_TEST)
        endif ()
        file(GLOB_RECURSE TEST_C_CPP_FILES ${CMAKE_CURRENT_SOURCE_DIR}/cpp/test/*.cpp)
        add_executable(UnitTest ${TEST_C_CPP_FILES} ${SRC_C_CPP_FILES} ${CAPI_CC_FILES})
        target_link_libraries(UnitTest ${OpenCV_LIBS} ${LINK_THIRD_LIBS})
    endif()

    if (BUILD_SHARE)
        # build dynamic library
      #  add_library(${LIBRARY_NAME} SHARED ${SRC_C_CPP_FILES} ${CAPI_CC_FILES})
      #  target_link_libraries(${LIBRARY_NAME} ${OpenCV_LIBS} ${LINK_THIRD_LIBS} )
      #  set(SRC_RKNN_RELATED ${CMAKE_CURRENT_SOURCE_DIR}/cpp/src/inference_helper_rknn.cpp)
      #  set(SRC_C_CPP_FILES ${SRC_C_CPP_FILES} )
        
         # build dynamic library
        add_library(${LIBRARY_NAME} SHARED ${SRC_C_CPP_FILES} ${CAPI_CC_FILES})
        # 核心修复:显式链接MNN库,确保链接器能找到
        target_link_directories(${LIBRARY_NAME} PRIVATE ${MNN_LIBS})
        target_link_libraries(${LIBRARY_NAME} ${OpenCV_LIBS} ${LINK_THIRD_LIBS} -L${MNN_LIBS} -Wl,-rpath,${MNN_LIBS})
        set(SRC_RKNN_RELATED ${CMAKE_CURRENT_SOURCE_DIR}/cpp/src/inference_helper_rknn.cpp)
        set(SRC_C_CPP_FILES ${SRC_C_CPP_FILES} )
        

    endif()

endif()

set(CMAKE_INSTALL_PREFIX ${PROJECT_BINARY_DIR}/install/hyperlpr3)
message(CMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX})

# Add HyperLPR3-related files and directories to the installation list
install(TARGETS ${LIBRARY_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cpp/c_api/hyper_lpr_sdk.h DESTINATION ${CMAKE_INSTALL_PREFIX}/include)

# Install resource file
install(DIRECTORY resource DESTINATION ${CMAKE_INSTALL_PREFIX})

# Install Resource files You can also install sample programs if they are available
if (BUILD_SAMPLES)
    install(TARGETS ContextSample DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
    install(TARGETS CAPISample DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
    install(TARGETS SplitDetSample DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
endif()

 

二、

cd /opt/openAI/project/HyperLPR-3.0/command

build_release_linux_share.sh 修改脚本如下:

#!/bin/bash
uname_s=$(uname -s)
dir_name="linux"
if [ "$uname_s" = "Darwin" ];then
  echo "MacOS"
  dir_name="darwin"
fi
BUILD_DIR=build/${dir_name}
# 🔥 彻底清理旧 build(必须!防止残留下载逻辑)
rm -rf ${BUILD_DIR}
mkdir -p ${BUILD_DIR}
cd ${BUILD_DIR} || exit

# 🔥 核心配置:LINUX_FETCH_MNN=OFF 彻底关闭下载
cmake ../.. \
  -DCMAKE_BUILD_TYPE=Release \
  -DBUILD_SHARE=ON \
  -DBUILD_SAMPLES=ON \
  -DBUILD_TEST=OFF \
  -DLINUX_FETCH_MNN=OFF \
  -DMNN_INCLUDE_DIRS=/opt/openAI/mnn/include \
  -DMNN_LIBS=/opt/openAI/mnn/lib \
  -DOpenCV_DIR=/usr/lib/aarch64-linux-gnu/cmake/opencv4 \
  -DOpenCV_STATIC_INCLUDE_DIR=/usr/include/opencv4 \
  -DCMAKE_CXX_FLAGS="-O3 -march=armv8.2-a+crc+crypto+fp16 -mtune=cortex-a76 -ffast-math -funroll-loops -fopenmp" \
  -DCMAKE_EXE_LINKER_FLAGS="-L/opt/openAI/mnn/lib -Wl,-rpath,/opt/openAI/mnn/lib"

make -j4
make install

三、或者如下

1、
CMakeLists.txt 复制到下列位置
/opt/openAI/project/HyperLPR-3.0/CMakeLists.txt
2、
build_release_linux_share.sh复制到下列位置
/opt/openAI/project/HyperLPR-3.0/command/build_release_linux_share.sh

3、执行如下
cd /opt/openAI/project/HyperLPR-3.0
# 🔥 彻底删除旧 build 目录(防止残留旧配置触发下载)
rm -rf build
# 重新编译 删除 chmod a+x command/build_release_linux_share.sh

sh command/build_release_linux_share.sh

您可能还喜欢...

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注