目前深度学习越来越火,学习,使用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,如下图所示,代表安装成功:
<强> 2。tensorflow
强>
直接终端输入:
<代码> pip安装tensorflow 代码>
就会自动帮你安装到python下。
如果出现类似“没有找到匹配版本”(或者红色英文提示),那么你可能装的是python32bit版本,暂时不支持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教程