cmake的RKNN 工程分析和opencv相关知识

部署运行你感兴趣的模型镜像

1.概要

2.内容

OpenCV_LIBS 开源计算机视觉库

OpenCV_LIBS 是指在OpenCV(Open Source Computer Vision Library,开源计算机视觉库)配置和使用过程中,需要链接的OpenCV库文件集合。OpenCV是一个基于BSD许可发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它由Intel公司俄罗斯团队发起并参与开发,可以在商业和研究领域中免费使用。

OpenCV提供了大量的库文件,这些库文件按照功能被划分到不同的模块中。以下是一些主要的OpenCV库文件及其功能概述:

  1. 核心库(core):包含OpenCV的基础结构以及基本操作,如基本数据结构、绘图函数、数组操作相关函数、动态数据结构等。

  2. 图像处理库(imgproc):提供图像滤波、几何变换、直方图、特征检测与目标检测等图像处理功能。

  3. 视频相关库(video):包括运动估计、背景分离、对象跟踪等视频处理相关内容。

  4. 特征探测描述库(features2d):处理图像特征点,如特征检测、描述与匹配等。

  5. 目标检测库(objdetect):主要用于图像目标检测,如检测Haar特征。

  6. GUI库(highgui):包含图像和视频窗口函数库,提供图形用户界面相关的功能,如媒体的I/O输入输出、视频捕捉、图像和视频的编码解码等。

  7. 校准和三维重建库(calib3d):主要涉及相机校准和三维重建,包括基本的多视角几何算法、单个立体摄像头标定、物体姿态估计、立体相似性算法、3D信息的重建等。

  8. 机器学习库(ml):提供统计分类、回归和数据聚类等机器学习算法。

  9. 其他库:如视频输入输出库(videoio)、快速近似最近邻库(flann)、图像文件读取与保存库(imgcodecs)、计算摄影库(photo)等,分别提供视频读写、高维空间搜索、图像文件处理、图像修复和去噪等功能。

在配置和使用OpenCV时,OpenCV_LIBS通常指的是在编译或链接阶段需要指定的OpenCV库文件列表。这些库文件的具体名称和数量取决于你的OpenCV版本以及你的项目需求。例如,在Linux系统下,这些库文件通常以.so(共享库)或.a(静态库)为后缀。

配置OpenCV_LIBS的具体方法取决于你的开发环境和构建系统。在一些情况下,你可以通过设置环境变量或在构建脚本中明确指定库文件的路径和名称来配置OpenCV_LIBS。在更高级的场景中,如使用CMake作为构建系统时,可以通过find_package(OpenCV REQUIRED)命令自动查找并配置OpenCV的库文件和头文件路径。

需要注意的是,随着OpenCV版本的更新和迭代,具体的库文件和模块可能会有所变化。因此,建议参考你所使用的OpenCV版本的官方文档或社区资源来获取最准确的信息。

3.关联链接

RKNN 和rknn-toolkit2-优快云博客

cmake的RKNN 工程分析和opencv相关等知识_rknn opencv-优快云博客

cmake的RKNN 工程分析和opencv相关等知识_opencv rknn-优快云博客

4.关联知识 

1.工程解析

#!/bin/bash
set -e

ROOT_PWD=$( cd "$( dirname $0 )" && cd -P "$( dirname "$SOURCE" )" && pwd )

# for aarch64
GCC_COMPILER=/usr/local/arm64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu

# build
BUILD_DIR=${ROOT_PWD}/build/build_linux_aarch64

if [[ ! -d "${BUILD_DIR}" ]]; then
  mkdir -p ${BUILD_DIR}
fi

cd ${BUILD_DIR}
cmake ../.. \
    -DCMAKE_C_COMPILER=${GCC_COMPILER}-gcc \
    -DCMAKE_CXX_COMPILER=${GCC_COMPILER}-g++
make -j4
make install
cd -

