Dokumen ini menjelaskan cara membuat library TensorFlow Lite iOS Anda sendiri. Biasanya, Anda tidak perlu membuat library iOS TensorFlow Lite secara lokal. Jika Anda hanya ingin menggunakannya, cara termudah adalah menggunakan rilis TensorFlow Lite CocoaPods yang stabil atau dirilis setiap malam. Lihat panduan memulai iOS untuk detail selengkapnya tentang cara menggunakannya di proyek iOS Anda.
Membangun secara lokal
Dalam beberapa kasus, Anda mungkin ingin menggunakan build lokal TensorFlow Lite, misalnya saat Anda ingin membuat perubahan lokal pada TensorFlow Lite dan menguji perubahan tersebut di aplikasi iOS Anda atau Anda lebih suka menggunakan kerangka kerja statis daripada kerangka dinamis yang kami sediakan. Untuk membuat kerangka kerja iOS universal untuk TensorFlow Lite secara lokal, Anda perlu membuatnya menggunakan Bazel di mesin macOS.
Instal Xcode
Jika Anda belum melakukannya, Anda perlu menginstal Xcode 8 atau lebih baru dan alat menggunakan xcode-select
:
xcode-select --install
Jika ini adalah pemasangan baru, Anda harus menerima perjanjian lisensi untuk semua pengguna dengan perintah berikut:
sudo xcodebuild -license accept
Instal Bazel
Bazel adalah sistem build utama untuk TensorFlow. Instal Bazel sesuai petunjuk di situs web Bazel . Pastikan untuk memilih versi antara _TF_MIN_BAZEL_VERSION
dan _TF_MAX_BAZEL_VERSION
dalam file configure.py
di root repositori tensorflow
.
Konfigurasi WORKSPACE dan .bazelrc
Jalankan skrip ./configure
di direktori checkout root TensorFlow, dan jawab "Ya" saat skrip menanyakan apakah Anda ingin membangun TensorFlow dengan dukungan iOS.
Membangun kerangka kerja dinamis TensorFlowLiteC (disarankan)
Setelah Bazel dikonfigurasi dengan benar dengan dukungan iOS, Anda dapat membangun kerangka kerja TensorFlowLiteC
dengan perintah berikut.
bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
//tensorflow/lite/ios:TensorFlowLiteC_framework
Perintah ini akan menghasilkan file TensorFlowLiteC_framework.zip
di bawah direktori bazel-bin/tensorflow/lite/ios/
di bawah direktori root TensorFlow Anda. Secara default, kerangka kerja yang dihasilkan berisi biner "gemuk", berisi armv7, arm64, dan x86_64 (tetapi tidak ada i386). Untuk melihat daftar lengkap flag build yang digunakan saat Anda menentukan --config=ios_fat
, silakan merujuk ke bagian konfigurasi iOS di file .bazelrc
.
Bangun kerangka kerja statis TensorFlowLiteC
Secara default, kami hanya mendistribusikan kerangka kerja dinamis melalui Cocoapods. Jika Anda ingin menggunakan kerangka kerja statis, Anda dapat membangun kerangka kerja statis TensorFlowLiteC
dengan perintah berikut:
bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
//tensorflow/lite/ios:TensorFlowLiteC_static_framework
Perintah tersebut akan menghasilkan file bernama TensorFlowLiteC_static_framework.zip
di bawah direktori bazel-bin/tensorflow/lite/ios/
di bawah direktori root TensorFlow Anda. Kerangka kerja statis ini dapat digunakan dengan cara yang sama persis dengan kerangka kerja dinamis.
Secara selektif membangun kerangka kerja TFLite
Anda dapat membuat kerangka kerja yang lebih kecil yang hanya menargetkan sekumpulan model menggunakan build selektif, yang akan melewati operasi yang tidak digunakan dalam set model Anda dan hanya menyertakan kernel op yang diperlukan untuk menjalankan set model yang diberikan. Perintahnya adalah sebagai berikut:
bash tensorflow/lite/ios/build_frameworks.sh \
--input_models=model1.tflite,model2.tflite \
--target_archs=x86_64,armv7,arm64
Perintah di atas akan menghasilkan kerangka kerja statis bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip
untuk operasi bawaan dan kustom TensorFlow Lite; dan secara opsional, buat kerangka kerja statis bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip
jika model Anda berisi operasi Select TensorFlow. Perhatikan bahwa flag --target_archs
dapat digunakan untuk menentukan arsitektur penerapan Anda.
Gunakan di aplikasi Anda sendiri
Pengembang CocoaPods
Ada tiga CocoaPods untuk TensorFlow Lite:
-
TensorFlowLiteSwift
: Menyediakan Swift API untuk TensorFlow Lite. -
TensorFlowLiteObjC
: Menyediakan API Objective-C untuk TensorFlow Lite. -
TensorFlowLiteC
: Pod dasar umum, yang menyematkan runtime inti TensorFlow Lite dan memperlihatkan API C dasar yang digunakan oleh dua pod di atas. Tidak dimaksudkan untuk langsung digunakan oleh pengguna.
Sebagai pengembang, Anda harus memilih pod TensorFlowLiteSwift
atau TensorFlowLiteObjC
berdasarkan bahasa penulisan aplikasi Anda, tetapi tidak keduanya. Langkah-langkah yang tepat untuk menggunakan build lokal TensorFlow Lite berbeda-beda, bergantung pada bagian persis mana yang ingin Anda buat.
Menggunakan API Swift atau Objective-C lokal
Jika Anda menggunakan CocoaPods, dan hanya ingin menguji beberapa perubahan lokal pada Swift API atau Objective-C API TensorFlow Lite, ikuti langkah-langkahnya di sini.
Buat perubahan pada API Swift atau Objective-C di checkout
tensorflow
Anda.Buka file
TensorFlowLite(Swift|ObjC).podspec
, dan perbarui baris ini:
s.dependency 'TensorFlowLiteC', "#{s.version}"
menjadi:
s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
Ini untuk memastikan bahwa Anda membangun Swift atau Objective-C API Anda dengan versi terbaru dariTensorFlowLiteC
API yang tersedia setiap malam (dibuat setiap malam antara pukul 1-4AM Waktu Pasifik) daripada versi stabil, yang mungkin sudah ketinggalan zaman dibandingkan dengantensorflow
lokal Anda Periksa. Atau, Anda dapat memilih untuk memublikasikan versiTensorFlowLiteC
Anda sendiri dan menggunakan versi tersebut (lihat bagian Menggunakan inti TensorFlow Lite lokal di bawah).Di
Podfile
proyek iOS Anda, ubah dependensi sebagai berikut untuk mengarahkan ke jalur lokal ke direktori roottensorflow
Anda.
Untuk Swift:
pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
Untuk Objective-C:
pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'
Perbarui instalasi pod Anda dari direktori root proyek iOS Anda.
$ pod update
Buka kembali ruang kerja yang dihasilkan (
<project>.xcworkspace
) dan bangun kembali aplikasi Anda dalam Xcode.
Menggunakan inti TensorFlow Lite lokal
Anda dapat menyiapkan repositori spesifikasi CocoaPods pribadi, dan memublikasikan kerangka kerja TensorFlowLiteC
kustom Anda ke repo pribadi Anda. Anda dapat menyalin file podspec ini dan mengubah beberapa nilai:
...
s.version = <your_desired_version_tag>
...
# Note the `///`, two from the `file://` and one from the `/path`.
s.source = { :http => "file:///path/to/TensorFlowLiteC_framework.zip" }
...
s.vendored_frameworks = 'TensorFlowLiteC.framework'
...
Setelah membuat file TensorFlowLiteC.podspec
Anda sendiri, Anda dapat mengikuti petunjuk menggunakan CocoaPods pribadi untuk menggunakannya dalam proyek Anda sendiri. Anda juga dapat memodifikasi TensorFlowLite(Swift|ObjC).podspec
untuk menunjuk ke pod TensorFlowLiteC
kustom Anda dan menggunakan pod Swift atau Objective-C dalam proyek aplikasi Anda.
Pengembang Bazel
Jika Anda menggunakan Bazel sebagai alat build utama, Anda cukup menambahkan ketergantungan TensorFlowLite
ke target Anda di file BUILD
Anda.
Untuk Swift:
swift_library(
deps = [
"//tensorflow/lite/swift:TensorFlowLite",
],
)
Untuk Objective-C:
objc_library(
deps = [
"//tensorflow/lite/objc:TensorFlowLite",
],
)
Saat Anda membangun proyek aplikasi, setiap perubahan pada library TensorFlow Lite akan diambil dan dimasukkan ke dalam aplikasi Anda.
Ubah pengaturan proyek Xcode secara langsung
Sangat disarankan untuk menggunakan CocoaPods atau Bazel untuk menambahkan ketergantungan TensorFlow Lite ke dalam proyek Anda. Jika Anda masih ingin menambahkan kerangka kerja TensorFlowLiteC
secara manual, Anda harus menambahkan kerangka kerja TensorFlowLiteC
sebagai kerangka kerja yang disematkan ke proyek aplikasi Anda. Buka TensorFlowLiteC_framework.zip
yang dihasilkan dari build di atas untuk mendapatkan direktori TensorFlowLiteC.framework
. Direktori ini adalah kerangka kerja aktual yang dapat dipahami Xcode.
Setelah Anda menyiapkan TensorFlowLiteC.framework
, pertama-tama Anda perlu menambahkannya sebagai biner tersemat ke target aplikasi Anda. Bagian pengaturan proyek yang tepat untuk ini mungkin berbeda tergantung pada versi Xcode Anda.
- Xcode 11: Buka tab 'Umum' dari editor proyek untuk target aplikasi Anda, dan tambahkan
TensorFlowLiteC.framework
di bawah bagian 'Frameworks, Libraries, and Embedded Content'. - Xcode 10 dan yang lebih rendah: Buka tab 'Umum' dari editor proyek untuk target aplikasi Anda, dan tambahkan kerangka kerja
TensorFlowLiteC.framework
. di bawah 'Biner Tertanam'. Kerangka kerja juga harus ditambahkan secara otomatis di bawah bagian 'Kerangka dan Pustaka Tertaut'.
Saat Anda menambahkan kerangka kerja sebagai biner tersemat, Xcode juga akan memperbarui entri 'Jalur Pencarian Kerangka' di bawah tab 'Pengaturan Bangun' untuk menyertakan direktori induk kerangka kerja Anda. Jika hal ini tidak terjadi secara otomatis, Anda harus menambahkan direktori induk dari direktori TensorFlowLiteC.framework
secara manual.
Setelah kedua pengaturan ini selesai, Anda seharusnya dapat mengimpor dan memanggil C API TensorFlow Lite, yang ditentukan oleh file header di bawah direktori TensorFlowLiteC.framework/Headers
.