Win10系统编译Tensorflow Lite 2.3为动态链接库tensorflowlite_c.dll

简介: Win10系统编译Tensorflow Lite 2.3为动态链接库tensorflowlite_c.dll

Win10系统编译Tensorflow Lite 2.3为动态链接库tensorflowlite_c.dll


最近看到一个巨牛的人工智能教程,分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。平时碎片时间可以当小说看,【点这里可以去膜拜一下大神的“小说”】。

Tensorflow Lite官方在移动端提供了官方编译好的库,我们直接拿来用就好。Tensorflow 在Linux平台与Mac平台下编译也非常轻松,基本不会遇到太多问题(据说Google内部只用Linux与Mac)。但是在Windows下编译真是一波三折,好在已经编译成功了,记录一下Windows 10下Tensorflow Lite编译过程,帮助一下跟我一样被Tensorflow折腾的不行的人。

1 前期准备

1.1 安装 MSYS2

MSYS2官方下载地址为【https://www.msys2.org】,直接下载安装即可。安装完成后,将安装路径的usr\bin添加到环境变量:假设安装目录为E:\msys64,则要将E:\msys64\usr\bin加入到环境变量%PATH%中。

打开控制台cmd.exe,输入如下命令:

pacman -S git patch unzip

1.2 安装visual studio

visual studio可以安装2019版本或者最新版本即可。

1.3 安装python

编译过程中,需要用python运行一些脚本,去python官网下载最新版python安装即可,这里不介绍python安装。这里我本机已经安装了Anaconda,使用的python版本为3.6.3:

E:\>python --version
Python 3.6.3 :: Anaconda 4.4.0 (64-bit)

理论上python版本直接安装最新的即可。

值得注意的是,安装完python后,还需要安装numpy库。否则编译期间会报错找不到numpy。numpy可以通过pip install numpy来安装。

1.4 下载tensorflow源码

前往github下载tensorflow源码:【https://github.com/tensorflow/tensorflow】。目前最新版本是2.4.0,2.4.0的c_api变动比较大,因此选择2.3.1版本,等2.4.x版本稳定后再考虑用更新的,

如下图所示:

1.5 安装bazel

每个版本的tensorflow都有其对应的bazel版本,如果版本不一致,可能会在编译期间出现错误,这种错误还很难排查,-_-||。因此,要确认好当前的tensorflow源码应该使用哪个bazel版本。

解压缩tensorflow-2.3.1.zip文件后,打开cmd,进入tensorflow-2.3.1。输入命令cat configure.py | grep -i bazel_ver。如下:

 E:\>cd tensorflow-2.3.1
 E:\tensorflow-2.3.1>cat configure.py | grep -i bazel_ver
_TF_CURRENT_BAZEL_VERSION = None
_TF_MIN_BAZEL_VERSION = '3.1.0'
_TF_MAX_BAZEL_VERSION = '3.99.0'!
def check_bazel_version(min_version, max_version):
      'TF_IGNORE_MAX_BAZEL_VERSION' not in os.environ):
  global _TF_CURRENT_BAZEL_VERSION
    current_bazel_version = check_bazel_version(_TF_MIN_BAZEL_VERSION,
                                                _TF_MAX_BAZEL_VERSION)
  _TF_CURRENT_BAZEL_VERSION = convert_version_to_int(current_bazel_version)

可以看到,最小的bazel版本为3.1.0。最大版本是3.99.0,这里看最大的版本意义不大,本意应该是希望在3.1.0以上。按照我对tensorflow官方的尿性的了解, 他们每个版本都会使用当前最新的bazel,换言之,在编译tensorflow 2.3.1期间很有可能最新的bazel版本是3.1.0,也就是说官方用的是bazel 3.1.0编译的。为了确保编译不出问题,跟官方保持一致的版本是最明智的选择。

前往【https://github.com/bazelbuild/bazel/releases】下载bazel-3.1.0-windows-x86_64.exe,如下所示:

下载后,放入到E:\bazel目录中,并把E:\bazel加入到环境变量PATH中,同时,把bazel-3.1.0-windows-x86_64.exe重命名为bazel.exe。做完这一切后,打开cmd,输入bazel --version确认bazel是否安装成功,以及版本是否正确。

