tensorflow作为一个著名的开源深度学习框架,其在python平台的神经网络模型搭建、训练和测试等是很齐全的,但其在C++端的设计方面性能相对较差。在实际工程中,C++项目具有更省时的优点,因此基于C++的tensorflow的开发是很重要的。
一些比较知名的网络模型,例如yolo-v3系列等的C++代码较为全面,一定程度属于定制的。
然而对于一些自己编写的网络模型的支持方面,我们往往需要自己来配置环境。坦白说,笔者在配置环境方面花费了很多时间,参考了很多优秀的资料,但最后都不尽如意。作为一个小白,自学过程是痛苦的,最后在一些文章摸索中,找到了一些配置环境的方法,终于在2020年5月24日迈出了作为一个C++小菜鸟的tensorflow的C++配置的一小步,为表纪念,对于配置环境的流程和方法进行一个小记录。
本文的环境配置,包括OpenCV的环境配置、Tensorflow的环境配置两个方面。
在环境配置之前,提示一下本文的C++代码的开发平台, Visual Studio 2015,操作系统为Window10 64位操作系统。之所以介绍这两个配置,是因为opencv和tensorflow的相关配置与此有关:
(1)opencv与VS2015配套的版本,需要在opencv/build/include/openve2内必须包含v14这个文件,在不同的VS平台,例如VS2008、VS2012上,可能支持的opencv版本不一样,本文使用的opencv版本为 342.
(2)tensorflow的库需要与windows操作系统的位数,这点需要与VS2015的编译环境(x64或者x86)相匹配。以本文为例,本文是window10 64位操作系统,使用的tensorflow库是 64位+CPU支持的。
(1)Opencv的下载,可以在官网下载,也可以在国内镜像文件网站张下载。
官网:https://opencv.org/
国内网:https://sourceforge.net/projects/opencvlibrary/files/
该部分不需要踩坑,只需要记住下载适合你的平台的版本,例如windows或者mac的等。
一些编程小案例和介绍: http://wiki.opencv.org.cn/index.php/%e9%a6%96%e9%a1%b5
(2)tensorflow库的下载
只能说大佬确实超级多,很多大佬已经编译好tensorflow的各种库,包括windows平台、mac平台等的库文件了。
tensorflow:https://github.com/fo40225/tensorflow-windows-wheel
当然,里面只有一部分版本的tensorflow,如果里面没有你所需要的,就只能自己制作了,具体咋制作有一些教程会介绍,用到CMAKE、bazel等,我不会,编译几次失败了,直接导致我几个月时间对这个东西很抵触。
下载完成之后,tensorflow直接用7z解压缩(需要下载7zexe文件,运行后,右键压缩文件然后选择7z解压)就可以了,opencv文件需要直接运行opencv.exe文件,解压缩就可以。
需要注意的是,如果你下载的tensorflow版本不对,比如你在x64平台下,使用了x86(32位)的tensorflow,会报错 ”平台不符合“,遇到该问题仅需要将重新下载合适的tensorflow按照上述方法解压缩即可。
二、 环境变量配置
涉及到opencv的很多教程中,均有环境配置的教程,这点比较统一,需要在系统环境配置里面进行opencv的文件的加入。
在win10系统中对”此电脑”右键-属性-高级系统配置-环境变量-新建,将opencv的bin文件添加进去,最后显示如下:
用VS205新建一个项目,在项目中,需要对Opencv和Tensorflow的环境进行配置。
(1)VC++ - 包含目录
放置库的头文件的文件地址。
(2) VC++ - 库目录
放置lib文件的地址。
(3)链接器 - 输入
这里只用到tensorflow和opencv的一些静态文件。
在设置完成上述配置后,一个代码即可出现无错运行了,但是在弹出exe窗口时,会出现“无法找到opencv_world342.dll”文件等内容,这时候,解决方案如下:
解决方法1:
把自己opencv文件目录下的\opencv\build\x64\vc15\bin中的三个dll文件,拷贝到C:\Windows\System32 中。
同时也要把tensorflow的bin文件夹中的tensorflow.dll放在C:\Windows\System32中。
该方法的优点是简单,缺点是更新麻烦,更新完opencv后需要同步将C:\Windows\System32内的文件手动更新。
解决方法2:
将所需要的dll文件放置在Debug文件夹(包含exe执行文件)中。
生成一个简单的tensorflow项目,输出一段话。显示结果如下:
自此,便初步实现了tensorflow环境的搭建。
网络上基于C++的tensorflow教程较多,较复杂,大家可能处于专业,写的都看起来很多人,然而网上很多教程看了之后,却基本走的是编译不通的路子,个人认为,很多问题不是越复杂越好,如何把一个复杂的问题变得简单是一个很有趣的内容,可能会对像我这样的小白有更大的帮助。
本博客作为tensorflow C++环境配置的笔记,记录vs使用时一些踩坑经过。