Ten dokument opisuje, jak samodzielnie zbudować bibliotekę TensorFlow Lite iOS. Zwykle nie musisz lokalnie budować biblioteki TensorFlow Lite iOS. Jeśli chcesz po prostu z niego korzystać, najłatwiejszym sposobem jest skorzystanie z gotowych, stabilnych lub nocnych wersji TensorFlow Lite CocoaPods. Zobacz Szybki start dla iOS , aby uzyskać więcej informacji na temat ich używania w projektach iOS.
Budowanie lokalnie
W niektórych przypadkach możesz chcieć użyć lokalnej kompilacji TensorFlow Lite, na przykład, gdy chcesz wprowadzić lokalne zmiany w TensorFlow Lite i przetestować te zmiany w swojej aplikacji na iOS lub wolisz korzystać ze statycznej struktury zamiast dostarczonej przez nas dynamicznej. Aby utworzyć uniwersalną platformę iOS dla TensorFlow Lite lokalnie, musisz ją zbudować przy użyciu Bazel na komputerze z systemem macOS.
Zainstaluj Xcode
Jeśli jeszcze tego nie zrobiłeś, będziesz musiał zainstalować Xcode 8 lub nowszy oraz narzędzia za pomocą xcode-select
:
xcode-select --install
Jeśli jest to nowa instalacja, musisz zaakceptować umowę licencyjną dla wszystkich użytkowników za pomocą następującego polecenia:
sudo xcodebuild -license accept
Zainstaluj Bazel
Bazel to podstawowy system kompilacji dla TensorFlow. Zainstaluj Bazel zgodnie z instrukcjami na stronie Bazel . Upewnij się, że wybrałeś wersję pomiędzy _TF_MIN_BAZEL_VERSION
i _TF_MAX_BAZEL_VERSION
w pliku configure.py
w katalogu głównym repozytorium tensorflow
.
Skonfiguruj WORKSPACE i .bazelrc
Uruchom skrypt ./configure
w głównym katalogu kasowym TensorFlow i odpowiedz "Tak", gdy skrypt zapyta, czy chcesz zbudować TensorFlow z obsługą iOS.
Zbuduj dynamiczną platformę TensorFlowLiteC (zalecane)
Po prawidłowym skonfigurowaniu Bazela z obsługą iOS, możesz zbudować framework TensorFlowLiteC
za pomocą następującego polecenia.
bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
//tensorflow/lite/ios:TensorFlowLiteC_framework
To polecenie wygeneruje plik TensorFlowLiteC_framework.zip
w katalogu bazel-bin/tensorflow/lite/ios/
w katalogu głównym TensorFlow. Domyślnie wygenerowany framework zawiera "gruby" plik binarny, zawierający armv7, arm64 i x86_64 (ale nie i386). Aby zobaczyć pełną listę flag kompilacji używanych po określeniu --config=ios_fat
, zapoznaj się z sekcją iOS configs w pliku .bazelrc
.
Zbuduj statyczny framework TensorFlowLiteC
Domyślnie dystrybuujemy ramy dynamiczne tylko za pośrednictwem Cocoapods. Jeśli zamiast tego chcesz użyć statycznego frameworka, możesz zbudować statyczny framework TensorFlowLiteC
za pomocą następującego polecenia:
bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
//tensorflow/lite/ios:TensorFlowLiteC_static_framework
Polecenie wygeneruje plik o nazwie TensorFlowLiteC_static_framework.zip
w bazel-bin/tensorflow/lite/ios/
w katalogu głównym TensorFlow. Ta statyczna struktura może być używana dokładnie w taki sam sposób, jak dynamiczna.
Selektywnie buduj frameworki TFLite
Możesz budować mniejsze struktury ukierunkowane tylko na zestaw modeli za pomocą kompilacji selektywnej, która pomija nieużywane operacje w zestawie modeli i zawiera tylko jądra op wymagane do uruchomienia danego zestawu modeli. Polecenie wygląda następująco:
bash tensorflow/lite/ios/build_frameworks.sh \
--input_models=model1.tflite,model2.tflite \
--target_archs=x86_64,armv7,arm64
Powyższe polecenie wygeneruje statyczny framework bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip
dla wbudowanych i niestandardowych operacji TensorFlow Lite; i opcjonalnie generuje statyczny framework bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip
, jeśli modele zawierają operacje Select TensorFlow. Zwróć uwagę, że flaga --target_archs
może służyć do określenia architektury wdrożenia.
Użyj we własnej aplikacji
Deweloperzy CocoaPods
Istnieją trzy CocoaPods dla TensorFlow Lite:
-
TensorFlowLiteSwift
: udostępnia interfejsy API Swift dla TensorFlow Lite. -
TensorFlowLiteObjC
: udostępnia interfejsy API Objective-C dla TensorFlow Lite. -
TensorFlowLiteC
: wspólny podstawowy zasobnik, który osadza podstawowe środowisko uruchomieniowe TensorFlow Lite i udostępnia podstawowe interfejsy API języka C używane przez powyższe dwa zasobniki. Nie jest przeznaczony do bezpośredniego użytku przez użytkowników.
Jako programista powinieneś wybrać TensorFlowLiteSwift
lub TensorFlowLiteObjC
w zależności od języka, w którym napisana jest Twoja aplikacja, ale nie obu. Dokładne kroki korzystania z lokalnych kompilacji TensorFlow Lite różnią się w zależności od tego, którą konkretną część chcesz zbudować.
Korzystanie z lokalnych interfejsów API Swift lub Objective-C
Jeśli używasz CocoaPods i chcesz przetestować tylko niektóre lokalne zmiany w interfejsach API Swift lub Objective-C w TensorFlow Lite, wykonaj poniższe czynności.
Wprowadź zmiany w interfejsach API Swift lub Objective-C w procesie realizacji transakcji
tensorflow
.Otwórz
TensorFlowLite(Swift|ObjC).podspec
i zaktualizuj ten wiersz:
s.dependency 'TensorFlowLiteC', "#{s.version}"
być:
s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
Ma to na celu upewnienie się, że kompilujesz interfejsy API Swift lub Objective-C w oparciu o najnowszą dostępną nocną wersję interfejsów APITensorFlowLiteC
(budowaną co noc między 1-4 rano czasu pacyficznego), a nie wersję stabilną, która może być przestarzała w porównaniu z lokalnymtensorflow
Sprawdź. Alternatywnie możesz opublikować własną wersjęTensorFlowLiteC
i użyć tej wersji (patrz sekcja Korzystanie z lokalnego rdzenia TensorFlow Lite poniżej).W
Podfile
projektu iOS zmień zależność w następujący sposób, aby wskazać ścieżkę lokalną do katalogu głównegotensorflow
.
Dla jerzyków:
pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
Dla celu C:
pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'
Zaktualizuj instalację pod z katalogu głównego projektu iOS.
$ pod update
Ponownie otwórz wygenerowany obszar roboczy (
<project>.xcworkspace
) i odbuduj swoją aplikację w Xcode.
Korzystanie z lokalnego rdzenia TensorFlow Lite
Możesz skonfigurować prywatne repozytorium specyfikacji CocoaPods i opublikować swoją niestandardową TensorFlowLiteC
w swoim prywatnym repozytorium. Możesz skopiować ten plik podspec i zmodyfikować kilka wartości:
...
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'
...
Po utworzeniu własnego pliku TensorFlowLiteC.podspec
możesz postępować zgodnie z instrukcjami korzystania z prywatnych CocoaPods , aby użyć go we własnym projekcie. Możesz również zmodyfikować TensorFlowLite(Swift|ObjC).podspec
, aby wskazywał niestandardowy TensorFlowLiteC
i używać modułu Swift lub Objective-C w projekcie aplikacji.
Deweloperzy Bazela
Jeśli używasz Bazela jako głównego narzędzia do budowania, możesz po prostu dodać zależność TensorFlowLite
do celu w pliku BUILD
.
Dla jerzyków:
swift_library(
deps = [
"//tensorflow/lite/swift:TensorFlowLite",
],
)
Dla celu C:
objc_library(
deps = [
"//tensorflow/lite/objc:TensorFlowLite",
],
)
Podczas kompilowania projektu aplikacji wszelkie zmiany w bibliotece TensorFlow Lite zostaną pobrane i wbudowane w aplikację.
Bezpośrednia modyfikacja ustawień projektu Xcode
Zdecydowanie zaleca się użycie CocoaPods lub Bazel w celu dodania zależności TensorFlow Lite do swojego projektu. Jeśli nadal chcesz ręcznie dodać framework TensorFlowLiteC
, musisz dodać framework TensorFlowLiteC
jako platformę osadzoną do projektu aplikacji. Rozpakuj TensorFlowLiteC_framework.zip
wygenerowany z powyższej kompilacji, aby uzyskać katalog TensorFlowLiteC.framework
. Ten katalog jest rzeczywistą strukturą, którą Xcode może zrozumieć.
Po przygotowaniu TensorFlowLiteC.framework
, najpierw musisz dodać go jako osadzony plik binarny do celu aplikacji. Dokładna sekcja ustawień projektu w tym przypadku może się różnić w zależności od wersji Xcode.
- Xcode 11: Przejdź do zakładki „Ogólne” edytora projektu dla celu aplikacji i dodaj
TensorFlowLiteC.framework
w sekcji „Frameworks, Libraries i Embedded Content”. - Xcode 10 i poniżej: Przejdź do zakładki „Ogólne” edytora projektu dla docelowej aplikacji i dodaj
TensorFlowLiteC.framework
w sekcji „Osadzone pliki binarne”. Framework powinien być również dodany automatycznie w sekcji 'Linked Frameworks and Libraries'.
Gdy dodasz platformę jako osadzony plik binarny, Xcode zaktualizuje również wpis „Ścieżki wyszukiwania struktury” w zakładce „Ustawienia kompilacji”, aby uwzględnić katalog nadrzędny struktury. Jeśli nie dzieje się to automatycznie, należy ręcznie dodać katalog nadrzędny katalogu TensorFlowLiteC.framework
.
Po wykonaniu tych dwóch ustawień powinieneś być w stanie zaimportować i wywołać API C TensorFlow Lite, zdefiniowane przez pliki nagłówkowe w katalogu TensorFlowLiteC.framework/Headers
.