สร้าง TensorFlow Lite สำหรับ Android

เอกสารนี้อธิบายวิธีสร้างไลบรารี TensorFlow Lite Android ด้วยตัวคุณเอง โดยปกติ คุณไม่จำเป็นต้องสร้างไลบรารี TensorFlow Lite Android ในเครื่อง หากคุณต้องการใช้งาน โปรดดู การเริ่มต้นอย่างรวดเร็วของ Android สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีใช้งานในโครงการ Android ของคุณ

ใช้ภาพรวมตอนกลางคืน

หากต้องการใช้สแน็ปช็อตทุกคืน ให้เพิ่ม repo ต่อไปนี้ในการกำหนดค่า root Gradle build ของคุณ

allprojects {
    repositories {      // should be already there
        mavenCentral()  // should be already there
        maven {         // add this repo to use snapshots
          name 'ossrh-snapshot'
          url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
    }
}

สร้าง TensorFlow Lite ในเครื่อง

ในบางกรณี คุณอาจต้องการใช้ TensorFlow Lite รุ่นในเครื่อง ตัวอย่างเช่น คุณอาจกำลังสร้างไบนารีแบบกำหนดเองที่มี การดำเนินการที่เลือกจาก TensorFlow หรือคุณอาจต้องการเปลี่ยนแปลงในเครื่องกับ TensorFlow Lite

ตั้งค่าสภาพแวดล้อมการสร้างโดยใช้ Docker

  • ดาวน์โหลดไฟล์ Docker เมื่อดาวน์โหลดไฟล์ Docker แสดงว่าคุณยินยอมให้ข้อกำหนดในการให้บริการต่อไปนี้ควบคุมการใช้งานของคุณ:

เมื่อคลิกเพื่อยอมรับ แสดงว่าคุณตกลงว่าการใช้ Android Studio และ Android Native Development Kit ทั้งหมดจะอยู่ภายใต้ข้อตกลงสิทธิ์การใช้งาน Android Software Development Kit ซึ่งมีให้ที่ https://developer.android.com/studio/terms (URL ดังกล่าวอาจ ได้รับการปรับปรุงหรือเปลี่ยนแปลงโดย Google เป็นครั้งคราว)

คุณต้องยอมรับข้อกำหนดในการให้บริการจึงจะดาวน์โหลดไฟล์ได้

  • คุณสามารถเลือกเปลี่ยนเวอร์ชัน Android SDK หรือ NDK ได้ วางไฟล์ Docker ที่ดาวน์โหลดมาในโฟลเดอร์ว่างและสร้างอิมเมจนักเทียบท่าของคุณโดยเรียกใช้:
docker build . -t tflite-builder -f tflite-android.Dockerfile
  • เริ่มคอนเทนเนอร์นักเทียบท่าแบบโต้ตอบโดยติดตั้งโฟลเดอร์ปัจจุบันของคุณที่ /host_dir ภายในคอนเทนเนอร์ (โปรดทราบว่า /tensorflow_src เป็นที่เก็บ TensorFlow ภายในคอนเทนเนอร์):
docker run -it -v $PWD:/host_dir tflite-builder bash

หากคุณใช้ PowerShell บน Windows ให้แทนที่ "$PWD" ด้วย "pwd"

หากคุณต้องการใช้ที่เก็บ TensorFlow บนโฮสต์ ให้ติดตั้งไดเร็กทอรีโฮสต์นั้นแทน (-v hostDir:/host_dir)

  • เมื่อคุณอยู่ในคอนเทนเนอร์ คุณสามารถเรียกใช้สิ่งต่อไปนี้เพื่อดาวน์โหลดเครื่องมือและไลบรารี Android เพิ่มเติม (โปรดทราบว่าคุณอาจต้องยอมรับใบอนุญาต):
sdkmanager \
  "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
  "platform-tools" \
  "platforms;android-${ANDROID_API_LEVEL}"

ตอนนี้คุณควรไปที่ส่วน Configure WORKSPACE และ .bazelrc เพื่อกำหนดการตั้งค่า build

หลังจากที่คุณสร้างไลบรารี่เสร็จแล้ว คุณสามารถคัดลอกไปยัง /host_dir ภายในคอนเทนเนอร์ เพื่อให้คุณสามารถเข้าถึงได้บนโฮสต์

ตั้งค่าสภาพแวดล้อมการสร้างโดยไม่ต้องใช้ Docker

ติดตั้ง Bazel และข้อกำหนดเบื้องต้นของ Android

Bazel เป็นระบบสร้างหลักสำหรับ TensorFlow คุณต้องติดตั้ง Android NDK และ SDK ในระบบของคุณเพื่อสร้างด้วย

  1. ติดตั้งเวอร์ชันล่าสุดของ ระบบการสร้าง Bazel
  2. ต้องใช้ Android NDK ในการสร้างโค้ด TensorFlow Lite แบบเนทีฟ (C/C++) เวอร์ชันที่แนะนำในปัจจุบันคือ 21e ซึ่งสามารถพบได้ ที่นี่
  3. สามารถรับ Android SDK และเครื่องมือสร้างได้ ที่นี่ หรืออีกวิธีหนึ่งคือเป็นส่วนหนึ่งของ Android Studio API เครื่องมือสร้าง >= 23 เป็นเวอร์ชันที่แนะนำสำหรับการสร้าง TensorFlow Lite

กำหนดค่า WORKSPACE และ .bazelrc

นี่เป็นขั้นตอนการกำหนดค่าแบบครั้งเดียวที่จำเป็นสำหรับการสร้างไลบรารี TF Lite เรียกใช้สคริปต์ ./configure ในไดเร็กทอรีการชำระเงิน TensorFlow รูท และตอบ "ใช่" เมื่อสคริปต์ขอให้กำหนดค่าแบบโต้ตอบสำหรับบิลด์ ./WORKSPACE สำหรับ Android สคริปต์จะพยายามกำหนดการตั้งค่าโดยใช้ตัวแปรสภาพแวดล้อมต่อไปนี้:

  • ANDROID_SDK_HOME
  • ANDROID_SDK_API_LEVEL
  • ANDROID_NDK_HOME
  • ANDROID_NDK_API_LEVEL

หากไม่ได้ตั้งค่าตัวแปรเหล่านี้ จะต้องระบุตัวแปรเหล่านี้แบบโต้ตอบในพรอมต์ของสคริปต์ การกำหนดค่าที่สำเร็จควรให้รายการที่คล้ายกับต่อไปนี้ในไฟล์ .tf_configure.bazelrc ในโฟลเดอร์รูท:

build --action_env ANDROID_NDK_HOME="/usr/local/android/android-ndk-r21e"
build --action_env ANDROID_NDK_API_LEVEL="26"
build --action_env ANDROID_BUILD_TOOLS_VERSION="30.0.3"
build --action_env ANDROID_SDK_API_LEVEL="30"
build --action_env ANDROID_SDK_HOME="/usr/local/android/android-sdk-linux"

สร้างและติดตั้ง

เมื่อกำหนดค่า Bazel อย่างถูกต้องแล้ว คุณสามารถสร้าง TensorFlow Lite AAR จากไดเร็กทอรีการชำระเงินหลักได้ดังนี้:

bazel build -c opt --fat_apk_cpu=x86,x86_64,arm64-v8a,armeabi-v7a \
  --host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
  --define=android_dexmerger_tool=d8_dexmerger \
  --define=android_incremental_dexing_tool=d8_dexbuilder \
  //tensorflow/lite/java:tensorflow-lite

สิ่งนี้จะสร้างไฟล์ AAR ใน bazel-bin/tensorflow/lite/java/ โปรดทราบว่าสิ่งนี้สร้าง AAR ที่ "อ้วน" ด้วยสถาปัตยกรรมที่แตกต่างกันหลายแบบ หากคุณไม่ต้องการทั้งหมด ให้ใช้เซ็ตย่อยที่เหมาะสมสำหรับสภาพแวดล้อมการปรับใช้ของคุณ

คุณสามารถสร้างไฟล์ AAR ขนาดเล็กที่กำหนดเป้าหมายเฉพาะชุดของโมเดลได้ดังนี้:

bash tensorflow/lite/tools/build_aar.sh \
  --input_models=model1,model2 \
  --target_archs=x86,x86_64,arm64-v8a,armeabi-v7a

สคริปต์ด้านบนจะสร้างไฟล์ tensorflow-lite.aar และเลือกไฟล์ tensorflow-lite-select-tf-ops.aar หากรุ่นใดรุ่นหนึ่งใช้ Tensorflow ops สำหรับรายละเอียดเพิ่มเติม โปรดดู ส่วนลดขนาดไบนารีของ TensorFlow Lite

เพิ่ม AAR โดยตรงในโครงการ

ย้ายไฟล์ tensorflow-lite.aar ไปยังไดเร็กทอรีชื่อ libs ในโปรเจ็กต์ของคุณ แก้ไขไฟล์ build.gradle ของแอปเพื่ออ้างอิงไดเร็กทอรีใหม่และแทนที่การพึ่งพา TensorFlow Lite ที่มีอยู่ด้วยไลบรารีในเครื่องใหม่ เช่น:

allprojects {
    repositories {
        mavenCentral()
        maven {  // Only for snapshot artifacts
            name 'ossrh-snapshot'
            url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
        flatDir {
            dirs 'libs'
        }
    }
}

dependencies {
    compile(name:'tensorflow-lite', ext:'aar')
}

ติดตั้ง AAR ไปยังที่เก็บ Maven ในเครื่อง

ดำเนินการคำสั่งต่อไปนี้จากไดเร็กทอรีการเช็คเอาท์หลักของคุณ:

mvn install:install-file \
  -Dfile=bazel-bin/tensorflow/lite/java/tensorflow-lite.aar \
  -DgroupId=org.tensorflow \
  -DartifactId=tensorflow-lite -Dversion=0.1.100 -Dpackaging=aar

ใน build.gradle ของแอป ตรวจสอบให้แน่ใจว่าคุณมีการพึ่งพา mavenLocal() และแทนที่การพึ่งพา TensorFlow Lite มาตรฐานด้วยอันที่รองรับ TensorFlow ops ที่เลือก:

allprojects {
    repositories {
        mavenCentral()
        maven {  // Only for snapshot artifacts
            name 'ossrh-snapshot'
            url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
        mavenLocal()
    }
}

dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.1.100'
}

โปรดทราบว่าเวอร์ชัน 0.1.100 ที่นี่ใช้เพื่อทดสอบ/พัฒนาเท่านั้น เมื่อติดตั้ง AAR ภายในเครื่อง คุณจะสามารถใช้ API การอนุมาน TensorFlow Lite Java มาตรฐานในโค้ดแอปของคุณได้