• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * download-models.gradle
3 *     Downloads model files from ${MODEL_URL} into application's asset folder
4 * Input:
5 *     project.ext.TMP_DIR: absolute path to hold downloaded zip files
6 *     project.ext.ASSET_DIR: absolute path to save unzipped model files
7 * Output:
8 *     3 model files will be downloaded into given folder of ext.ASSET_DIR
9 */
10// hard coded model files
11// LINT.IfChange
12def models = ['inception_v1.zip',
13              'object_detection/ssd_mobilenet_v1_android_export.zip',
14              'stylize_v1.zip',
15              'speech_commands_conv_actions.zip']
16// LINT.ThenChange(//tensorflow/tools/android/test/BUILD)
17
18// Root URL for model archives
19def MODEL_URL = 'https://storage.googleapis.com/download.tensorflow.org/models'
20
21buildscript {
22    repositories {
23        jcenter()
24    }
25    dependencies {
26        classpath 'de.undercouch:gradle-download-task:4.0.2'
27    }
28}
29
30import de.undercouch.gradle.tasks.download.Download
31task downloadFile(type: Download){
32    for (f in models) {
33        src "${MODEL_URL}/" + f
34    }
35    dest new File(project.ext.TMP_DIR)
36    overwrite true
37}
38
39task extractModels(type: Copy) {
40    for (f in models) {
41        def localFile = f.split("/")[-1]
42        from zipTree(project.ext.TMP_DIR + '/' + localFile)
43    }
44
45    into file(project.ext.ASSET_DIR)
46    fileMode  0644
47    exclude '**/LICENSE'
48
49    def needDownload = false
50    for (f in models) {
51        def localFile = f.split("/")[-1]
52        if (!(new File(project.ext.TMP_DIR + '/' + localFile)).exists()) {
53            needDownload = true
54        }
55    }
56
57    if (needDownload) {
58        dependsOn downloadFile
59    }
60}
61
62tasks.whenTaskAdded { task ->
63    if (task.name == 'assembleDebug') {
64        task.dependsOn 'extractModels'
65    }
66    if (task.name == 'assembleRelease') {
67        task.dependsOn 'extractModels'
68    }
69}
70
71