自己的c++代码,又opencv,想跑在开发板上要做什么,希望有demo参考

  • ajax wrote: 2024-04-28 2:30 如题,请大佬回复下
    您好,根据您的使用场景有很多种部署方案,首先需要确定您的代码是基于完整版的opencv还是使用opencv-mobile(针对嵌入式平台进行裁剪的opencv),在用法上两者的差别不大,很多软件接口都是通用的,但是如果您使用到opencv种比较复杂化的特性(视频读取,卷积神经网络等)可能还是需要考虑移植完整的opencv。

    + 使用 opencv-mobile
    目前在wiki上的 RKNN 实例使用指南和 RKMPI 实例使用指南都有使用 opencv-mobile,您可以进行参考,只需要在工程中修改 CMake 就可以将opencv-mobile静态链接到您的工程中,在板端直接运行即可。
    + 使用完整的 opencv
    这种方案在网上有大量的相关教程,您需要使用arm-rockchip830-linux-uclibcgnueabihf- (buildroot系统)或者 arm-linux-gnueabihf-(ubuntu 系统)来交叉编译 opencv,您可以选择以动态链接的方式将编译生成的opencv库放置到板端,使用export LD_LIBRARY_PATH=<opencv 库路径>后运行您的可执行程序。也可以选择使用静态链接库的方式在编译阶段集成opencv库。两种链接库的方式都需要在 CMakeLists.txt 作相应修改。

    比较推荐使用opencv-mobile的方式,在性能上不仅有更好的表现,同时也可以减去了opencv的交叉编译的过程,很多被裁剪的功能在luckfox上的运行效果很差。
  • 其他地方要怎么修改编译呢,例如交叉编译怎么搞,我这里打包出来是deb包,又要怎么搞
  • ajax wrote: 2024-04-28 3:05 其他地方要怎么修改编译呢,例如交叉编译怎么搞,我这里打包出来是deb包,又要怎么搞
    交叉编译opencv网上的大量的资料,本质上就是在编译opencv库时使用交叉编译链替换掉编译在PC上使用的gcc,opencv根据不同的版本有不同的方式,需要根据版本作修改。

    deb包正常是在debian系统上安装的,我们有提供ubuntu的镜像,但是您需要先确保您打包前的程序能够在系统上运行不会缺少关键库,这个也需要参考您的代码设计。
    正常情况下打包为deb是为发布准备的,在luckfox-pico可能存在打包工具与板端环境不兼容等问题,这可能会进一步提高您有移植代码的难度,不太确定您是否有打包为deb的必要性,如果实现的功能比较简单,建议还是先直接将可执行程序和相关依赖库移到板端进行测试。
  • 如果我不生成deb包,那我需要生成什么样的可执行文件,我的c++代码的cmakelists要如何修改才能进行交叉编译成你们那个可执行文件呢
  • ajax wrote: 2024-04-28 6:12 如果我不生成deb包,那我需要生成什么样的可执行文件,我的c++代码的cmakelists要如何修改才能进行交叉编译成你们那个可执行文件呢
    CMakelists 中的 add_executable 生成的可执行程序直接使用即可。我不清楚您代码的细节,很难给您修改CMakelists 的意见,根据不同情况不同版本有不同的解决策略,比较核心的是修改交叉编译工具

    Code: Select all

    set(CMAKE_C_COMPILER "${SDK_PATH}/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-gcc"
    )
    set(CMAKE_CXX_COMPILER "${SDK_PATH}/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-g++"
    )
    
    交叉编译工具的使用请参考wiki https://wiki.luckfox.com/zh/Luckfox-Pic ... -Pico-GPIO
    4.6 交叉编译章节
  • ajax wrote: 2024-04-28 6:12 如果我不生成deb包,那我需要生成什么样的可执行文件,我的c++代码的cmakelists要如何修改才能进行交叉编译成你们那个可执行文件呢
    CMAKE的修改,我们没办法提供技术支持,如果你的程序是基于opencv的例程,也许你可以问问opencv的维护团队
    至于你想要运行你的C++代码,请参考wiki中的交叉编译,将程序编译为可以运行的二进制文件