您的位置:首页 > 编程语言 > C语言/C++

如何实现Visual Studio C++调用TensorFlow代码

2017-09-11 15:45 696 查看
对机器学习感兴趣的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 Files\Python35\include

C:\Program Files\Python35\libs

C:\Program Files\Python35\Lib

在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("Tensor
4000
flowTest");
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脚本出错问题的解决办法》)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: