เอกสารนี้อธิบายวิธีสร้างไลบรารี 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 ในระบบของคุณเพื่อสร้างด้วย
- ติดตั้งเวอร์ชันล่าสุดของ ระบบการสร้าง Bazel
- ต้องใช้ Android NDK ในการสร้างโค้ด TensorFlow Lite แบบเนทีฟ (C/C++) เวอร์ชันที่แนะนำในปัจจุบันคือ 21e ซึ่งสามารถพบได้ ที่นี่
- สามารถรับ 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 มาตรฐานในโค้ดแอปของคุณได้