cmake构建NNIE工程

《cmake构建NNIE工程》

  利用海思芯片在摄像头端做模型推理是大势所趋,本文介绍了笔者在做 NNIE 开发的过程中使用 cmake 构建 NNIE 工程的过程,因为一直使用 CLion 进行C++开发,所以 IDEA 党应该会很感兴趣,同时介绍了使用 NNIE 时候需要依赖哪些库,然后推广一下笔者结合一个大神的 NNIE 代码开源的用 C++ 进行NNIE开发的项目,让使用 NNIE 像使用 ncnn 一样简单。

Key Words:NNIE、cmake、OpenCV

Beijing, 2020

作者:RaySue

Code:https://github.com/RaySue/NNIE-lite

Agile Pioneer  

  这里算是对项目中的CMakeLists.txt的一个解读吧,高手直接去看项目的 CMakeLists.txt 即可

NNIE依赖

实验环境介绍:

  • Hi3516CV500_SDK_V2.0.0.3
  • OpenCV 3.4.1
  • 32bit 的交叉编译工具

设置交叉编译工具链

   在设置交叉编译工具链前,要先对交叉编译工具进行安装。

交叉编译工具链安装步骤:

  1. 解压 arm-himix200-linux.tgz
  2. make -p abs_dir
  3. source ./arm-himix200-linux.install abs_dir
  4. 上述程序会把PATH变量加入到 /etc/profile 中,reboot,CLion 编译器即可交叉编译
SET(CMAKE_C_COMPILER arm-himix200-linux-gcc)
SET(CMAKE_CXX_COMPILER arm-himix200-linux-g++)
SET(CMAKE_C_STRIP arm-himix200-linux-strip)

设置 FLAGS

   这些 FLAGS 对编译来说是必要的。

SET(CMAKE_C_FLAGS_PUBLIC "-mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -ffunction-sections -mno-unaligned-access -fno-aggressive-loop-optimizations -mapcs-frame -rdynamic")
SET(CMAKE_C_FLAGS_DEBUG "-Wall -ggdb3 -DNM_DEBUG ${CMAKE_C_FLAGS_PUBLIC}")
SET(CMAKE_C_FLAGS_RELEASE  "-Wall -O3  ${CMAKE_C_FLAGS_PUBLIC}")

NNIE 依赖

  头文件参见 https://github.com/RaySue/NNIE-lite 的 hisi/include 文件夹

  必要的库文件如下,顺序不要改

SET(HI_LIBS _hiawb.a _hiae.a _hidehaze.a upvqe.a dnvqe.a md.a _hildci.a _hidrc.a securec.a nnie.a ive.a tde.a VoiceEngine.a isp.a)

OpenCV 移植

   OpenCV 交叉编译这个步骤坑不是很多,之前编译过一个 OpenCV4 的版本,导致在摄像头没法用,所以就换了 3.4.1 用的就很顺畅,所以版本尽量不要尝试了,就用本文推荐的吧。

   参考中给出了几个交叉编译 OpenCV 的帖子,照着第一个来就行。

OpenCV 交叉编译要点:

  1. sudo apt-get install cmake
  2. sudo apt-get install cmake-gui
  3. export LC_ALL=C
  4. 按照参考博客中 修改各个文件 的内容
  5. cmake-gui …
  6. 选择 configure -> Specify options for cross-comiling -> next
  7. CMAKE_EXE_LINKER_FLAGS -lstdc++ -lpthread -lm -ldl

Q&A

  Q1: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))’ failed.

  A1: export LC_ALL=C; CLion用户 setting-Build -> Execution -> Deployment-CMake-Environment: LC_ALL=C

  Q2: 交叉编译后的 OpenCV 无法使用,读不了图,无法 resize 等

  A2: 换个 OpenCV 版本重新编译

参考

https://www.cnblogs.com/chay/p/10384942.html#_label2

https://blog.csdn.net/SMF0504/article/details/105305190/

https://www.jianshu.com/p/9fc9be4f08eb

