Bu belgede, TensorFlow Lite iOS kitaplığını kendi başınıza nasıl oluşturacağınız açıklanmaktadır. Normalde, yerel olarak TensorFlow Lite iOS kitaplığı oluşturmanız gerekmez. Yalnızca kullanmak istiyorsanız en kolay yol TensorFlow Lite CocoaPods'un önceden oluşturulmuş kararlı veya gecelik sürümlerini kullanmaktır. iOS projelerinizde bunları nasıl kullanacağınıza ilişkin daha fazla ayrıntı için iOS hızlı başlangıç kılavuzunu inceleyin.
Yerel olarak geliştirme
Bazı durumlarda, TensorFlow Lite'ın yerel bir derlemesini kullanmak isteyebilirsiniz. Örneğin, TensorFlow Lite'ta yerel değişiklikler yapıp bu değişiklikleri iOS uygulamanızda test etmek istediğinizde veya sağladığımız dinamik çerçeveye statik çerçeve kullanmayı tercih edebilirsiniz. Yerel olarak TensorFlow Lite için evrensel bir iOS çerçevesi oluşturmak istiyorsanız bunu macOS makinesinde Bazel kullanarak oluşturmanız gerekir.
Xcode'u yükleyin
Henüz yapmadıysanız Xcode 8 veya sonraki bir sürümü ve xcode-select
ile araçları yüklemeniz gerekir:
xcode-select --install
Bu yeni bir yüklemeyse aşağıdaki komutu kullanarak tüm kullanıcılar için lisans sözleşmesini kabul etmeniz gerekir:
sudo xcodebuild -license accept
Bazel'ı yükleme
Bazel, TensorFlow için birincil derleme sistemidir. Bazel web sitesindeki talimatlara göre Bazel'i yükleyin. tensorflow
deposunun kök kısmındaki configure.py
dosyasında _TF_MIN_BAZEL_VERSION
ile _TF_MAX_BAZEL_VERSION
arasında bir sürüm seçtiğinizden emin olun.
WORKSPACE ve .bazelrc dosyalarını yapılandırma
Kök TensorFlow ödeme dizininde ./configure
komut dosyasını çalıştırın ve komut dosyası, iOS desteğiyle TensorFlow oluşturmak isteyip istemediğinizi sorduğunda "Evet" yanıtını verin.
TensorFlowLiteC dinamik çerçevesi derleme (önerilir)
Bazel, iOS desteği ile düzgün bir şekilde yapılandırıldıktan sonra aşağıdaki komutla TensorFlowLiteC
çerçevesini oluşturabilirsiniz.
bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
//tensorflow/lite/ios:TensorFlowLiteC_framework
Bu komut, TensorFlow kök dizininizin altındaki bazel-bin/tensorflow/lite/ios/
dizini altında TensorFlowLiteC_framework.zip
dosyasını oluşturur.
Oluşturulan çerçeve, varsayılan olarak armv7, arm64 ve x86_64 (i386 içermeyen) içeren bir "fat" ikili programı içerir. --config=ios_fat
değerini belirttiğinizde kullanılan derleme işaretlerinin tam listesini görmek için lütfen .bazelrc
dosyasındaki iOS yapılandırmaları bölümüne bakın.
TensorFlowLiteC statik çerçevesi oluşturma
Varsayılan olarak dinamik çerçeveyi yalnızca Cocoapods aracılığıyla dağıtırız. Bunun yerine statik çerçeveyi kullanmak isterseniz aşağıdaki komutla TensorFlowLiteC
statik çerçevesini oluşturabilirsiniz:
bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
//tensorflow/lite/ios:TensorFlowLiteC_static_framework
Bu komut, TensorFlow kök dizininizin altındaki bazel-bin/tensorflow/lite/ios/
dizini altında, TensorFlowLiteC_static_framework.zip
adlı bir dosya oluşturur. Bu statik çerçeve, dinamik çerçeveyle tam olarak aynı şekilde kullanılabilir.
TFLite çerçevelerini seçerek oluşturun
Seçmeli derleme kullanarak yalnızca bir grup modeli hedefleyen daha küçük çerçeveler oluşturabilirsiniz. Böylece, model kümenizdeki kullanılmayan işlemler atlanır ve yalnızca belirtilen model kümesini çalıştırmak için gereken işlem çekirdekleri dahil edilir. Komut şu şekildedir:
bash tensorflow/lite/ios/build_frameworks.sh \
--input_models=model1.tflite,model2.tflite \
--target_archs=x86_64,armv7,arm64
Yukarıdaki komut, TensorFlow Lite yerleşik ve özel işlemleri için bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip
statik çerçevesini ve modelleriniz Select TensorFlow işlemleri içeriyorsa isteğe bağlı olarak bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip
statik çerçevesini oluşturur. Dağıtım mimarilerinizi belirtmek için --target_archs
işaretinin kullanılabileceğini unutmayın.
Kendi uygulamanızda kullanın
CocoaPods geliştiricileri
TensorFlow Lite için üç CocoaPod vardır:
TensorFlowLiteSwift
: TensorFlow Lite için Swift API'lerini sağlar.TensorFlowLiteObjC
: TensorFlow Lite için Objective-C API'lerini sağlar.TensorFlowLiteC
: TensorFlow Lite temel çalışma zamanını yerleştiren ve yukarıdaki iki kapsül tarafından kullanılan temel C API'lerini açığa çıkaran ortak temel kapsül. Doğrudan kullanıcılar tarafından kullanılmak üzere tasarlanmamıştır.
Geliştirici olarak, uygulamanızın yazıldığı dile bağlı olarak TensorFlowLiteSwift
veya TensorFlowLiteObjC
kapsülünü seçmeniz gerekir. TensorFlow Lite'ın yerel derlemelerini kullanmak için uygulanacak adımlar, tam olarak hangi parçayı oluşturmak istediğinize bağlı olarak farklılık gösterir.
Yerel Swift veya Objective-C API'lerini kullanma
CocoaPods kullanıyorsanız ve yalnızca TensorFlow Lite'ın Swift API'leri veya Objective-C API'leri için yapılan bazı yerel değişiklikleri test etmek istiyorsanız buradaki adımları uygulayın.
tensorflow
ödeme işleminizde Swift veya Objective-C API'lerinizde değişiklik yapın.TensorFlowLite(Swift|ObjC).podspec
dosyasını açın ve bu satırı şu şekilde güncelleyin:
s.dependency 'TensorFlowLiteC', "#{s.version}"
şu şekilde:
s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
Bunun amacı, Swift veya Objective-C API'leriniziTensorFlowLiteC
API'lerinin mevcut en son gecelik sürümüne (Pasifik Saati ile 01:00 arasında her gece 1-4:00 arasında her gece oluşturulur) derlemektir. Bu sürüm, yereltensorflow
ödeme işleminize kıyasla güncelliğini yitirmiş olabilir. Alternatif olarak, kendiTensorFlowLiteC
sürümünüzü yayınlayıp bu sürümü kullanmayı da seçebilirsiniz (aşağıdaki Yerel TensorFlow Lite çekirdeğini kullanma bölümüne bakın).iOS projenizin
Podfile
öğesinde,tensorflow
kök dizininizin yerel yolunu gösterecek şekilde bağımlılığı aşağıdaki gibi değiştirin.
Swift için:
pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
Objective-C için:
pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'
Kapsül yüklemenizi, iOS projenizin kök dizininden güncelleyin.
$ pod update
Oluşturulan çalışma alanını (
<project>.xcworkspace
) tekrar açın ve uygulamanızı Xcode içinde yeniden oluşturun.
Yerel TensorFlow Lite Core'u kullanma
Özel bir CocoaPods spesifikasyon deposu oluşturabilir ve özel TensorFlowLiteC
çerçevenizi özel deponuzda yayınlayabilirsiniz. Bu podspec dosyasını kopyalayıp birkaç değeri değiştirebilirsiniz:
...
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'
...
Kendi TensorFlowLiteC.podspec
dosyanızı oluşturduktan sonra, bu dosyayı kendi projenizde kullanmak için özel CocoaPods kullanma talimatlarını uygulayabilirsiniz. Ayrıca TensorFlowLite(Swift|ObjC).podspec
öğesini, özel TensorFlowLiteC
kapsülünüze işaret edecek şekilde değiştirebilir ve uygulama projenizde Swift veya Objective-C kapsülünü kullanabilirsiniz.
Bazel geliştiricileri
Ana derleme aracı olarak Bazel kullanıyorsanız BUILD
dosyanızdaki hedefinize TensorFlowLite
bağımlılığı eklemeniz yeterlidir.
Swift için:
swift_library(
deps = [
"//tensorflow/lite/swift:TensorFlowLite",
],
)
Objective-C için:
objc_library(
deps = [
"//tensorflow/lite/objc:TensorFlowLite",
],
)
Uygulama projenizi derlediğinizde, TensorFlow Lite kitaplığında yapılan tüm değişiklikler alınır ve uygulamanıza derlenir.
Xcode proje ayarlarını doğrudan değiştirin
Projenize TensorFlow Lite bağımlılığı eklemek için CocoaPods veya Bazel kullanmanız önemle tavsiye edilir. Yine de TensorFlowLiteC
çerçevesini manuel olarak eklemek istiyorsanız TensorFlowLiteC
çerçevesini uygulama projenize yerleştirilmiş bir çerçeve olarak eklemeniz gerekir. TensorFlowLiteC.framework
dizinini elde etmek için yukarıdaki derlemeden oluşturulan TensorFlowLiteC_framework.zip
dosyasını açın. Bu dizin, Xcode'un anlayabileceği
gerçek çerçevedir.
TensorFlowLiteC.framework
dosyasını hazırladıktan sonra ilk olarak bunu uygulama hedefinize yerleştirilmiş bir ikili program olarak eklemeniz gerekir. Bunun için tam proje ayarları bölümü, Xcode sürümünüze bağlı olarak farklılık gösterebilir.
- Xcode 11: Uygulama hedefinize ait proje düzenleyicinin "Genel" sekmesine gidin ve "Çerçeveler, Kitaplıklar ve Yerleştirilmiş İçerik" bölümünün altına
TensorFlowLiteC.framework
öğesini ekleyin. - Xcode 10 ve altı: Uygulama hedefiniz için proje düzenleyicinin "Genel" sekmesine gidin ve
TensorFlowLiteC.framework
kodunu "Yerleşik İkili Programlar"ın altına ekleyin. Çerçeve ayrıca "Bağlı Çerçeveler ve Kitaplıklar" bölümüne otomatik olarak eklenmelidir.
Çerçeveyi yerleşik ikili program olarak eklediğinizde Xcode, çerçevenizin ana dizinini eklemek için "Derleme Ayarları" sekmesinin altındaki "Çerçeve Arama Yolları" girişini de günceller. Bu işlem otomatik olarak gerçekleşmezse TensorFlowLiteC.framework
dizininin üst dizinini manuel olarak eklemeniz gerekir.
Bu iki ayar tamamlandıktan sonra, TensorFlowLiteC.framework/Headers
dizini altındaki başlık dosyaları tarafından tanımlanan TensorFlow Lite'ın C API'sini içe aktarıp çağırabilirsiniz.