[windows tensorflow之路(二)]windows下使用 bazel 编译一个dll ,并使用 python代码调用

4 篇文章 0 订阅
3 篇文章 0 订阅

上一章中说明了如何在windows下编译libtensorflow_cc.so,这章将介绍如何使用(其实你被骗了,windows下libtensorflow_cc.so根本一点用都没有)。

1. 添加识别代码

在tensorflow目录结构下添加如下代码文件,如下图所示
请注意我的目录结构:E:\tf\tensorflow-1.13.0-rc2\tensorflow\cc\seed_switch_recog 和编译时的路径有关
在这里插入图片描述简单说明一下,recog.h, recog.cc是封装好的识别代码,dll.cc是导出识别接口的代码,main.cc是编译成.exe调试的代码。(windows下bazel编译执行还不知道如何调试,不过官网有介绍,自行查阅)BUILD文件里面定义的是编译规则
在这里插入图片描述如上图所示,第三行定义了一个cc_library 先编译出一个library供我们使用,然后有两个tf_cc_binary (正常情况下bazel的语法是cc_binary,这里tensorflow重新定义了一个tf_cc_binary规则,直接使用就可以,和cc_binary没多大区别)
重点 14行和22行两个规则的书写请查看bazel官方教程。
23行和24行说明我们要用dll.cc编译recoglib.dll, 并加上28行的标志说明要做链接操作那么就是可调用的dll了。

在这里插入图片描述如上图所示,dll.cc里面定义了两个接口函数,一个init(接受两个参数,模型路径,标签路径), 一个reco(接收一个图片路径参数)(后期直接改成传输文件流的方式,不经过文件io操作(请加作者qq参与讨论360697611),识别函数可根据需要自行修改,返回置信度与类别结果。

剩下的就不多说了,请下载源代码查看

2. 编译recoglib.dll

如下图所示,在tf 根目录下打开cmd输入

bazel build //tensorflow/cc/seed_switch_recog:recoglib.dll

即可直接开始编译,此方法编译的recoglib.dll 不会依赖之前编译的 libtensorflow_cc.so 也就是说以后也不会用到 libtensorflow_cc.so 了,
在这里插入图片描述经过很长一段时间后终于编译成功,如下图所示,同时在类似文件目录下会出现我们想要的recoglib.dll

在这里插入图片描述

3. 调用 recoglib.dll 进行图像分类

下载调用代码,示例模型,测试数据,
在这里插入图片描述所有调用 recoglib.dll 代码在 invoking_dll 文件夹内,如下图:
其中包含test图片,python版调用dll示例代码(dll_tool.py),(c++版一更新至github),label.txt 标签文件,output.pb python训练好的模型, 还有刚刚编译好的recoglib.dll (此处请用刚刚自己成功编译出的dll测试)
在这里插入图片描述运行效果图就不展示了,请自行查看自己的。

4. 使用 vs 2015 编写 opencv 图像处理代码,调用 recoglib.dll 进行识别

预处理代码这里就不献丑了…,c++ 调用dll方法很简单,此处不做介绍,github上放了示例代码,有问题请加我qq讨论。

windows下推荐使用vscode 进行简单tf c++代码编辑操作,vs也可以,不过只能编写代码,不能编译,编译只能用bazel。

windows下是可以将tensorflow 和 opencv 代码 一起编译的,使用bazel就可以,bazel 在 windwos 下也是使用 msvc 编译的,vs也是使用msvc编译的,所以是可以同时用的。下一章将介绍如何使用vscode 编写c++代码用bazel编译

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亡命天涯ba

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值