TensorFlow Lite 入门样例,亲测有效

2023-11-11

参考链接:

Running on mobile with TensorFlow Lite

 

以物体检测模型为例,生成一个APK文件,可以调用TensorFlow Lite模型,进而实现手机端能够运行物体检测模型。

整体分为以下几个步骤:

    步骤一、训练一个TensorFlow 模型(或者从下载他人训练好的模型)

    步骤二、生成.pb文件

    步骤三、将.pb文件转化为.tflite文件

    步骤四、使用Android Studio 导入TensorFlow安卓样例 ,替换成我们生成的tflite文件,重新编译APK

    

 

#配置依赖

https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/installation.md

 

#下载样例模型

https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md

 

 

下载文件并解压

$wget http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_coco_2018_01_28.tar.gz

$ tar -xzvf ssd_mobilenet_v1_coco_2018_01_28.tar.gz

 

 

 

#设置环境变量

#指定pipeline.config、model.ckpt文件、输出文件的保存路径; 本次测试将样例模型文件放到了/root/tensorflow/mobile/目录下面

#并将 model.ckpt.data-00000-of-00001 重命名为model.ckpt

 

export CONFIG_FILE=/root/tensorflow/mobile/pipeline.config

export CHECKPOINT_PATH=/root/tensorflow/mobile/model.ckpt

export OUTPUT_DIR=/tmp/tflite

 

#Add Libraries to PYTHONPATH

export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

 

#生成.pb文件

python object_detection/export_tflite_ssd_graph.py \

--pipeline_config_path=$CONFIG_FILE \

--trained_checkpoint_prefix=$CHECKPOINT_PATH \

--output_directory=$OUTPUT_DIR \

--add_postprocessing_op=true

 

#查看生成结果,会发现有tflite_graph.pb 、 tflite_graph.pbtxt这两个结果文件

 

#将.pb文件转化为.tflite文件

# TensorFlow Lite Converter https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/toco

 

#生成整数型版本tflite模型

bazel run tensorflow/lite/toco:toco -- \

--input_file=$OUTPUT_DIR/tflite_graph.pb \

--output_file=$OUTPUT_DIR/detect.tflite \

--input_shapes=1,300,300,3 \

--input_arrays=normalized_input_image_tensor \

--output_arrays='TFLite_Detection_PostProcess','TFLite_Detection_PostProcess:1','TFLite_Detection_PostProcess:2','TFLite_Detection_PostProcess:3' \

--inference_type=QUANTIZED_UINT8 \

--mean_values=128 \

--std_values=128 \

--change_concat_input_ranges=false \

--allow_custom_ops \

--default_ranges_min=0 \

--default_ranges_max=255 \

 

#生成float 版本tflite模型

bazel run -c opt tensorflow/lite/toco:toco -- \

--input_file=$OUTPUT_DIR/tflite_graph.pb \

--output_file=$OUTPUT_DIR/float_detect.tflite \

--input_shapes=1,300,300,3 \

--input_arrays=normalized_input_image_tensor \

--output_arrays='TFLite_Detection_PostProcess','TFLite_Detection_PostProcess:1','TFLite_Detection_PostProcess:2','TFLite_Detection_PostProcess:3'  \

--inference_type=FLOAT \

—allow_custom_ops

 

#查看生成结果,会发现有detect.tflite、 float_detect.tflite 这两个结果文件

 

Running our model on Android

 

项目工程文件:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/examples/android

可以git clone https://github.com/tensorflow/tensorflow.git 然后到找到/tensorflow/lite/examples/android目录,直接import到 Android Studio 里面

 

将detect.tflite文件拷贝到 android/app/src/main/assets 目录下,并将coco_labels_list.txt复制一份,改名为labels_list.txt,结果如下图所示

 

对 DetectorActivity.java 进行修改,将物体检测模型替换成我们生成的模型(detect.tflite),并将模型对应的分类列表文件也进行替换(labels_list.txt, 因为我们下载的样例模型就是coco-trained模型,label_list.txt内容与 原来的coco_labels_list.txt一致即可)

 

 

 

重新编译运行,即可生成测试APK

 

 

查看build.gradle文科,可以确定该demo指定的目标运行系统的api level 为26

 

启动模拟器(如果没有模拟器,就创建一个api level为26的,cpu/abi 为x86架构的)

 

 

模拟器启动界面

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TensorFlow Lite 入门样例,亲测有效 的相关文章

随机推荐

  • Oracle 错误 maximum number of processes(150) exceeded 解决办法

    只保留以上服务 关掉其他没用的服务即可
  • 云盾身份认证二要素接口提示参数非法(curl用get方法传中文参数乱码)

    接口文档给的示例代码如下图
  • php邮箱发送文件详解

    双击打开 双击打开 双击打开 邮箱文件链接 https pan baidu com s 1EPLecVwICxwTEqUo3p ktg 提取码 pja6
  • vue 数组对象转数组

    let arr let obj a 1 a 2 for let i in obj arr push obj i a 打印 1 2
  • Github上传大文件

    1 访问github 这里挂了梯子还进不去 可以ping通github但无法访问网页 需要修改hosts 添加以下内容 参考 https blog csdn net suzhiwei boke article details 1251643
  • 《自然语言处理实战 01》商品信息与文本数据的挖掘分析

    文章目录 书山有路勤为径 学海无涯苦作舟 一 数据的导入 1 1 模块设置 1 2 数据导入 1 3 数据的log变换 二 商品的包邮 类别 价格 品牌分析 2 1 包邮分析 2 2 类别分析 2 2 1 类别细分 2 2 2各类别分析 2
  • 可以用声明变量的方式创建链表吗

    绝了 今天异想天开 不用malloc动态申请内存 而用局部变量声明的方法去创建链表 让我这个刚学习链表的人搞懂了为什么要动态申请内存 左图 代码 include
  • Python实现中文字幕雨+源代码

    前言 最近浏览了很多关于用Python和Pygame实现代码雨的案例 发现很多都是没有深入讲解代码的整个实现过程 从0到1教会你制 作中文文字雨 然后在介绍的过程中 我也将深入介绍Pygame的基础知识 让你从一个小白 学完之后也能对Pyg
  • 目标人脸检测与识别(计算机视觉)

    一 实验目的 通过python 语言编程设计人脸检测算法 以此人脸作为训练样本 训练目标人脸模型 进一步实现目标人脸的识别 通过上述编程促进学生理解并掌握人脸检测及识别的相关原理 同时培养学生的编程能力 二 实验硬 软件环境 笔记本电脑 w
  • hex码与float在线相互转换链接

    hex转gloat链接 float转hex链接
  • centOS yacc lex

    yacc command not found configure error Your operating system s lex is insufficient to compile libpcap flex is a lex repl
  • 指针数组(例题详解)

    include
  • js代码让iframe窗口全屏

    最近在工作中使用novnc远程连接电脑 在ifrmae中嵌入novnc页面 点击全屏按钮 能够让iframe页面全屏 我的思路是 1 点击全屏按钮 让当前页面全屏 2 将iframe重新fixed定位 高宽设置100 left top为0
  • jenkins介绍部署及三种构建方式配置

    1 前言 1 1 jenkins介绍 jenkins是基于java开发的一种持续集成工具 用于监控持续重复的工作 功能包括 1 持续的软件版本发布 测试 2 监控外部调用执行项目 Jenkins其实很早之前就有了 最近火起来的原因是 大家都
  • secureCRT 查看日志常用命令

    cd 进入根目录 cd 回到自己的目录 用户不同则目录也不同 root为 root xxt为 home xxt cd 回到上级目录 pwd 显示当前所在的目录 ls 显示当前目录下的所有文件 grep catalina out 在日志中查找
  • 【1G-6G】移动通信技术发展

    移动通信技术发展 1G 早在1947年 贝尔实验室的科学家就提出了蜂窝通信的概念 在20世纪60年代对此进行了系统的实验 20世纪60年代末 70年代初开始出现了第一个蜂窝 Cellular 系统 蜂窝的意思是将一个大区域划分为若干个相邻的
  • ATT&CK - T1546.003

    事件触发的执行 WMI事件订阅 目的 出现场景 ATT CK T1546 003 https attack mitre org techniques T1546 003 检查方式 复现方式 目的 建立持久性 出现场景 比如一些病毒的启动方式
  • excel 两列模糊匹配给出结果_EXCEL快速对比两列数据的不同

    作者 Miss 蜗牛 链接 https www jianshu com p 68b867d4558a 在工作中 我们经常需要对比两列数据或文本是否相同 如果是比较简单并且比较少的时候 我们可以肉眼一个一个的核对 或者都是数字的时候 可以用减
  • MySQL数据库和Oracle数据库的区别

    由于SQL Server不常用 所以这里只针对MySQL数据库和Oracle数据库的区别 1 对事务的提交 MySQL默认是自动提交 而Oracle默认不自动提交 需要用户手动提交 需要在写commit 指令或者点击commit按钮 2 分
  • TensorFlow Lite 入门样例,亲测有效

    参考链接 tensorflow 物体检测模型相关资料 https github com tensorflow models tree master research object detection java api接口 https ten