E:\tensorflow-2.3.1>bazel --version
bazel 3.1.0

2 开始编译

2.1 执行configure.py

configure.py文件会预先设置python等一些相关可选项,需要先运行这个文件。

E:\tensorflow-2.3.1>python configure.py
You have bazel 3.1.0 installed.
Please specify the location of python. [Default is E:\Anaconda3\python.exe]:
Found possible Python library paths:
  E:\Anaconda3\lib\site-packages
Please input the desired Python library path to use.  Default is [E:\Anaconda3\lib\site-packages]
Do you wish to build TensorFlow with ROCm support? [y/N]: n
No ROCm support will be enabled for TensorFlow.
Do you wish to build TensorFlow with CUDA support? [y/N]: n
No CUDA support will be enabled for TensorFlow.
Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is /arch:AVX]:
Would you like to override eigen strong inline for some C++ compilation to reduce the compilation time? [Y/n]: n
Not overriding eigen strong inline, some compilations could take more than 20 mins.
Would you like to interactively configure ./WORKSPACE for Android builds? [y/N]: n
Not configuring the WORKSPACE for Android builds.
Preconfigured Bazel build configs. You can use any of the below by adding "--config=<>" to your build command. See .bazelrc for more details.
        --config=mkl            # Build with MKL support.
        --config=monolithic     # Config for mostly static monolithic build.
        --config=ngraph         # Build with Intel nGraph support.
        --config=numa           # Build with NUMA support.
        --config=dynamic_kernels        # (Experimental) Build kernels into separate shared objects.
        --config=v2             # Build TensorFlow 2.x instead of 1.x.
Preconfigured Bazel build configs to DISABLE default on features:
        --config=noaws          # Disable AWS S3 filesystem support.
        --config=nogcp          # Disable GCP support.
        --config=nohdfs         # Disable HDFS support.
        --config=nonccl         # Disable NVIDIA NCCL support.

运行期间,会确认python路径、是否配置android等等,因为我这边是编译精简CPU版的tflite,且是为了编译dll。因此android、cuda、ROCm等我都选择了N。

2.2 编译

直接执行bazel进行编译即可:

bazel build -c opt --config=mkl  //tensorflow/lite/c:tensorflowlite_c.dll

稍等片刻,等待自动下载相关库,并完成编译:

····
INFO: From Linking tensorflow/lite/c/tensorflowlite_c.dll:
LINK : warning LNK4044: 无法识别的选项“/s”;已忽略
  正在创建库 bazel-out/x64_windows-opt/bin/tensorflow/lite/c/tensorflowlite_c.dll.if.lib 和对象
bazel-out/x64_windows-opt/bin/tensorflow/lite/c/tensorflowlite_c.dll.if.exp
Target //tensorflow/lite/c:tensorflowlite_c.dll up-to-date:
  bazel-bin/tensorflow/lite/c/tensorflowlite_c.dll
INFO: Elapsed time: 291.250s, Critical Path: 60.46s
INFO: 305 processes: 305 local.
INFO: Build completed successfully, 444 total actions

打开E:\tensorflow-2.3.1\bazel-out\x64_windows-opt\bin\tensorflow\lite\c路径即可得看到tensorflowlite_c.dll和tensorflowlite_c.dll.if.lib两个文件。这里个文件即为我们最终的结果。

2.3 抠出头文件

光有dll和lib还不够,我们还需要头文件才能在c++代码里面引用。最简单的方法是直接将整个tensorflow源码根路径加入到include路径中,这样的话整个项目会过于庞大。

最佳做法是将E:\tensorflow-2.3.1\tensorflow目录下,只保留lite目录,其他目录删除。在lite目录中只保留c和core两个子目录,其他的删除。在c和core两个子目录中,只保留.h文件,其他的文件删除。

简而言之,只需要E:\tensorflow-2.3.1\tensorflow\lite\c与E:\tensorflow-2.3.1\tensorflow\lite\core两个目录下的.h文件。

3 打包下载

由于各种因素问题,可能有些读者会遇到各种问题没法解决。问题不大,我这里提供已经编译好的直接下载。

