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 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()函数代码如下:

  1. DWORD WINAPI Python_TensorFlow(LPVOID lParam)
  2. {
  3. char msg[ 256] = "11111 ";
  4. PyObject * pModule = NULL;
  5. PyObject * pFunc = NULL;
  6. PyObject * pArg = NULL;
  7. // 初始化python环境
  8. Py_Initialize();
  9. // 导入python脚本
  10. pModule = PyImport_ImportModule( "TensorflowTest");
  11. if (!pModule) {
  12. OutputDebugStringA( "11111 cannot open module!");
  13. Py_Finalize();
  14. return 1;
  15. }
  16. // 获得TensorFlow函数指针
  17. pFunc = PyObject_GetAttrString(pModule, "HelloTensor");
  18. if (!pFunc) {
  19. OutputDebugStringA( "11111 cannot find function!");
  20. Py_Finalize();
  21. return 1;
  22. }
  23. // 调用TensorFlow函数
  24. pArg = Py_BuildValue( "(s)", "this is a call from c++");
  25. if (pModule != NULL) {
  26. PyEval_CallObject(pFunc, pArg);
  27. }
  28. Py_Finalize();
  29. OutputDebugStringA( "11111 exit!");
  30. return 0;
  31. }

然后点击生成解决方案,生成后,在程序Release输出目录下创建TensorflowTest.py文件,并把python安装目录下的python35.dll文件拷贝到Release目录。请确保生成的exe文件、TensorflowTest.py和python35.dll这三个文件都位于同一目录。

然后,编辑TensorflowTest.py文件,输入以下内容:
  1. #!/usr/bin/python3.5
  2. # -*- coding: utf-8 -*-
  3. import sys
  4. import tensorflow as tf
  5. def HelloTensor(s):
  6. # 把print输出重定向到当前目录下的log.txt文件
  7. stdout_backup = sys.stdout
  8. log_file = open( "log.txt", "w")
  9. sys.stdout = log_file
  10. # 打印传入参数
  11. print(s)
  12. # 调用TensorFlow api
  13. hello = tf.constant( 'Hello, Ten1sorFlow!')
  14. sess = tf.Session()
  15. print(sess.run(hello))
  16. # 恢复print输出通道
  17. log_file.close()
  18. 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脚本出错问题的解决办法》)


转自:https://blog.csdn.net/shadown1ght/article/details/77933930

猜你喜欢

转载自blog.csdn.net/u011304078/article/details/80853868