这个Bash脚本是为了在Linux环境下使用特定的ARM64 GCC编译器来构建一个项目。下面是对脚本各部分的详细解释:

  1. 设置脚本在遇到错误时立即退出

    set -e

    这行代码的作用是,如果脚本中的任何命令执行失败(即返回非零状态),脚本将立即退出。这有助于快速发现问题,避免错误累积导致更大的问题。

  2. 计算项目根目录的路径

    ROOT_PWD=$( cd "$( dirname $0 )" && cd -P "$( dirname "$SOURCE" )" && pwd )

    这行代码试图计算脚本所在目录的上一级目录作为项目的根目录。不过,这里有一个潜在的问题:$SOURCE变量在脚本中并未定义,这可能是一个错误或者遗漏。通常,获取脚本所在目录的正确方法是直接使用$(dirname "$0")或者类似的方式,而不需要$SOURCE

  3. 定义ARM64 GCC编译器的路径

    GCC_COMPILER=/usr/local/arm64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu

    这里指定了用于编译的ARM64 GCC编译器的路径。这个路径应该指向安装ARM64 GCC交叉编译工具链的位置。

  4. 设置构建目录

    BUILD_DIR=${ROOT_PWD}/build/build_linux_aarch64

    定义了构建输出目录的路径。这个目录将用于存放CMake生成的中间文件和编译输出。

  5. 检查并创建构建目录

    if [[ ! -d "${BUILD_DIR}" ]]; then
    mkdir -p ${BUILD_DIR}
    fi

    如果构建目录不存在,则创建它。mkdir -p命令会创建所有必需的父目录。

  6. 配置并编译项目

    cd ${BUILD_DIR}
    cmake ../.. \
    -DCMAKE_C_COMPILER=${GCC_COMPILER}-gcc \
    -DCMAKE_CXX_COMPILER=${GCC_COMPILER}-g++
    make -j4
    make install
    cd -
    • 首先,切换到构建目录。
    • 使用cmake配置项目,指定C和C++编译器。${GCC_COMPILER}-gcc${GCC_COMPILER}-g++分别指向GCC的C和C++编译器。
    • 使用make -j4命令并行编译项目,-j4表示使用4个并行任务来加速编译过程。
    • 执行make install安装编译好的程序或库。
    • 最后,使用cd -命令返回到之前的目录。

注意事项

  • 脚本中的$SOURCE变量未定义,可能需要替换或修正以正确计算项目根目录。
  • 确保指定的编译器路径正确,并且相应的交叉编译工具链已经安装。
  • 并行编译的-j参数可以根据你的系统资源(如CPU核心数)进行调整。

2.加载一个RKNN(Rockchip Neural Network)模型时遇到了问题

E RKNN: [02:34:04.605] Invalid RKNN model version 6
E RKNN: [02:34:04.605] rknn_init, load model failed!

 

这条错误信息表明在尝试初始化并加载一个RKNN(Rockchip Neural Network)模型时遇到了问题。错误的具体内容是“Invalid RKNN model version 6”,意味着所提供的RKNN模型版本6是无效的或不被当前的环境或库版本所支持。

这里有几个可能的解决步骤:

  1. 检查模型兼容性
    • 确认你的RKNN模型版本是否与你的硬件平台或软件库版本兼容。有时候,新版本的模型可能不被旧版本的库支持。
  2. 更新或降级RKNN工具包
    • 如果你正在使用的RKNN工具包版本过旧,可能无法识别新版本的模型。尝试更新到最新版本的RKNN工具包。
    • 相反,如果模型是为旧版本工具包设计的,你可能需要将RKNN工具包降级到兼容的版本。
  3. 重新生成模型
    • 如果可能,尝试使用与当前RKNN工具包版本兼容的设置重新生成或转换模型。
  4. 查阅文档和社区支持
    • 查看RKNN的官方文档,了解不同版本之间的兼容性问题。
    • 访问相关的开发者社区或论坛,看看是否有其他用户遇到类似问题,并找到可能的解决方案。
  5. 联系技术支持
    • 如果上述步骤都无法解决问题,考虑联系RKNN的技术支持团队寻求帮助。

处理这类问题时,确保所有软件和硬件组件都兼容是非常重要的,这通常可以通过查阅官方发布的兼容性列表或更新日志来确认。

3.CMake无法找到你指定的C和C++编译器

-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:4 (project):
  The CMAKE_C_COMPILER:

    /usr/local/arm64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc

  is not a full path to an existing compiler tool.

  Tell CMake where to find the compiler by setting either the environment
  variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to
  the compiler, or to the compiler name if it is in the PATH.


CMake Error at CMakeLists.txt:4 (project):
  The CMAKE_CXX_COMPILER:

    /usr/local/arm64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++

  is not a full path to an existing compiler tool.

  Tell CMake where to find the compiler by setting either the environment
  variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
  to the compiler, or to the compiler name if it is in the PATH.


