【ncnn android】算法移植(四)——ubuntu上搭建环境,测试

2024-06-13 09:08

本文主要是介绍【ncnn android】算法移植(四)——ubuntu上搭建环境,测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 安装protobuf

链接:

  1. https://blog.csdn.net/u010918487/article/details/82947157
  2. https://blog.csdn.net/kdchxue/article/details/81046192

2. 编译ncnn

$ cd <ncnn-root-dir>
$ mkdir -p build
$ cd build# cmake option NCNN_VULKAN for enabling vulkan
$ cmake -DNCNN_VULKAN=OFF ..$ make -j4
$ make install

报错

In file included from /usr/local/include/google/protobuf/arena.h:48:0,from /usr/local/include/google/protobuf/message.h:118,from /usr/local/include/google/protobuf/text_format.h:48,from /home/yangna/chenjun/ncnn/ncnn-20180704/tools/caffe/caffe2ncnn.cpp:26:
/usr/include/c++/5/typeinfo:39:37: error: expected ‘}’ before end of line
/usr/include/c++/5/typeinfo:39:37: error: expected unqualified-id before end of line
/usr/include/c++/5/typeinfo:39:37: error: expected ‘}’ before end of line
/usr/include/c++/5/typeinfo:39:37: error: expected ‘}’ before end of line
/usr/include/c++/5/typeinfo:39:37: error: expected ‘}’ before end of line
/usr/include/c++/5/typeinfo:39:37: error: expected declaration before end of line
tools/caffe/CMakeFiles/caffe2ncnn.dir/build.make:70: recipe for target 'tools/caffe/CMakeFiles/caffe2ncnn.dir/caffe2ncnn.cpp.o' failed
make[2]: *** [tools/caffe/CMakeFiles/caffe2ncnn.dir/caffe2ncnn.cpp.o] Error 1
CMakeFiles/Makefile2:203: recipe for target 'tools/caffe/CMakeFiles/caffe2ncnn.dir/all' failed
make[1]: *** [tools/caffe/CMakeFiles/caffe2ncnn.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2

解决方案:

  • 在cmakelist.txt中加一句add_definitions(-std=c++11)
  • 参考https://www.jianshu.com/p/988499c72b5e,加一句:set(CMAKE_CXX_FLAGS "-std=c++11")

结果
会在build文件夹下有install/includeinstall/lib两个文件夹,include是*.h头文件;lib是动态链接库。
在这里插入图片描述

3. 使用ncnn

  1. 这里以cmakelist.txt为例。需要在cmakelist.txt中包含<ncnn project path>/build/install/include的文件夹,引入libncnn.a库文件。
    cmakelist.txt的关键部分
1. 
include_directories(/home/yangna/chenjun/ncnn/ncnn-20180704/build/install/include)					# 包含头文件2. 
# 项目中添加libncnn.a库
add_library( libncnn STATIC IMPORTED )
set_target_properties(libncnnPROPERTIES IMPORTED_LOCATION${DIR}/lib/libncnn.a
)3. 链接
target_link_libraries(demo libncnn${OpenCV_LIBS})
  1. 这里用centerface做测试。项目中已经有ncnn模型和相关代码。只需要编译通过就行。
  • 修改cmakelist.txt,只需要修改一处
#1.cmake verson
cmake_minimum_required(VERSION 2.8)# 设置变量
set (DIR /home/yangna/chenjun/ncnn/ncnn-20180704/build/install)			# 只需要修改这一处#2.project name
project(demo C CXX)#opencv
find_package(OpenCV REQUIRED)#3.set environment variable
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")#4. include
include_directories(${DIR}/include${CMAKE_CURRENT_LIST_DIR}/cpp)# ncnn lib
add_library( libncnn STATIC IMPORTED )
set_target_properties(libncnnPROPERTIES IMPORTED_LOCATION${DIR}/lib/libncnn.a
)# add OPENMP support 
FIND_PACKAGE( OpenMP REQUIRED)
if(OPENMP_FOUND)
message("OPENMP FOUND")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
endif()#6.source directory
file(GLOB TEST_SRC ${CMAKE_CURRENT_LIST_DIR}/cpp/*.cpp${CMAKE_CURRENT_LIST_DIR}/demo.cpp)
set(TEST_COMPILE_CODE ${TEST_SRC})add_executable(demo ${TEST_COMPILE_CODE})target_link_libraries(demo libncnn${OpenCV_LIBS})
  • 编译项目
cd $project
makedir build
cmake ..
make
  • 执行
./demo 
  • 结果
    在这里插入图片描述

这篇关于【ncnn android】算法移植(四)——ubuntu上搭建环境,测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1056866

相关文章

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

Python极速搭建局域网文件共享服务器完整指南

《Python极速搭建局域网文件共享服务器完整指南》在办公室或家庭局域网中快速共享文件时,许多人会选择第三方工具或云存储服务,但这些方案往往存在隐私泄露风险或需要复杂配置,下面我们就来看看如何使用Py... 目录一、android基础版:HTTP文件共享的魔法命令1. 一行代码启动HTTP服务器2. 关键参

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

Ubuntu 24.04启用root图形登录的操作流程

《Ubuntu24.04启用root图形登录的操作流程》Ubuntu默认禁用root账户的图形与SSH登录,这是为了安全,但在某些场景你可能需要直接用root登录GNOME桌面,本文以Ubuntu2... 目录一、前言二、准备工作三、设置 root 密码四、启用图形界面 root 登录1. 修改 GDM 配

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

如何在Ubuntu 24.04上部署Zabbix 7.0对服务器进行监控

《如何在Ubuntu24.04上部署Zabbix7.0对服务器进行监控》在Ubuntu24.04上部署Zabbix7.0监控阿里云ECS服务器,需配置MariaDB数据库、开放10050/1005... 目录软硬件信息部署步骤步骤 1:安装并配置mariadb步骤 2:安装Zabbix 7.0 Server