C++调用TensorFlow教程:从环境配置到模型部署

Ivy
Ivy
发布时间:2026-10-13| 6人浏览过
原创

本文详细讲解如何在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,任务完成。

总结

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对本站的支持。如果你想了解更多相关内容请查看下面相关链接

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。