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

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

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

ใช้สแนปชอตตอนกลางคืน

หากต้องการใช้สแนปชอตตอนกลางคืน ให้เพิ่ม repo ต่อไปนี้ในการกำหนดค่ารูท 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 เพื่อกำหนดการตั้งค่าบิลด์

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

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

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

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

  1. ติดตั้ง ระบบบิลด์ Bazel เวอร์ชันล่าสุด
  2. ต้องใช้ Android NDK เพื่อสร้างโค้ด TensorFlow Lite ดั้งเดิม (C/C++) เวอร์ชันที่แนะนำในปัจจุบันคือ 19c ซึ่งสามารถพบได้ ที่นี่
  3. สามารถรับ Android SDK และเครื่องมือสร้างได้ ที่นี่ หรืออาจเป็นส่วนหนึ่งของ Android Studio Build tools 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-r19c"
build --action_env ANDROID_NDK_API_LEVEL="21"
build --action_env ANDROID_BUILD_TOOLS_VERSION="28.0.3"
build --action_env ANDROID_SDK_API_LEVEL="23"
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 \
  //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 มาตรฐานในโค้ดแอปของคุณได้