เอกสารนี้อธิบายวิธีสร้างไลบรารี TensorFlow Lite Android ด้วยตัวคุณเอง โดยปกติ คุณไม่จำเป็นต้องสร้างไลบรารี TensorFlow Lite Android ในเครื่อง หากคุณต้องการใช้งาน โปรดดู การเริ่มต้นอย่างรวดเร็วของ 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 แสดงว่าคุณยอมรับว่าข้อกำหนดในการให้บริการต่อไปนี้ควบคุมการใช้งานของคุณ:
การคลิกเพื่อยอมรับ แสดงว่าคุณตกลงว่าการใช้ Android Studio และ Android Native Development Kit ทั้งหมดจะอยู่ภายใต้ข้อตกลงสิทธิ์การใช้งานชุดพัฒนาซอฟต์แวร์ Android ซึ่งมีอยู่ที่ 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}"
ตอนนี้ คุณควรดำเนินการในส่วน กำหนดค่า WORKSPACE และ .bazelrc เพื่อกำหนดการตั้งค่าบิลด์
หลังจากที่คุณสร้างไลบรารีเสร็จแล้ว คุณสามารถคัดลอกไลบรารีเหล่านั้นไปที่ /host_dir ภายในคอนเทนเนอร์เพื่อให้คุณสามารถเข้าถึงได้บนโฮสต์
ตั้งค่าสภาพแวดล้อมบิลด์โดยไม่มี Docker
ติดตั้งข้อกำหนดเบื้องต้นของ Bazel และ Android
Bazel เป็นระบบบิลด์หลักสำหรับ TensorFlow หากต้องการสร้างด้วย คุณต้องมีและติดตั้ง Android NDK และ SDK บนระบบของคุณ
- ติดตั้ง ระบบ Bazel build เวอร์ชันล่าสุด
- ต้องใช้ Android NDK เพื่อสร้างโค้ดเนทิฟ (C/C++) TensorFlow Lite เวอร์ชันที่แนะนำปัจจุบันคือ 21e ซึ่งอาจพบได้ ที่นี่
- สามารถรับ 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-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 ที่เลือก:
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 มาตรฐานในโค้ดของแอปได้