bazel 3.1.0下载:http://askonline.tech/download/2.html

tensorflow 2.3.1源码:http://askonline.tech/download/3.html

tflite dll 2.3.1包含头文件与dll和lib文件:http://askonline.tech/download/1.html

相关文章
|
1月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
【大作业-04】手把手教你构建垃圾分类系统-基于tensorflow2.3
本文介绍了基于TensorFlow 2.3的垃圾分类系统,通过B站视频和博客详细讲解了系统的构建过程。系统使用了包含8万张图片、245个类别的数据集,训练了LeNet和MobileNet两个卷积神经网络模型,并通过PyQt5构建了图形化界面,用户上传图片后,系统能识别垃圾的具体种类。此外,还提供了模型和数据集的下载链接,方便读者复现实验。垃圾分类对于提高资源利用率、减少环境污染具有重要意义。
39 0
【大作业-04】手把手教你构建垃圾分类系统-基于tensorflow2.3
|
2月前
|
机器学习/深度学习 算法 TensorFlow
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现用户上传一张动物图片,识别其名称。
93 1
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
|
5月前
|
机器学习/深度学习 人工智能 算法
海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow
海洋生物识别系统。以Python作为主要编程语言,通过TensorFlow搭建ResNet50卷积神经网络算法,通过对22种常见的海洋生物('蛤蜊', '珊瑚', '螃蟹', '海豚', '鳗鱼', '水母', '龙虾', '海蛞蝓', '章鱼', '水獭', '企鹅', '河豚', '魔鬼鱼', '海胆', '海马', '海豹', '鲨鱼', '虾', '鱿鱼', '海星', '海龟', '鲸鱼')数据集进行训练,得到一个识别精度较高的模型文件,然后使用Django开发一个Web网页平台操作界面,实现用户上传一张海洋生物图片识别其名称。
187 7
海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow
|
5天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
25 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
5天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
25 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
5月前
|
机器学习/深度学习 人工智能 算法
【乐器识别系统】图像识别+人工智能+深度学习+Python+TensorFlow+卷积神经网络+模型训练
乐器识别系统。使用Python为主要编程语言,基于人工智能框架库TensorFlow搭建ResNet50卷积神经网络算法,通过对30种乐器('迪吉里杜管', '铃鼓', '木琴', '手风琴', '阿尔卑斯号角', '风笛', '班卓琴', '邦戈鼓', '卡萨巴', '响板', '单簧管', '古钢琴', '手风琴(六角形)', '鼓', '扬琴', '长笛', '刮瓜', '吉他', '口琴', '竖琴', '沙槌', '陶笛', '钢琴', '萨克斯管', '锡塔尔琴', '钢鼓', '长号', '小号', '大号', '小提琴')的图像数据集进行训练,得到一个训练精度较高的模型,并将其
75 0
【乐器识别系统】图像识别+人工智能+深度学习+Python+TensorFlow+卷积神经网络+模型训练
|
2月前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
108 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
1月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
【大作业-02】水果蔬菜识别系统-基于tensorflow2.3开发
2021年6月18日,TensorFlow 2.3物体分类代码已修复并更新。本项目支持自定义数据集训练,包括基于CNN和Mobilenet的模型,后者准确率高达97%。提供了详细的CSDN教程、B站教学视频及数据集下载链接,帮助用户快速上手。项目还包括PyQt5构建的图形界面,方便用户上传图片进行果蔬识别。更多详情与代码可在Gitee获取。
43 0
【大作业-02】水果蔬菜识别系统-基于tensorflow2.3开发
|
2月前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
102 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
3月前
|
机器学习/深度学习 人工智能 前端开发
【人工智能】利用TensorFlow.js在浏览器中实现一个基本的情感分析系统
使用TensorFlow.js在浏览器中进行情感分析是一个非常实用的应用场景。TensorFlow.js 是一个用于在JavaScript环境中训练和部署机器学习模型的库,使得开发者能够在客户端直接运行复杂的机器学习任务。对于情感分析,我们可以使用预先训练好的模型来识别文本中的积极、消极或中性情感。
107 4
【人工智能】利用TensorFlow.js在浏览器中实现一个基本的情感分析系统

热门文章

最新文章