cmake构建NNIE工程相关推荐

  1. 【笔记】CMake构建C++工程

    一句话结论:本文归纳CMake构建c++工程的基本用法,实现多依赖.多工程.多文件格式的工程编译构建. 1.简介 CMake(cross-platform make)是一个跨平台编译工具,它不能直接生 ...

  2. C++11标准|用C++写一个矩阵(包含了如何用cmake构建一个工程)

    如何用cmake构建一个工程? 构建一个工程的时候,需要做的几件事情(如果下面几件事你知道怎么做了,多大的工程就都不是问题了): 1.源代码在什么位置? 2.头文件在哪里? 3.怎么生成静态或者动态库 ...

  3. vs2017 cmake android,CMake构建VS2017工程

    1 安装VS2017/cmake 2 工程开发 3 生成VS2017工程 4 参考资料 1 安装VS2017/cmake 软件安装: Visual Studio官网下载Visual Studio Co ...

  4. linux cmake 编译项目,使用CMake构建复杂工程

    0. 什么是CMake CMake是一个跨平台的编译.安装.测试以及打包工具:CMake不直接编译软件,而是结合原生构建系统来构建软件.CMake配置文件是CMakeList.txt文件(每个源码文件 ...

  5. 用CMake构建工程时 cmake -G“Unix Makefiles“ 的使用

    在Windows上使用CMake构建项目出现了很多错误,搜索了很多资料尝试改了很多地方始终没能找到与我类似的情况,一度让我以为是系统问题.今天发现就一句,是没用cmake -G"Unix M ...

  6. 【使用CMake组织C++工程】2:CMake 常用命令和变量

    前言 前面的文章介绍了一个最简单的CMake工程,这篇文章将介绍一个稍微复杂一些的CMake工程,结合这个工程总结一下在组织一个C/C++工程时最为常用的一些CMake命令和变量.对于涉及到的命令和变 ...

  7. QtCreator使用CMake构建项目时jom Error 2问题

    QtCreator使用MSVC编译环境构建项目时,会因为配置不正确出现jom: C:/-/- [cmTC_fe41e\fast] Error 2错误,这里记录一下我的解决办法和对此问题的理解,希望能帮 ...

  8. CMake命令大全——CMake构建系统的骨架

    转自:http://www.cnblogs.com/coderfenghc/archive/2012/06/16/CMake_ch_01.html#2996205) CMD#1: add_custom ...

  9. 使用maven构建Spring工程的一些重点

    2019独角兽企业重金招聘Python工程师标准>>>     有人喜欢把一个下载的spring3.1和struts1.3下载包里的的lib目录下所有的jar不管三七二十一全部cop ...

最新文章

  1. UML建模--序列图建模技巧
  2. ubuntu声音太小的解决方案
  3. Azure WAF 导致网站无法登录 AAD 的解决办法
  4. [Golang]slice的用法以及和数组的区别
  5. ERROR! The server quit without updating PID file (/usr/local/var/mysql/apple,卸载,重装一个,我的方案
  6. 剑指Offer_47_求1+2+3+...+n
  7. tableau三轴该怎么做_举个栗子!Tableau技巧(30):巧妙实现 双柱图 和 折线图 的组合图表...
  8. YUV420及YUV422格式的采集存储方式
  9. 计算机病毒的命名规则
  10. 计算机桌面文件删除不掉是怎么了,如何解决电脑桌面文件无法删除问题
  11. php 设置字符编码为utf-8
  12. DX11梯台旋转运动
  13. 蛋白质翻译后修饰分析简介
  14. 谷歌 draco学习 二 压缩点信息
  15. pytorch复现RRU-Net
  16. 阿里云迁移工具推荐最佳实践:KVM虚拟化迁移到阿里云
  17. 教你如何一键批量删除空间说说
  18. 边缘计算的100个术语
  19. html侧边导航栏跟随页面滚动,javascript练习:导航随内容滚动而跟随变化
  20. 计算机编程逻辑图,【图片】【附C++编程演示】计算机思维生成之逻辑编程篇【人工智能吧】_百度贴吧...

热门文章

  1. java设计模式工厂模式_Java中的复合设计模式
  2. jQuery addClass
  3. Delete与Top连用限制删除行
  4. 51-高级路由:BGP community属性:local-as
  5. jumpserver 跳板机
  6. 十分钟python入门基础
  7. Python数据可视化2.3 体育案例
  8. MySQL 5.7.12新增MySQL Shell命令行功能
  9. 国内域名商.wang总量TOP14统计报告(6月9日)
  10. TDateTime转