เอกสารนี้จะอธิบายวิธีสร้างไลบรารี Android ของ TensorFlow Lite ด้วยตัวคุณเอง โดยปกติแล้ว คุณไม่จำเป็นต้องสร้างไลบรารี Android ของ TensorFlow Lite ภายในเครื่อง
ใช้สแนปชอตตอนกลางคืน
หากต้องการใช้สแนปชอตตอนกลางคืน ให้เพิ่มที่เก็บต่อไปนี้ลงในการกำหนดค่าบิลด์ของ Gradle ระดับรูท
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'
}
}
}
เพิ่มสแนปชอตตอนกลางคืนไปยังทรัพยากร Dependency (หรือแก้ไขตามความจำเป็น) ไปยัง create.gradle ของคุณ
...
dependencies {
...
implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
implementation 'org.tensorflow:tensorflow-lite-gpu:0.0.0-nightly-SNAPSHOT'
implementation 'org.tensorflow:tensorflow-lite-support:0.0.0-nightly-SNAPSHOT'
...
}
...
สร้าง TensorFlow Lite ภายในเครื่อง
ในบางกรณี คุณอาจต้องการใช้บิลด์ภายในของ TensorFlow Lite ตัวอย่างเช่น คุณอาจสร้างไบนารีที่กำหนดเองซึ่งมีการดำเนินการที่เลือกจาก TensorFlow หรือทำการเปลี่ยนแปลง TensorFlow Lite ภายในเครื่อง
ตั้งค่าสภาพแวดล้อมของบิลด์โดยใช้ Docker
- ดาวน์โหลดไฟล์ Docker การดาวน์โหลดไฟล์ Docker หมายความว่าคุณยอมรับว่าข้อกำหนดในการให้บริการต่อไปนี้มีผลบังคับใช้กับการใช้งานไฟล์ดังกล่าว
การคลิกยอมรับหมายความว่าคุณยอมรับว่าการใช้งาน Android Studio และชุดพัฒนาซอฟต์แวร์สำหรับ Android ทั้งหมดจะอยู่ในบังคับของข้อตกลงใบอนุญาตชุดพัฒนาซอฟต์แวร์ Android ซึ่งระบุไว้ที่ https://developer.android.com/studio/terms (Google อาจอัปเดตหรือเปลี่ยนแปลง URL ดังกล่าวเป็นครั้งคราว)
คุณต้องรับทราบข้อกำหนดในการให้บริการในการดาวน์โหลดไฟล์- คุณจะเปลี่ยนเวอร์ชัน Android SDK หรือ NDK ก็ได้ วางไฟล์ Docker ที่ดาวน์โหลดลงในโฟลเดอร์เปล่าแล้วสร้างอิมเมจ Docker โดยเรียกใช้
docker build . -t tflite-builder -f tflite-android.Dockerfile
- เริ่มต้นคอนเทนเนอร์ Docker แบบอินเทอร์แอกทีฟโดยต่อเชื่อมโฟลเดอร์ปัจจุบันเข้ากับ /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}"
ในขั้นตอนนี้ คุณควรไปที่ส่วนกำหนดค่าพื้นที่ทำงานและ .bazelrc เพื่อกำหนดการตั้งค่าของบิลด์
หลังจากสร้างไลบรารีเสร็จแล้ว คุณสามารถคัดลอกไลบรารีเหล่านี้ไปที่ /host_dir ในคอนเทนเนอร์เพื่อให้คุณสามารถเข้าถึงไลบรารีในโฮสต์ได้
ตั้งค่าสภาพแวดล้อมของบิลด์โดยไม่ใช้ Docker
ข้อกำหนดเบื้องต้นสำหรับการติดตั้ง Bazel และ Android
Bazel เป็นระบบบิลด์หลักสำหรับ TensorFlow คุณต้องมีแอปนี้และ Android NDK และ SDK ติดตั้งไว้ในระบบ
- ติดตั้งระบบบิลด์ของ Bazel เวอร์ชันล่าสุด
- ต้องใช้ Android NDK เพื่อสร้างโค้ด TensorFlow Lite แบบเนทีฟ (C/C++) เวอร์ชันปัจจุบันที่แนะนำคือ 25b ซึ่งอาจดูได้ ที่นี่
- รับ 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-r25b"
build --action_env ANDROID_NDK_API_LEVEL="21"
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 --cxxopt=--std=c++17 --config=android_arm64 \
--fat_apk_cpu=x86,x86_64,arm64-v8a,armeabi-v7a \
--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
ของแอปเพื่ออ้างอิงไดเรกทอรีใหม่และแทนที่ทรัพยากร Dependency ของ 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
ของแอป ให้ตรวจสอบว่าคุณมีทรัพยากร Dependency mavenLocal()
และแทนที่ทรัพยากร Dependency ของ 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 ภายในแล้ว คุณจะใช้ TensorFlow Lite API มาตรฐานสำหรับการอนุมาน ในโค้ดของแอปได้