【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

相关文章

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

在Ubuntu上打不开GitHub的完整解决方法

《在Ubuntu上打不开GitHub的完整解决方法》当你满心欢喜打开Ubuntu准备推送代码时,突然发现终端里的gitpush卡成狗,浏览器里的GitHub页面直接变成Whoathere!警告页面... 目录一、那些年我们遇到的"红色惊叹号"二、三大症状快速诊断症状1:浏览器直接无法访问症状2:终端操作异常

Ubuntu向多台主机批量传输文件的流程步骤

《Ubuntu向多台主机批量传输文件的流程步骤》:本文主要介绍在Ubuntu中批量传输文件到多台主机的方法,需确保主机互通、用户名密码统一及端口开放,通过安装sshpass工具,准备包含目标主机信... 目录Ubuntu 向多台主机批量传输文件1.安装 sshpass2.准备主机列表文件3.创建一个批处理脚

k8s搭建nfs共享存储实践

《k8s搭建nfs共享存储实践》本文介绍NFS服务端搭建与客户端配置,涵盖安装工具、目录设置及服务启动,随后讲解K8S中NFS动态存储部署,包括创建命名空间、ServiceAccount、RBAC权限... 目录1. NFS搭建1.1 部署NFS服务端1.1.1 下载nfs-utils和rpcbind1.1

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne