Tensorflow Lite demo for Android 正确使用
1、背景
2017年,谷歌发布了一个专门针对移动设备优化的Tensorflow版本——Tensorflow Lite,并于年末开放了开发者预览版。
当前ML,DL系统通常软件服务商的服务端为用户进行服务,而此次Google希望能将一部分相关处理转移到用户的移动设备上,从而减轻服务端的压力。同时,并且一些需要学习的用户数据涉及用户的敏感信息,并不适合通过网络连接发送给服务商,因此利用Tensorflow Lite可以使得在设备本地进行模型的train与inference。
当前ML,DL系统通常软件服务商的服务端为用户进行服务,而此次Google希望能将一部分相关处理转移到用户的移动设备上,从而减轻服务端的压力。同时,并且一些需要学习的用户数据涉及用户的敏感信息,并不适合通过网络连接发送给服务商,因此利用Tensorflow Lite可以使得在设备本地进行模型的train与inference。
2、特点
TensorFlow Lite具有的特点如下:
- 轻量级:允许小 binary size 和快速初始化/启动的设备端机器学习模型进行推断。
- 跨平台:运行时的设计使其可以在不同的平台上运行,如目前支持的android和 iOS。
- 快速:专为移动设备进行优化,包括大幅提升模型加载时间,支持硬件加速。
3、运行环境
ide:Android Studio最新版本:3.1.3
SDK:Android SDK 高于26
NDK:16以上
JDK:jdk1.8以上
如果没有配置好,建议安装Android Studio最新版本3.1.3后进行sdk、ndk升级。
4、下载demo进行编译
4.1 下载
4.2 导入Android studio编译
下面是导入后的目录结构:

build的时候你会遇到很多问题,这个时候你需要修改project的build.gradle以及APP的build.gradle
project的build.gradle文件修改后的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.1.3' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() jcenter() mavenCentral() } } task clean(type: Delete) { delete rootProject.buildDir } |
APP的build.gradle文件修改后的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | apply plugin: 'com.android.application' android { compileSdkVersion 27 buildToolsVersion "27.0.3" defaultConfig { applicationId "android.example.com.tflitecamerademo" // Required by Camera2 API. minSdkVersion 21 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } lintOptions { abortOnError false } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } aaptOptions { noCompress "tflite" } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } repositories { maven { url 'https://google.bintray.com/tensorflow' } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support.constraint:constraint-layout:1.1.2' implementation 'com.android.support:design:27.1.1' implementation 'com.android.support:support-annotations:27.1.1' implementation 'com.android.support:support-v13:27.1.1' implementation 'org.tensorflow:tensorflow-lite:1.9.0' testImplementation 'junit:junit:4.12' } def modelDownloadUrl = "https://storage.googleapis.com/download.tensorflow.org/models/tflite/mobilenet_v1_224_android_quant_2017_11_08.zip" def localCache = "build/intermediates/mobilenet_v1_224_android_quant_2017_11_08.zip" def targetFolder = "src/main/assets" task downloadModel(type: DownloadUrlTask) { doFirst { println "Downloading ${modelDownloadUrl}" } sourceUrl = "${modelDownloadUrl}" target = file("${localCache}") } task unzipModel(type: Copy, dependsOn: 'downloadModel') { doFirst { println "Unzipping ${localCache}" } from zipTree("${localCache}") into "${targetFolder}" } // Ensure the model file is downloaded and extracted before every build preBuild.dependsOn unzipModel class DownloadUrlTask extends DefaultTask { @Input String sourceUrl @OutputFile File target @TaskAction void download() { ant.get(src: sourceUrl, dest: target) } } |
其中TensorFlow Lite的最新版本库是:
1 | org.tensorflow:tensorflow-lite:1.9.0 |
最新的里面有setNumThreads()方法的实现。
4、运行demo

如果有什么问题请QQ联系我。