C++调用tensorflow模型
2021/7/14 22:34:52
本文主要是介绍C++调用tensorflow模型,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
-
C++ 和python的混合编程
-
windows + vs
-
新建一个工程,在工程属性中添加如下的几个
C:\Users\[user_name]\Anaconda3\include
C:\Users\[user_name]\Anaconda3\Lib
C:\Users\[user_name]\Anaconda3\libs
具体路径根据自己python的安装情况确定。
-
添加附加依赖项
pytyhon36.lib
,具体参照自己的文件路径以及python版本
-
如果需要在
DEBUG
下运行,需要修改pyconfig.h
文件,我的电脑上的位置为C:\Users\chmtt\Anaconda3\include\pyconfig.h
打开以后在293行,将python36_d.lib
修改为python36.lib
即可。如果直接在release
下运行无需操作。 -
假设需要调用的
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++Demo
#include <Python.h> #include <iostream> int main(int argc, char** argv) { const 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; const char* modulName="classify"; //这个是被调用的py文件模块名字 pMod = PyImport_ImportModule(modulName); if(!pMod) { return -1; } const 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; }
-
-
ubuntu
安装了
anaconda
,tensorflow
C++ 和 python代码与上面类似。在构建执行文件时
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
-I
后面的/home/pdd/anaconda3/include/python3.6m
有需要的Python.h
;-lpython3.6m
链接到需要的libpython3.6m.so
;-L
指出链接的路径。终端输入make。如果提示需要什么
libpython3.6m.so
,就把/home/pdd/anaconda3/lib
下的libpython3.6m.*.so
复制到/usr/lib/
下(sudo cp ——–
) 此时再次输入make,一切ok!得到out文件,输入./out
-
-
源码编译运行。
大体的流程如下:
- 1.使用
tensorflow python API
编写和训练自己的模型,训练完成后,使用tensorflow saver
将模型保存下来。 - 2.使用
tensorflow c++ API
构建新的session
,读取python
版本保存的模型,然后使用session->run()
获得模型的输出。 - 3.编译和运行基于
tensorflow c++ API
写的代码。
- Ubuntu
- windows
- 1.使用
这篇关于C++调用tensorflow模型的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-30tensorflow是什么-icode9专业技术文章分享
- 2024-10-15成功地使用本地的 NVIDIA GPU 运行 PyTorch 或 TensorFlow
- 2024-01-23供应链投毒预警 | 恶意Py包仿冒tensorflow AI框架实施后门投毒攻击
- 2024-01-19attributeerror: module 'tensorflow' has no attribute 'placeholder'
- 2024-01-19module 'tensorflow.compat.v2' has no attribute 'internal'
- 2023-07-17【2023年】第33天 Neural Networks and Deep Learning with TensorFlow
- 2023-07-10【2023年】第32天 Boosted Trees with TensorFlow 2.0(随机森林)
- 2023-07-09【2023年】第31天 Logistic Regression with TensorFlow 2.0(用TensorFlow进行逻辑回归)
- 2023-07-01【2023年】第30天 Supervised Learning with TensorFlow 2(用TensorFlow进行监督学习 2)
- 2023-06-18【2023年】第29天 Supervised Learning with TensorFlow 1(用TensorFlow进行监督学习 1)