c++调用tensorflow教程

  

目前深度学习越来越火,学习,使用tensorflow的相关工作者也越来越多。但是目前绝大部分的python都是拥有着丰富的python的API,而c++的API不够完善,这就导致绝大多是使用tensorflow的项目都是基于python。
  

  

如果项目是由c++编写,想调用python下的tensorflow ?可参考本教程(tensorflow模型是CNN卷积神经网络)

  

具体步骤:

  

<强> 1。python环境
  

  

首先安装python,可以在蟒蛇官网直接下载。记住python一定选择64位,目前tensorflow不支持32位的python,这也是我之前被坑过的地方。下载水蟒后直接

        bash Anaconda3-4.3.1-Linux-x86_64.sh      

就可以安装,然后

        中~/. bashrc      

在最后面加上

        出口路径=/& lt;你的蟒蛇路径在/bin: $路径      

将python安装路径添加到系统路径中,这样在终端敲python后会运行安装的python3.6,如下图所示,代表安装成功:

  

 C + +调用tensorflow教程

  

<强> 2。tensorflow
  

  

直接终端输入:

  

<代码> pip安装tensorflow

  

就会自动帮你安装到python下。
  如果出现类似“没有找到匹配版本”(或者红色英文提示),那么你可能装的是python32bit版本,暂时不支持tensorflow !
  安装成功后在终端如下操作:

  

 C + +调用tensorflow教程

  

显示tensorflow版本,表示安装成功!

  

<强> 3. c++演示

  

一个简单的c++调取python + tensorflow的演示,按照实际需要可以依葫芦画瓢。

        # include & lt; Python.h>   # include & lt; iostream>   int主要(int命令行参数个数,char * * argv)   {   char * picpath="/home/pdd/PD/c++/c++ python/图片/0.0.jpg”;   Py_Initialize ();   如果(! Py_IsInitialized ()) {   返回1;   }   PyRun_SimpleString(“进口sys”);   PyRun_SimpleString (“sys.path.append ('/') ");   PyObject * pMod=零;   PyObject * pFunc=零;   PyObject * pParm=零;   PyObject * pRetVal=零;   int iRetVal=-999;   char * modulName=胺掷唷?//这个是被调用的py文件模块名字   pMod=PyImport_ImportModule (modulName);   如果(! pMod)   {   返回1;   }   char * funcName=捌拦馈?//这是此py文件模块中被调用的函数名字   pFunc=PyObject_GetAttrString (pMod funcName);   如果(! pFunc)   {   返回2;   }   pParm=PyTuple_New (1);   PyTuple_SetItem (pParm 0 Py_BuildValue (“s”, picpath));//传入的参数,是图片的路径   pRetVal=PyEval_CallObject (pFunc pParm);//这里开始执行py脚本   PyArg_Parse (pRetVal,“我”和iRetVal);//py脚本返回值给iRetVal//PyErr_Print ();   std:: cout<& lt; iRetVal;   返回iRetVal;   }      

<强> 4。tensorflow的python脚本
  

  

默认你已经写好tensorflow的python脚本,并能跑成功。(tensorflow的使用不是本文重点)
  c++需要调用的就是这个classify.py里面的评估函数,传入图片路径,返回分类结果给c++程序。

        从公益诉讼导入图像   进口numpy np   进口tensorflow特遣部队   def评估(图片):   形象=Image.open(图片)   形象=形象。调整((256、256))   image_array=np.array(图片)   用tf.Graph () .as_default ():   里面就是对图像读取模型,预测,得到预测……   max_index=np.argmax(预测)   返回max_index      

<强> 5。c++调用python脚本的环境
  

  

这时候需要写一个简单的makefile加入需要的依赖环境,例如c++代码第一行的Python。h和相关的库文件。
  简单的makefile如下:

        主要:c++ python.cpp   g++ - o c++ python。cpp - i/home/pdd/anaconda3/include/python3.6m -lpython3.6m - l/home/pdd/anaconda3/lib   清洁:   rm rf * . o   之前      

我后面的/home/pdd/anaconda3/include/python3.6m有需要的Python.h; -lpython3.6m链接到需要的libpython3.6m.so; - l指出链接的路径。
  

  

终端输入。如果提示需要什么libpython3.6m . .所以,就把/home/pdd/anaconda3/lib下的libpython3.6m . .所以复制到/usr/lib/下(sudo cp - - -)

c++调用tensorflow教程