【Tensorflow】Ubuntu16.04下编译tensorflow C++ API接口并调用模型

一、前言

在深度学习项目开发过程中,通常在python环境中训练和测试模型,测试稳定后再将其转移至C++平台进行部署,之前的文章已经介绍过如何在Win10 VS2015环境下编译tensorflow C++ API,因工作原因,需要将Windows环境的项目转移至Linux下,本文记录了在Ubuntu16.04下编译tensorflow C++ API接口并调用的过程。

二、配置.版本及相关依赖

本文在Ubuntu16.04环境下编译tensorflow1.8

相关依赖包括protobuf3.5.0,Eigen3.3.4

三、安装相关依赖

1.安装protobuf,需要与tensorflow版本相对应,本文安装的是protobuf3.5.

从https://github.com/google/protobuf/releases下载protobuf-cpp-3.5.0.tar.gz
解压获得一个protobuf-3.5.0的文件夹

根据官方教程https://github.com/protocolbuffers/protobuf/blob/master/src/README.md
安装protobuf相关依赖
sudo apt-get install autoconf automake libtool curl make g++ unzip

安装protobuf
cd prtobuf-3.5.0
./configure
sudo make -j8
make check -j8
sudo make install
sudo ldconfig

make check结果如下图:

2.下载并安装Eigen,这是一个C++端的矩阵运算库

wget http://bitbucket.org/eigen/eigen/get/3.3.4.tar.bz2
下载之后解压,重新命名为eigen3,放到某个路径下,安装

mkdir build  
cd build  
cmake ..  
make  
sudo make install

四、编译tensorflow

1.安装Bazel 和 zlib1g

在https://github.com/bazelbuild/bazel/releases下载Bazel的安装包,
本文版本为bazel-0.10.1-installer-linux-x86_64.sh

执行安装
sudo chmod 777 ./bazel-0.10.1-installer-linux-x86_64.sh

./bazel-0.10.1-installer-linux-x86_64.sh

注意:bazel版本不能过高,否则会报错
安装zlib1g

sudo apt-get install zlib1g.dev

2.编译安装tensorflow

# git tensorflow

sudo apt install git
git clone https://github.com/tensorflow/tensorflow.git

cd tensorflow

git checkout r1.8

# 执行configure
sudo ./configure

接下来需要指定python路径,和各种编译选项

具体选项的含义详见官网介绍https://tensorflow.google.cn/install/source

本文的第一个y/N选择y,后面的都是N,路径均选择默认路径

# 使用bazel去编译
#--config=monolithic是为了避免与opencv的冲突
bazel build --config=opt --config=monolithic //tensorflow:libtensorflow_cc.so // 无显卡,cpu版本
bazel build --config=opt --config=cuda --config=monolithic //tensorflow:libtensorflow_cc.so // 有显卡

编译完成后,可能因为网络问题导致一些文件下载失败,执行如下命令

./tensorflow/contrib/makefile/download_dependencies.sh
#完成后会在makefile中产生一个download文件夹。
./tensorflow/contrib/makefile/build_all_linux.sh
#完成后会在makefile中产生一个gen文件夹。
# 把必要.h头文件以及编译出来.so的动态链接库文件复制到指定的一些路径下:
sudo mkdir /usr/local/include/tf
sudo cp -r bazel-genfiles/ /usr/local/include/tf/
sudo cp -r tensorflow /usr/local/include/tf/
sudo cp -r third_party /usr/local/include/tf/
sudo cp bazel-bin/tensorflow/libtensorflow_cc.so /usr/local/lib/
sudo cp bazel-bin/tensorflow/libtensorflow_framework.so /usr/local/lib

至此tensorflow 的 C++接口已编译完毕,接下来是测试部分。

五、测试tensorflow C++ API调用pb模型

下载测试项目的Git:GitHub - zhangcliff/tensorflow-c-mnist

在tensorflow-c-mnist中新建头文件include文件夹和so库文件夹lib,将编译生成的.so动态链接库和include文件夹分别copy到这两个新建的lib和include文件夹下。

新建CMakeLists.txt文件如下

cmake_minimum_required (VERSION 2.8.8)
project (tf_example)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11 -W")
link_directories(./lib)
  include_directories(
  include/tf/tensorflow
  include/tf/bazel-genfiles
  include/tf/downloads/nsync/public
  include/tf/gen/protobuf/include
  /usr/local/include/eigen3
)
add_executable(tf_test  tf.cpp)
target_link_libraries(tf_test tensorflow_cc tensorflow_framework)

编译运行

cd build
cmake ..
make
./tf_test digit.jpg 

得到输出结果如上图,即表示编译和测试成功!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值