Trang này được dịch bởi Cloud Translation API.
Switch to English

Khởi động nhanh Android

Để bắt đầu với TensorFlow Lite trên Android, chúng tôi khuyên bạn nên khám phá ví dụ sau.

Ví dụ phân loại hình ảnh Android

Đọc phân loại hình ảnh Android của TensorFlow Lite để được giải thích về mã nguồn.

Ứng dụng ví dụ này sử dụng phân loại hình ảnh để liên tục phân loại bất cứ thứ gì nó nhìn thấy từ camera phía sau của thiết bị. Ứng dụng có thể chạy trên thiết bị hoặc trình giả lập.

Suy luận được thực hiện bằng cách sử dụng API Java của TensorFlow Lite và Thư viện hỗ trợ Android của TensorFlow Lite . Ứng dụng demo phân loại các khung theo thời gian thực, hiển thị các phân loại có thể xảy ra hàng đầu. Nó cho phép người dùng lựa chọn giữa một điểm nổi hoặc mô hình lượng tử hóa , chọn số lượng luồng và quyết định chạy trên CPU, GPU hoặc thông qua NNAPI .

Xây dựng trong Android Studio

Để xây dựng ví dụ trong Android Studio, hãy làm theo các hướng dẫn trong README.md .

Tạo ứng dụng Android của riêng bạn

Để bắt đầu nhanh chóng viết mã Android của riêng bạn, chúng tôi khuyên bạn nên sử dụng ví dụ phân loại hình ảnh Android của chúng tôi làm điểm bắt đầu.

Các phần sau có chứa một số thông tin hữu ích để làm việc với TensorFlow Lite trên Android.

Sử dụng Thư viện hỗ trợ Android của TensorFlow Lite

Thư viện hỗ trợ Android TensorFlow Lite giúp tích hợp các mô hình vào ứng dụng của bạn dễ dàng hơn. Nó cung cấp các API cấp cao giúp chuyển đổi dữ liệu đầu vào thô thành dạng được yêu cầu bởi mô hình và diễn giải đầu ra của mô hình, giảm số lượng mã soạn sẵn cần thiết.

Nó hỗ trợ các định dạng dữ liệu phổ biến cho đầu vào và đầu ra, bao gồm cả hình ảnh và mảng. Nó cũng cung cấp các đơn vị tiền xử lý và hậu xử lý để thực hiện các tác vụ như thay đổi kích thước hình ảnh và cắt xén.

Để bắt đầu, hãy làm theo các hướng dẫn trong Thư viện hỗ trợ Android của TensorFlow Lite README.md .

Sử dụng AAR của TensorFlow Lite từ JCenter

Để sử dụng TensorFlow Lite trong ứng dụng Android của bạn, chúng tôi khuyên bạn nên sử dụng AAR của TensorFlow Lite được lưu trữ tại JCenter .

Bạn có thể chỉ định điều này trong build.gradle phụ thuộc build.gradle của mình như sau:

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

AAR này bao gồm các tệp nhị phân cho tất cả các ABI của Android . Bạn có thể giảm kích thước nhị phân của ứng dụng bằng cách chỉ bao gồm các ABI bạn cần hỗ trợ.

Chúng tôi khuyên hầu hết các nhà phát triển bỏ qua các arm32 x86 , x86_64 và arm32. Điều này có thể đạt được với cấu hình Gradle sau, chỉ bao gồm armeabi-v7aarm64-v8a , bao gồm hầu hết các thiết bị Android hiện đại.

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

Để tìm hiểu thêm về abiFilters , hãy xem NdkOptions trong tài liệu Android Gradle.

Xây dựng TensorFlow Lite cục bộ

Trong một số trường hợp, bạn có thể muốn sử dụng bản dựng cục bộ của TensorFlow Lite. Ví dụ: bạn có thể đang xây dựng một nhị phân tùy chỉnh bao gồm các hoạt động được chọn từ TensorFlow hoặc bạn có thể muốn thực hiện các thay đổi cục bộ cho TensorFlow Lite.

Thiết lập môi trường xây dựng bằng Docker

  • Tải về tập tin Docker. Bằng cách tải xuống tệp Docker, bạn đồng ý rằng các điều khoản dịch vụ sau đây chi phối việc sử dụng của bạn:

Bằng cách nhấp để chấp nhận, bạn đồng ý rằng tất cả việc sử dụng Bộ công cụ phát triển bản địa Android Studio và Android sẽ chịu sự điều chỉnh của Thỏa thuận cấp phép bộ công cụ phát triển phần mềm Android có sẵn tại https://developer.android.com/studio/terms (URL đó có thể được Google cập nhật hoặc thay đổi theo thời gian).

Bạn phải thừa nhận các điều khoản dịch vụ để tải xuống tệp. Công nhận

  • Bạn có thể tùy ý thay đổi phiên bản Android SDK hoặc NDK. Đặt tệp Docker đã tải xuống vào một thư mục trống và xây dựng hình ảnh docker của bạn bằng cách chạy:
 docker build . -t tflite-builder -f tflite-android.Dockerfile
 
  • Khởi động bộ chứa docker tương tác bằng cách gắn thư mục hiện tại của bạn vào / tmp bên trong bộ chứa (lưu ý rằng / Tensorflow_src là kho lưu trữ TensorFlow bên trong bộ chứa):
 docker run -it -v $PWD:/tmp tflite-builder bash
 

Nếu bạn sử dụng PowerShell trên Windows, hãy thay thế "$ PWD" bằng "pwd".

