如何实现Visual Studio C++调用TensorFlow代码
对机器学习感兴趣的VS老司机们,在Windows上搭建好TensorFlow开发环境后,应该会迫不及待地想要编写一个C++程序调用TensorFlow代码。只要能调用成功,你就可以将机器学习融入到你的C++程序,给你的程序装上人工智能的翅膀!想想都很兴奋!
(Win搭建TensorFlow环境的操作步骤可参考我的另一篇博文:http://blog.csdn.net/shadown1ght/article/details/77931791)
现在我们就开始介绍如何在VisualStudio 2013/2015中通过python脚本调用TensorFlow代码。其它VS版本或VC6.0可参照本文操作步骤。
首先创建一个MFC或控制台程序,然后右键工程属性,在VC++目录选项页中分别加入python的包含文件目录和库文件目录:
C:Program FilesPython35include
C:Program FilesPython35libs
C:Program FilesPython35Lib
在cpp文件中添加python头文件:
#include <python.h>
在主函数中创建一个线程:
::CreateThread(NULL, 0, Python_TensorFlow, 0, 0, NULL);
加入Python_TensorFlow()函数代码如下:DWORD WINAPI Python_TensorFlow(LPVOID lParam) { char msg[256] = "11111 "; PyObject * pModule = NULL; PyObject * pFunc = NULL; PyObject * pArg = NULL; // 初始化python环境 Py_Initialize(); // 导入python脚本 pModule = PyImport_ImportModule("TensorflowTest"); if (!pModule) { OutputDebugStringA("11111 cannot open module!"); Py_Finalize(); return 1; } // 获得TensorFlow函数指针 pFunc = PyObject_GetAttrString(pModule, "HelloTensor"); if (!pFunc) { OutputDebugStringA("11111 cannot find function!"); Py_Finalize(); return 1; } // 调用TensorFlow函数 pArg = Py_BuildValue("(s)", "this is a call from c++"); if (pModule != NULL) { PyEval_CallObject(pFunc, pArg); } Py_Finalize(); OutputDebugStringA("11111 exit!"); return 0; }
然后点击生成解决方案,生成后,在程序Release输出目录下创建TensorflowTest.py文件,并把python安装目录下的python35.dll文件拷贝到Release目录。请确保生成的exe文件、TensorflowTest.py和python35.dll这三个文件都位于同一目录。
然后,编辑TensorflowTest.py文件,输入以下内容:#!/usr/bin/python3.5 # -*- coding: utf-8 -*- import sys import tensorflow as tf def HelloTensor(s): # 把print输出重定向到当前目录下的log.txt文件 stdout_backup = sys.stdout log_file = open("log.txt", "w") sys.stdout = log_file # 打印传入参数 print(s) # 调用TensorFlow api hello = tf.constant("Hello, Ten1sorFlow!") sess = tf.Session() print(sess.run(hello)) # 恢复print输出通道 log_file.close() sys.stdout = stdout_backup
上述代码逻辑很简单:函数HelloTensor()首先把print打印输出重定向到当前目录下的log.txt文件,然后打印传入的参数s,再调用TensorFlow api打印一个TensorFlow常量,最后恢复print打印输出通道。
完成上述所有准备工作后,启动exe程序,触发Python_TensorFlow线程,如一切正常,约6秒后,会在exe目录下生成一个log.txt文件,打开该文件,可看到以下内容:
从打印内容可以看出来,调用是成功的。
至此,我们成功地在VisualStudio 2013/2015 C++程序中调用了TensorFlow代码。
(注:如果你编译本文所述代码,运行程序时,PyImport_ImportModule("TensorflowTest")可能会出错。如果遇到该错误,请参考我下一篇博文《Windows C++程序调用包含TensorFlow代码的Python脚本出错问题的解决办法》)
- 上一篇: Tensorflow C++学习(二)
- 下一篇: c++调用tensorflow教程