Dokumen ini menjelaskan cara membuat library iOS TensorFlow Lite sendiri. Biasanya, Anda tidak perlu membangun library iOS TensorFlow Lite secara lokal. Jika Anda hanya ingin menggunakannya, cara termudah adalah menggunakan rilis stabil atau rilis malam hari dari TensorFlow Lite CocoaPods. Lihat panduan memulai iOS untuk mengetahui detail selengkapnya tentang cara menggunakannya dalam project iOS Anda.
Membuat 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, atau Anda lebih suka menggunakan framework statis dengan framework dinamis yang kami sediakan. Untuk membuat framework iOS universal untuk TensorFlow Lite secara lokal, Anda harus mem-build-nya menggunakan Bazel di mesin macOS.
Menginstal Xcode
Jika belum melakukannya, Anda harus menginstal Xcode 8 atau yang lebih baru dan alatnya menggunakan xcode-select
:
xcode-select --install
Jika ini adalah penginstalan baru, Anda harus menyetujui 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 Bazel. Pastikan untuk memilih
versi antara _TF_MIN_BAZEL_VERSION
dan _TF_MAX_BAZEL_VERSION
dalam
file configure.py
di root repositori tensorflow
.
Mengonfigurasi WORKSPACE dan .bazelrc
Jalankan skrip ./configure
di direktori checkout TensorFlow root, dan jawab "Ya" saat skrip menanyakan apakah Anda ingin mem-build TensorFlow dengan dukungan iOS.
Membangun framework dinamis TensorFlowLiteC (direkomendasikan)
Setelah Bazel dikonfigurasi dengan benar menggunakan dukungan iOS, Anda dapat mem-build framework 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
pada direktori bazel-bin/tensorflow/lite/ios/
pada direktori root TensorFlow Anda.
Secara default, framework yang dihasilkan berisi biner "gemuk", yang berisi armv7,
arm64, dan x86_64 (tetapi tidak ada i386). Untuk melihat daftar lengkap flag build yang digunakan saat Anda menentukan --config=ios_fat
, lihat bagian konfigurasi iOS di file .bazelrc
.
Membangun framework statis TensorFlowLiteC
Secara default, kami hanya mendistribusikan framework dinamis melalui Cocoapods. Jika ingin menggunakan framework statis, Anda dapat membuat framework 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
pada direktori bazel-bin/tensorflow/lite/ios/
di bawah direktori root TensorFlow Anda. Framework statis ini dapat digunakan dengan cara yang sama persis
seperti framework dinamis.
Membangun framework TFLite secara selektif
Anda dapat membuat framework yang lebih kecil dan hanya menargetkan sekumpulan model menggunakan build selektif, yang akan melewati operasi yang tidak digunakan dalam kumpulan model Anda dan hanya menyertakan kernel operasi yang diperlukan untuk menjalankan kumpulan model tertentu. 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 framework statis bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip
untuk operasi kustom dan bawaan TensorFlow Lite; dan secara opsional, menghasilkan framework statis bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip
jika model Anda berisi operasi TensorFlow Pilih. Perhatikan bahwa flag --target_archs
dapat digunakan untuk menentukan arsitektur deployment Anda.
Gunakan dalam aplikasi Anda sendiri
Developer CocoaPods
Ada tiga CocoaPods untuk TensorFlow Lite:
TensorFlowLiteSwift
: Menyediakan Swift API untuk TensorFlow Lite.TensorFlowLiteObjC
: Menyediakan Objective-C API untuk TensorFlow Lite.TensorFlowLiteC
: Pod dasar umum, yang menyematkan runtime inti TensorFlow Lite dan mengekspos API C dasar yang digunakan oleh dua pod di atas. Tidak dimaksudkan untuk langsung digunakan oleh pengguna.
Sebagai developer, Anda harus memilih pod TensorFlowLiteSwift
atau
TensorFlowLiteObjC
berdasarkan bahasa yang digunakan untuk menulis aplikasi, tetapi
tidak keduanya. Langkah-langkah yang tepat untuk menggunakan build lokal TensorFlow Lite berbeda-beda, bergantung pada bagian mana yang ingin Anda build.
Menggunakan Swift atau Objective-C API lokal
Jika Anda menggunakan CocoaPods dan hanya ingin menguji beberapa perubahan lokal pada Swift API atau Objective-C API TensorFlow Lite, ikuti langkah-langkah di sini.
Buat perubahan pada Swift atau Objective-C API 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 menggunakanTensorFlowLiteC
API per malam terbaru yang tersedia (dibuat setiap malam antara pukul 01.00-04.00 Waktu Pasifik) daripada versi stabil, yang mungkin sudah tidak berlaku dibandingkan dengan checkouttensorflow
lokal Anda. Atau, Anda dapat memilih untuk memublikasikan versiTensorFlowLiteC
Anda sendiri dan menggunakan versi tersebut (lihat bagian Menggunakan inti TensorFlow Lite lokal di bawah).Pada
Podfile
project iOS Anda, ubah dependensi sebagai berikut agar mengarah ke jalur lokal ke direktori utamatensorflow
.
Untuk Swift:
pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
Untuk Objective-C:
pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'
Update penginstalan pod dari direktori utama project iOS Anda.
$ pod update
Buka kembali ruang kerja yang dihasilkan (
<project>.xcworkspace
), lalu build ulang aplikasi Anda dalam Xcode.
Menggunakan TensorFlow Lite core lokal
Anda dapat menyiapkan repositori spesifikasi CocoaPods pribadi dan memublikasikan framework TensorFlowLiteC
kustom 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
sendiri, Anda dapat mengikuti
petunjuk cara menggunakan CocoaPods pribadi untuk menggunakannya di
project Anda sendiri. Anda juga dapat mengubah TensorFlowLite(Swift|ObjC).podspec
agar mengarah ke pod TensorFlowLiteC
kustom dan menggunakan Swift atau Objective-Cpod di project aplikasi Anda.
Developer Bazel
Jika menggunakan Bazel sebagai alat build utama, Anda cukup menambahkan
dependensi TensorFlowLite
ke target dalam file BUILD
Anda.
Untuk Swift:
swift_library(
deps = [
"//tensorflow/lite/swift:TensorFlowLite",
],
)
Untuk Objective-C:
objc_library(
deps = [
"//tensorflow/lite/objc:TensorFlowLite",
],
)
Saat Anda membuat project aplikasi, setiap perubahan pada library TensorFlow Lite akan diambil dan diintegrasikan ke dalam aplikasi Anda.
Mengubah setelan project Xcode secara langsung
Sebaiknya gunakan CocoaPods atau Bazel untuk menambahkan dependensi TensorFlow Lite ke project Anda. Jika masih ingin menambahkan framework TensorFlowLiteC
secara manual, Anda harus menambahkan framework TensorFlowLiteC
sebagai
framework yang disematkan ke project aplikasi Anda. Ekstrak
TensorFlowLiteC_framework.zip
yang dihasilkan dari build di atas untuk mendapatkan
direktori TensorFlowLiteC.framework
. Direktori ini adalah framework sebenarnya
yang dapat dipahami Xcode.
Setelah menyiapkan TensorFlowLiteC.framework
, pertama-tama Anda harus menambahkannya
sebagai biner tersemat ke target aplikasi Anda. Bagian setelan project yang tepat untuk hal ini mungkin berbeda, tergantung versi Xcode Anda.
- Xcode 11: Buka tab 'General' di editor project untuk target aplikasi Anda,
lalu tambahkan
TensorFlowLiteC.framework
di bagian 'Frameworks, Libraries, and Embedded Content'. - Xcode 10 dan yang lebih lama: Buka tab 'General' di editor project untuk target aplikasi Anda, lalu tambahkan
TensorFlowLiteC.framework
di bagian 'Embedded Binaries'. Framework tersebut juga akan otomatis ditambahkan di bagian 'Linked Frameworks and Libraries'.
Jika Anda menambahkan framework sebagai biner tersemat, Xcode juga akan memperbarui entri 'Framework Search Path' di tab 'Build Settings' agar menyertakan direktori induk framework Anda. Jika hal ini tidak terjadi secara otomatis, Anda harus menambahkan direktori induk dari direktori TensorFlowLiteC.framework
secara manual.
Setelah kedua setelan ini selesai, Anda seharusnya dapat mengimpor dan memanggil C API TensorFlow Lite, yang ditentukan oleh file header pada direktori TensorFlowLiteC.framework/Headers
.