Nếu bạn muốn sử dụng kho lưu trữ TensorFlow trên máy chủ, thay vào đó hãy gắn thư mục máy chủ đó (-v hostDir: / tmp).

  • Khi bạn ở trong vùng chứa, bạn có thể chạy các phần sau để tải xuống các công cụ và thư viện Android bổ sung (lưu ý rằng bạn có thể cần chấp nhận giấy phép):
 android update sdk --no-ui -a --filter tools,platform-tools,android-${ANDROID_API_LEVEL},build-tools-${ANDROID_BUILD_TOOLS_VERSION}
 

Bây giờ bạn có thể tiến hành phần "Xây dựng và cài đặt". Sau khi xây dựng xong các thư viện, bạn có thể sao chép chúng vào / tmp bên trong container để bạn có thể truy cập chúng trên máy chủ.

Thiết lập môi trường xây dựng mà không cần Docker

Cài đặt các điều kiện tiên quyết của Bazel và Android

Bazel là hệ thống xây dựng chính cho TensorFlow. Để xây dựng với nó, bạn phải cài đặt nó và Android NDK và SDK trên hệ thống của bạn.

  1. Cài đặt phiên bản mới nhất của hệ thống xây dựng Bazel .
  2. Android NDK được yêu cầu để xây dựng mã TensorFlow Lite gốc (C / C ++). Phiên bản được đề xuất hiện tại là 17c, có thể được tìm thấy ở đây .
  3. Có thể lấy SDK Android và các công cụ xây dựng ở đây hoặc thay thế như một phần của Android Studio . Công cụ xây dựng API> = 23 là phiên bản được đề xuất để xây dựng TensorFlow Lite.
Định cấu hình WORKSPACE và .bazelrc

Chạy ./configure script trong thư mục kiểm tra TensorFlow root, và câu trả lời "Có" khi kịch bản yêu cầu tương tác cấu hình ./WORKSPACE dành cho Android được xây dựng. Tập lệnh sẽ cố gắng định cấu hình cài đặt bằng các biến môi trường sau:

  • ANDROID_SDK_HOME
  • ANDROID_SDK_API_LEVEL
  • ANDROID_NDK_HOME
  • ANDROID_NDK_API_LEVEL

Nếu các biến này không được đặt, chúng phải được cung cấp tương tác trong dấu nhắc tập lệnh. Cấu hình thành công sẽ mang lại các mục tương tự như sau trong tệp .tf_configure.bazelrc trong thư mục gốc:

 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"
 

Xây dựng và cài đặt

Sau khi Bazel được cấu hình đúng cách, bạn có thể xây dựng AAR của TensorFlow Lite từ thư mục kiểm tra gốc như sau:

 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
 

Điều này sẽ tạo ra một tệp AAR trong bazel-bin/tensorflow/lite/java/ . Lưu ý rằng điều này xây dựng AAR "béo" với một số kiến ​​trúc khác nhau; nếu bạn không cần tất cả chúng, hãy sử dụng tập hợp con phù hợp với môi trường triển khai của bạn. Từ đó, có một số cách tiếp cận bạn có thể thực hiện để sử dụng .aar trong dự án Android Studio của mình.

Thêm AAR trực tiếp vào dự án

Di chuyển tensorflow-lite.aar vào một thư mục có tên libs trong dự án của bạn. Sửa đổi tệp build.gradle của ứng dụng của bạn để tham chiếu thư mục mới và thay thế phụ thuộc TensorFlow Lite hiện có bằng thư viện cục bộ mới, ví dụ:

 allprojects {
    repositories {
        jcenter()
        flatDir {
            dirs 'libs'
        }
    }
}

dependencies {
    compile(name:'tensorflow-lite', ext:'aar')
}
 
Cài đặt AAR vào kho lưu trữ Maven cục bộ

Thực hiện lệnh sau từ thư mục kiểm tra gốc của bạn:

 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
 

Trong build.gradle của ứng dụng, hãy đảm bảo bạn có phụ thuộc mavenLocal() và thay thế phụ thuộc TensorFlow Lite tiêu chuẩn bằng ứng dụng hỗ trợ cho các lựa chọn của TensorFlow:

 allprojects {
    repositories {
        jcenter()
        mavenLocal()
    }
}

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

Lưu ý rằng phiên bản 0.1.100 ở đây hoàn toàn là vì mục đích thử nghiệm / phát triển. Với AAR cục bộ được cài đặt, bạn có thể sử dụng API suy luận Java TensorFlow Lite tiêu chuẩn trong mã ứng dụng của mình.

Xây dựng ứng dụng Android bằng C ++

Có hai cách để sử dụng TFLite thông qua C ++ nếu bạn xây dựng ứng dụng của mình bằng NDK:

Sử dụng API TFLite C

Đây là cách tiếp cận được đề xuất . Tải xuống AAR của TensorFlow Lite được lưu trữ tại JCenter , đổi tên nó thành tensorflow-lite-*.zip và giải nén nó. Bạn phải bao gồm bốn tệp headers/tensorflow/lite/ trong headers/tensorflow/lite/headers/tensorflow/lite/c/ và thư viện động libtensorflowlite_jni.so trong jni/ thư mục trong dự án NDK của bạn.

c_api.h tiêu đề c_api.h chứa tài liệu cơ bản về cách sử dụng API TFLite C.

Sử dụng API TFLite C ++

Nếu bạn muốn sử dụng TFLite thông qua API C ++, bạn có thể xây dựng các thư viện chia sẻ C ++:

Armeabi-v7a 32 bit:

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

Cánh tay 64 bit64-v8a:

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

Hiện tại, không có cách đơn giản nào để trích xuất tất cả các tệp tiêu đề cần thiết, vì vậy bạn phải bao gồm tất cả các tệp tiêu đề trong tensorflow/lite/ từ kho lưu trữ TensorFlow. Ngoài ra, bạn sẽ cần các tệp tiêu đề từ FlatBuffersAbseil .