หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

การเริ่มต้นอย่างรวดเร็วของ Android

ในการเริ่มต้นใช้งาน TensorFlow Lite บน Android เราขอแนะนำให้สำรวจตัวอย่างต่อไปนี้

ตัวอย่างการจัดประเภทรูปภาพของ Android

อ่านการ จัดประเภทภาพ TensorFlow Lite Android สำหรับคำอธิบายของซอร์สโค้ด

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

การอนุมานดำเนินการโดยใช้ TensorFlow Lite Java API และ TensorFlow Lite Android Support Library แอปสาธิตจัดประเภทเฟรมแบบเรียลไทม์โดยแสดงการจำแนกประเภทที่น่าจะเป็นอันดับต้น ๆ ช่วยให้ผู้ใช้สามารถเลือกระหว่างจุดลอยตัวหรือแบบจำลอง เชิงปริมาณ เลือกจำนวนเธรดและตัดสินใจว่าจะทำงานบน CPU, GPU หรือผ่าน NNAPI

สร้างใน Android Studio

ในการสร้างตัวอย่างใน Android Studio ให้ทำตามคำแนะนำใน README.md

สร้างแอป Android ของคุณเอง

ในการเริ่มต้นเขียนโค้ด Android ของคุณเองอย่างรวดเร็วเราขอแนะนำให้ใช้ ตัวอย่างการจัดประเภทรูปภาพ Android ของเราเป็นจุดเริ่มต้น

ส่วนต่อไปนี้มีข้อมูลที่เป็นประโยชน์สำหรับการทำงานกับ TensorFlow Lite บน Android

ใช้ TensorFlow Lite Android Support Library

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

สนับสนุนรูปแบบข้อมูลทั่วไปสำหรับอินพุตและเอาต์พุตรวมถึงรูปภาพและอาร์เรย์ นอกจากนี้ยังมีหน่วยก่อนและหลังการประมวลผลที่ทำหน้าที่ต่างๆเช่นการปรับขนาดภาพและการครอบตัด

ในการเริ่มต้นให้ทำตามคำแนะนำใน TensorFlow Lite Android Support Library README.md

ใช้ TensorFlow Lite AAR จาก JCenter

หากต้องการใช้ TensorFlow Lite ในแอป Android ของคุณเราขอแนะนำให้ใช้ TensorFlow Lite AAR ซึ่งโฮสต์ที่ JCenter

คุณสามารถระบุสิ่งนี้ในการอ้างอิง build.gradle ของคุณได้ดังนี้:

dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly'
}

AAR นี้รวมไบนารีสำหรับ Android ABI ทั้งหมด คุณสามารถลดขนาดไบนารีของแอปพลิเคชันของคุณได้โดยรวมเฉพาะ ABI ที่คุณต้องการรองรับ

เราแนะนำให้นักพัฒนาส่วนใหญ่ละเว้น x86 , x86_64 และ arm32 สามารถทำได้ด้วยการกำหนดค่า Gradle ต่อไปนี้ซึ่งมีเฉพาะ armeabi-v7a และ arm64-v8a ซึ่งควรครอบคลุมอุปกรณ์ Android ที่ทันสมัยที่สุด

android {
    defaultConfig {
        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a'
        }
    }
}

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ abiFilters โปรดดู NdkOptions ในเอกสาร Android Gradle

สร้าง 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
  • เริ่มคอนเทนเนอร์นักเทียบท่าแบบโต้ตอบโดยการติดตั้งโฟลเดอร์ปัจจุบันของคุณเข้ากับ / tmp ภายในคอนเทนเนอร์ (โปรดทราบว่า / tensorflow_src คือที่เก็บ TensorFlow ภายในคอนเทนเนอร์):
docker run -it -v $PWD:/tmp tflite-builder bash

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

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

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

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

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

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

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

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

เรียกใช้สคริปต์ ./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-r17c"
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 "อ้วน" ด้วยสถาปัตยกรรมที่แตกต่างกัน หากคุณไม่ต้องการทั้งหมดให้ใช้ชุดย่อยที่เหมาะสมกับสภาพแวดล้อมการปรับใช้ของคุณ

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

เพิ่ม AAR ลงในโปรเจ็กต์โดยตรง

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

allprojects {
    repositories {
        jcenter()
        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 {
        jcenter()
        mavenLocal()
    }
}

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

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

สร้างแอป Android โดยใช้ C ++

มีสองวิธีในการใช้ TFLite ผ่าน C ++ หากคุณสร้างแอปด้วย NDK:

ใช้ TFLite C API

นี่คือแนวทางที่ แนะนำ ดาวน์โหลด TensorFlow Lite AAR ซึ่งโฮสต์ที่ JCenter เปลี่ยนชื่อเป็น tensorflow-lite-*.zip และคลายซิป คุณต้องรวมไฟล์ส่วนหัวสี่ไฟล์ไว้ใน headers/tensorflow/lite/ และ headers/tensorflow/lite/c/ โฟลเดอร์และไลบรารีไดนามิก libtensorflowlite_jni.so เกี่ยวข้องใน libtensorflowlite_jni.so jni/ โฟลเดอร์ในโปรเจ็กต์ NDK ของคุณ

ไฟล์ส่วนหัว c_api.h มีเอกสารพื้นฐานเกี่ยวกับการใช้ TFLite C API

ใช้ TFLite C ++ API

หากคุณต้องการใช้ TFLite ผ่าน C ++ API คุณสามารถสร้างไลบรารีที่แชร์ C ++:

32 บิต armeabi-v7a:

bazel build -c opt --config=android_arm //tensorflow/lite:libtensorflowlite.so

64 บิต arm64-v8a:

bazel build -c opt --config=android_arm64 //tensorflow/lite:libtensorflowlite.so

ในปัจจุบันไม่มีวิธีที่ตรงไปตรงมาในการแยกไฟล์ส่วนหัวทั้งหมดที่จำเป็นดังนั้นคุณต้องรวมไฟล์ส่วนหัวทั้งหมดใน tensorflow/lite/ จากที่เก็บ TensorFlow นอกจากนี้คุณจะต้องไฟล์ส่วนหัวจาก FlatBuffers และ โรยตัว