TensorFlow Lite C++ image classification demo
编译环境:docker
编译参考:https://tensorflow.google.cn/lite/guide/build_arm64
一:编译Tensorflowlite
- 从github上下载tensorflow源码,
- 地址:https://github.com/tensorflow/tensorflow
- 加速下载:
pip3 install -i http://mirrors.aliyun.com/pypi/simple/ --upgrade tensorflow
- 下载tensorflow依赖库
./tensorflow/lite/tools/make/download_dependencies.sh
- 修改编译环境
- 修改MakeFile中的交叉编译工具为板子上专用的(我这板子用的是aarch64-linux-gnu-g++通用的arm64交叉编译工具),文件如下
- /home/tensorflowlite/tensorflow/tensorflow/lite/tools/make/MakeFile
- 或直接修改这里
- 编译
./tensorflow/lite/tools/make/build_aarch64_lib.sh
- 编译的结果在/home/tensorflowlite/tensorflow/tensorflow/lite/tools/make/gen/linux_aarch64/lib,这里的两个文件在图像分类demo里都要用到。
- 验证
- /home/tensorflowlite/tensorflow/tensorflow/lite/tools/make/gen/linux_aarch64/bin/minimal是集成了最精简的tensorflowlite的示例程序,copy到板子上
- 执行./minimal mobilenet_v1_1.0_224.tflite,运行如下图,说明编译正常
- 上面的tflite可以从这里下载,存到了/tmp目录下
curl https://storage.googleapis.com/download.tensorflow.org/models/mobilenet_v1_2018_02_22/mobilenet_v1_1.0_224.tgz | tar xzv -C /tmp
二:编译图像分类demo
- 示例代码地址如下,有编译的README,本文演示用源码编译https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/examples/label_image
- 将examle/label_image目录中的源码放到自己的工程下(用的是板子的交叉编译工具)
- 将源码中的bitmap_helpers.cpp(cc被改成了cpp)和label_image.cpp加入makefile中
- 将源码中的.h头文件和依赖的头文件目录加入makefile中
- 将libtensorflowlite.a和libbenchmark.a(这个不能少,有依赖文件编译到这里,如delegate_provider、command_line_flags)加入makefile中
- 直接make,生成labelimage可执行文件,copy到板子上
- 执行测试指令
./labelimage --tflite_model mobilenet_v1_1.0_224.tflite --labels labels.txt --image grace_hopper.bmp
- 上面的参数部分
- tflite模型,下载地址:(看命令,存到了/tmp目录下)
curl https://storage.googleapis.com/download.tensorflow.org/models/mobilenet_v1_2018_02_22/mobilenet_v1_1.0_224.tgz | tar xzv -C /tmp
- labels.txt,下载地址:
curl https://storage.googleapis.com/download.tensorflow.org/models/mobilenet_v1_1.0_224_frozen.tgz | tar xzv -C /tmp mobilenet_v1_1.0_224/labels.txt
- bmp图片,在tensorflow源码的这个位置
tensorflow/lite/examples/label_image/testdata/grace_hopper.bmp
- tflite模型,下载地址:(看命令,存到了/tmp目录下)
- 运行结果: