C++调用TensorFlow教程:从环境配置到模型部署
本文详细讲解如何在C++项目中调用Python编写的TensorFlow模型。内容涵盖Anaconda 64位Python环境配置、TensorFlow安装验证,以及通过Python C API实现C++与Python脚本交互的具体代码示例。重点介绍了Makefile依赖配置、动态库链接及常见错误排查,帮助开发者完成从环境搭建到模型推理的完整流程。
当前深度学习领域发展迅速,使用TensorFlow进行研究与开发的团队日益增多。然而,相比Python生态中丰富的API支持,C++版本的TensorFlow API功能尚不完善。这一现状导致大多数基于TensorFlow的项目仍主要依赖Python语言进行开发。
若现有项目基于C++开发,却需要调用Python环境下的TensorFlow模型,可参考本教程。本文以CNN(卷积神经网络)模型为例,演示具体的调用流程。
具体实施步骤如下:
第一步:配置Python环境
首先需安装Python,建议从Anaconda官网直接下载。务必注意选择64位版本,因为目前TensorFlow不支持32位Python,这也是此前常见的安装陷阱。下载Anaconda安装包后,
bash Anaconda3-4.3.1-Linux-x86_64.sh
执行安装命令即可开始安装过程。随后,
gedit ~/.bashrc
在配置文件末尾添加以下环境变量设置:
export PATH=/<你的anaconda路径>/bin:$PATH
将Python的安装路径添加到系统PATH中,确保在终端输入python命令时能正确调用已安装的Python 3.6版本。如下图所示,若终端显示正确的版本信息,则代表安装成功:

第二步:安装TensorFlow
在终端中直接输入以下命令:
pip install tensorflow
系统将自动在Python环境下安装TensorFlow。如果终端提示类似“没有找到匹配版本”或出现红色英文报错,通常是因为安装了32位Python,而该版本暂不被TensorFlow支持。安装成功后,在终端执行以下操作进行验证:

若终端显示TensorFlow的版本号,则表明安装成功。
第三步:C++ Demo示例
以下提供一个简单的C++调用Python及TensorFlow的Demo代码,开发者可根据实际需求参照此逻辑进行扩展。
#include <Python.h>
#include <iostream>
int main(int argc, char** argv)
{
char* picpath ="/home/pdd/PD/c++/c++python/pic/0.0.jpg";
Py_Initialize();
if ( !Py_IsInitialized() ) {
return -1;
}
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");
PyObject* pMod = NULL;
PyObject* pFunc = NULL;
PyObject* pParm = NULL;
PyObject* pRetVal = NULL;
int iRetVal = -999;
char* modulName="classify"; //这个是被调用的py文件模块名字
pMod = PyImport_ImportModule(modulName);
if(!pMod)
{
return -1;
}
char* funcName="evaluate"; //这是此py文件模块中被调用的函数名字
pFunc = PyObject_GetAttrString(pMod, funcName);
if(!pFunc)
{
return -2;
}
pParm = PyTuple_New(1);
PyTuple_SetItem(pParm, 0, Py_BuildValue("s",picpath));//传入的参数,是图片的路径
pRetVal = PyEval_CallObject(pFunc, pParm);//这里开始执行py脚本
PyArg_Parse(pRetVal, "i", &iRetVal);//py脚本返回值给iRetVal
//PyErr_Print();
std::cout<<iRetVal;
return iRetVal;
}
第四步:TensorFlow Python脚本
假设您已编写好TensorFlow的Python脚本并能正常运行(TensorFlow的具体使用非本文重点)。C++程序需要调用的是classify.py文件中的evaluate函数,该函数接收图片路径作为输入,并将分类结果返回给C++程序。
from PIL import Image
import numpy as np
import tensorflow as tf
def evaluate(pic):
image = Image.open(pic)
image = image.resize([256, 256])
image_array = np.array(image)
with tf.Graph().as_default():
里面就是对图像读取模型,预测,得到prediction……
max_index = np.argmax(prediction)
return max_index
第五步:配置C++调用Python脚本的环境
此时需要编写一个Makefile文件以添加必要的依赖环境,例如C++代码首行引用的Python.h头文件及相关库文件。一个简单的Makefile示例如下:
main:c++python.cpp g++ -o out c++python.cpp -I/home/pdd/anaconda3/include/python3.6m -lpython3.6m -L /home/pdd/anaconda3/lib clean: rm -rf *.o
Makefile中-I参数指定了包含Python.h的目录(如/home/pdd/anaconda3/include/python3.6m);-l参数指定链接libpython3.6m库;-L参数指定库文件的路径。
在终端输入make命令进行编译。如果提示缺少libpython3.6m.so文件,请将/home/pdd/anaconda3/lib目录下的libpython3.6m.so文件复制到/usr/lib/目录下(使用sudo cp命令)。
再次输入make命令,若一切顺利,将生成out可执行文件。运行./out,结果如下所示:

程序输出结果为0,任务完成。
总结
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对本站的支持。如果你想了解更多相关内容请查看下面相关链接
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