-- Configuring incomplete, errors occurred!
See also "/home/topeet/rknn_sanli_20240908/rknn_sanli/build/build_linux_aarch64/CMakeFiles/CMakeOutput.log".
See also "/home/topeet/rknn_sanli_20240908/rknn_sanli/build/build_linux_aarch64/CMakeFiles/CMakeError.log".

这个错误信息表明CMake无法找到你指定的C和C++编译器。错误指出给定的编译器路径不存在或不是一个有效的编译器工具路径。以下是一些解决这个问题的步骤:

  1. 检查编译器路径
    • 确认/usr/local/arm64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc/usr/local/arm64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++这两个路径是否确实存在。
    • 你可以使用ls命令来检查这些文件是否存在:
       

      ls /usr/local/arm64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc
      ls /usr/local/arm64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++

    • 如果文件不存在,可能需要重新安装或修正安装路径。
  2. 设置环境变量
    • 如果编译器确实在指定路径,你可以通过设置环境变量CCCXX来指定编译器路径。在终端中运行:
       

      export CC=/usr/local/arm64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc
      export CXX=/usr/local/arm64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++

    • 然后再运行CMake命令。
  3. 更新CMakeLists.txt
    • 如果你不想通过环境变量设置,可以直接在CMake命令中指定编译器:
       

      cmake -DCMAKE_C_COMPILER=/usr/local/arm64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc -DCMAKE_CXX_COMPILER=/usr/local/arm64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++ ..

    • 确保在CMakeLists.txt所在的目录或合适的父目录中运行此命令。
  4. 检查权限问题
    • 确保你有权限访问指定的编译器文件。使用ls -l查看文件权限。
  5. 检查CMake版本
    • 确保你的CMake版本支持交叉编译和你的编译器。有时候,较旧的CMake版本可能不支持某些编译器或特性。

通过以上步骤,你应该能够解决CMake找不到编译器的问题。如果问题仍然存在,可能需要检查更详细的日志信息(如CMakeOutput.log和CMakeError.log)来获取更多线索。

4.ubuntu 查看 c/c++编译器的位置 

在 Ubuntu 系统上,你可以通过几种方法来查看 C/C++ 编译器的位置。最常用的编译器是 gcc(GNU Compiler Collection 的 C 编译器)和 g++(GNU Compiler Collection 的 C++ 编译器)。以下是一些方法来查找这些编译器的位置:

方法一:使用 which 命令

which 命令可以告诉你可执行文件在系统中的路径。

which gcc

这将输出 gcc 编译器的路径,例如:

/usr/bin/gcc

同样,你可以查找 g++ 编译器的位置:

which g++

方法二:使用 whereis 命令

whereis 命令不仅会显示可执行文件的位置,还会显示源代码和手册页的位置(如果存在)。

whereis gcc

输出可能类似于:

gcc: /usr/bin/gcc /usr/lib/gcc /usr/share/man/man1/gcc.1.gz

同样,你可以查找 g++

whereis g++

方法三:使用 locate 命令

locate 命令可以在整个文件系统中快速查找文件。不过,这个命令依赖于一个定期更新的数据库,所以结果可能不是最新的。

locate gcc | grep /bin/gcc

这将过滤出路径中包含 /bin/gcc 的结果,帮助你找到 gcc 可执行文件的具体位置。

对于 g++

locate g++ | grep /bin/g++

方法四:使用 find 命令

find 命令可以在指定目录中递归查找文件,适合于更精确的搜索。

在当前文件系统的根目录下查找 gcc

sudo find / -name gcc

不过,这种方法可能会花费一些时间,因为它会搜索整个文件系统。你可以限制搜索范围,例如在 /usr/bin 目录下查找:

find /usr/bin -name gcc

同样,你可以查找 g++

find /usr/bin -name g++

总结

最简单和常用的方法是使用 which 命令,因为它会直接告诉你可执行文件的位置。如果你需要更多信息,可以使用 whereis,而 locate 和 find 则适用于更广泛的搜索需求。

5.ubnutu,将g++和gcc的路径添加到环境变量中 

在 Ubuntu 中,将 g++ 和 gcc 的路径添加到环境变量中,可以通过编辑用户主目录下的 .bashrc 文件来实现。这样修改后,环境变量只对当前用户永久生效。以下是具体步骤:

步骤一:打开终端

在 Ubuntu 桌面左上角的“应用程序”菜单中,选择“终端”。

步骤二:编辑 .bashrc 文件

使用文本编辑器打开 .bashrc 文件。例如,可以使用 nano 编辑器:

nano ~/.bashrc

步骤三:添加环境变量

在 .bashrc 文件的末尾,添加以下行,将 g++ 和 gcc 的路径添加到 PATH 环境变量中。通常情况下,g++ 和 gcc 安装在 /usr/bin 目录下,因此可以直接添加这个路径。

export PATH=$PATH:/usr/bin

如果你知道 g++ 和 gcc 的确切安装路径(例如,如果它们是自定义编译安装的),可以将该路径替换为 /usr/bin

步骤四:保存并关闭文件

编辑完成后,按下 Ctrl+X 组合键,然后按下 Y 键确认保存,最后按下 Enter 键完成操作。

步骤五:使更改生效

为了使修改立即生效,而不必重启终端或注销用户,可以执行以下命令:

source ~/.bashrc

步骤六:验证更改

你可以通过以下命令验证 g++ 和 gcc 的路径是否已成功添加到环境变量中:

echo $PATH

在输出的路径列表中,应该包含 /usr/bin(或你添加的其他路径)。

注意事项

  • 等号两边无空格:在添加环境变量时,确保 export 命令后的等号两边没有空格。
  • 权限问题:编辑 .bashrc 文件不需要超级用户权限,因为该文件是用户级别的配置文件。
  • 影响范围:上述方法只对当前用户生效。如果你希望对所有用户生效,可以编辑 /etc/profile 文件或 /etc/environment 文件,但这需要超级用户权限,并且修改后通常需要重启系统或重新登录才能使更改生效。

通过以上步骤,你就可以成功地将 g++ 和 gcc 的路径添加到环境变量中,从而在终端中更方便地使用这些编译器。

6. CMake无法找到指定的C和C++编译器

-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:4 (project):
  The CMAKE_C_COMPILER:

    /usr/local/arm64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc

  is not a full path to an existing compiler tool.

  Tell CMake where to find the compiler by setting either the environment
  variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to
  the compiler, or to the compiler name if it is in the PATH.


CMake Error at CMakeLists.txt:4 (project):
  The CMAKE_CXX_COMPILER:

    /usr/local/arm64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++

  is not a full path to an existing compiler tool.

  Tell CMake where to find the compiler by setting either the environment
  variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
  to the compiler, or to the compiler name if it is in the PATH.

 

这个错误信息表明CMake无法找到指定的C和C++编译器。错误指出提供的编译器路径不存在或者不正确。这里是一些可能的解决步骤:

  1. 检查编译器路径
    • 确认/usr/local/arm64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc/usr/local/arm64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++这两个路径是否确实存在。
    • 你可以在终端使用ls命令来检查这些文件是否存在于指定的目录中。
  2. 确认编译器安装
    • 确保你已经正确安装了ARM GCC编译器。如果没有安装,你需要下载并安装它。
    • 安装后,确认编译器的可执行文件位于你的系统PATH中,或者你可以提供完整的路径给CMake。
  3. 设置环境变量
    • 你可以设置环境变量CCCXX来指定C和C++编译器的路径。在终端中,可以这样设置:
       

      export CC=/usr/local/arm64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc
      export CXX=/usr/local/arm64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++

    • 之后再次运行CMake命令。
  4. 在CMake命令中指定编译器
    • 你也可以在运行CMake时直接指定编译器路径:
       

      cmake -DCCMAKE_C_COMPILER=/usr/local/arm64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc -DCMAKE_CXX_COMPILER=/usr/local/arm64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++ ..

    • 确保你在正确的目录下运行这个命令,通常是你的项目根目录或构建目录。
  5. 检查CMakeLists.txt
    • 确认CMakeLists.txt文件中没有其他错误或配置问题,特别是与项目名称和编译器设置相关的部分。
  6. 查看日志文件
    • 查看CMakeOutput.logCMakeError.log文件以获取更多错误信息,这可能会帮助你诊断问题。

通过以上步骤,你应该能够解决CMake找不到编译器的问题。如果问题仍然存在,可能需要检查你的系统配置或寻求更具体的帮助。

您可能感兴趣的与本文相关的镜像

PyTorch 2.6

PyTorch 2.6

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值