W tym dokumencie opisano, jak samodzielnie zbudować bibliotekę TensorFlow Lite iOS. Zwykle nie trzeba lokalnie budować biblioteki TensorFlow Lite iOS. Jeśli chcesz po prostu z niego skorzystać, najłatwiejszym sposobem jest skorzystanie z gotowych stabilnych lub nocnych wydań TensorFlow Lite CocoaPods. Zobacz przewodnik Szybki start dla systemu iOS , aby uzyskać więcej informacji na temat używania ich w projektach systemu iOS.
Budowanie lokalnie
W niektórych przypadkach możesz chcieć użyć lokalnej wersji TensorFlow Lite, na przykład gdy chcesz wprowadzić lokalne zmiany w TensorFlow Lite i przetestować te zmiany w swojej aplikacji na iOS lub wolisz używać platformy statycznej zamiast dostarczonej przez nas struktury dynamicznej. Aby lokalnie stworzyć uniwersalny framework iOS dla TensorFlow Lite, musisz go zbudować przy użyciu Bazela na maszynie z systemem macOS.
Zainstaluj Xcode
Jeśli jeszcze tego nie zrobiłeś, będziesz musiał zainstalować Xcode 8 lub nowszy i narzędzia używające 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 Bazela
Bazel to podstawowy system kompilacji dla TensorFlow. Zainstaluj Bazel zgodnie z instrukcjami na stronie internetowej 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ć środowisko 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ą konfiguracji iOS w pliku .bazelrc
.
Zbuduj statyczną platformę TensorFlowLiteC
Domyślnie dystrybuujemy dynamiczny framework wyłącznie za pośrednictwem Cocoapods. Jeśli zamiast tego chcesz użyć struktury statycznej, możesz zbudować strukturę statyczną 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 katalogu bazel-bin/tensorflow/lite/ios/
w katalogu głównym TensorFlow. Tego statycznego frameworka można używać dokładnie w taki sam sposób, jak dynamicznego.
Selektywnie buduj frameworki TFLite
Możesz budować mniejsze struktury ukierunkowane tylko na zestaw modeli, korzystając z kompilacji selektywnej, która pominie nieużywane operacje w zestawie modeli i będzie zawierać tylko jądra operacji wymagane do uruchomienia danego zestawu modeli. Polecenie jest następujące:
bash tensorflow/lite/ios/build_frameworks.sh \
--input_models=model1.tflite,model2.tflite \
--target_archs=x86_64,armv7,arm64
Powyższe polecenie wygeneruje statyczną strukturę bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip
dla wbudowanych i niestandardowych operacji TensorFlow Lite; i opcjonalnie generuje statyczną strukturę bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip
jeśli Twoje modele zawierają operacje Select TensorFlow. Należy pamiętać, że flagi --target_archs
można użyć do określenia architektur wdrażania.
Użyj we własnej aplikacji
Twórcy CocoaPods
Istnieją trzy CocoaPods dla TensorFlow Lite:
-
TensorFlowLiteSwift
: zapewnia interfejsy API Swift dla TensorFlow Lite. -
TensorFlowLiteObjC
: zapewnia interfejsy API języka C dla TensorFlow Lite. -
TensorFlowLiteC
: wspólny moduł podstawowy, który osadza rdzeń wykonawczy 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życia przez użytkowników.
Jako programista powinieneś wybrać moduł TensorFlowLiteSwift
lub TensorFlowLiteObjC
w zależności od języka, w którym napisana jest Twoja aplikacja, ale nie oba. Dokładne kroki korzystania z lokalnych kompilacji TensorFlow Lite różnią się w zależności od dokładnej części, którą 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 API Objective-C TensorFlow Lite, wykonaj poniższe kroki.
Wprowadź zmiany w interfejsach API Swift lub Objective-C w kasie
tensorflow
.Otwórz plik
TensorFlowLite(Swift|ObjC).podspec
i zaktualizuj tę linię:
s.dependency 'TensorFlowLiteC', "#{s.version}"
być:
s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
Ma to na celu zapewnienie, że budujesz interfejsy API Swift lub Objective-C w oparciu o najnowszą dostępną nocną wersję interfejsów APITensorFlowLiteC
(budowaną każdej nocy między 1-4 rano czasu pacyficznego), a nie wersję stabilną, która może być nieaktualna w porównaniu z lokalnymtensorflow
wymeldować się. Alternatywnie możesz opublikować własną wersjęTensorFlowLiteC
i używać tej wersji (patrz sekcja Korzystanie z lokalnego rdzenia TensorFlow Lite poniżej).W
Podfile
swojego projektu na iOS zmień zależność w następujący sposób, aby wskazywała lokalną ścieżkę do katalogu głównegotensorflow
.
Dla Swifta:
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
Otwórz ponownie wygenerowany obszar roboczy (
<project>.xcworkspace
) i odbuduj aplikację w Xcode.
Korzystanie z lokalnego rdzenia TensorFlow Lite
Możesz skonfigurować prywatne repozytorium specyfikacji CocoaPods i opublikować niestandardową platformę 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 dotyczącymi korzystania z prywatnych CocoaPods w celu wykorzystania go we własnym projekcie. Możesz także zmodyfikować TensorFlowLite(Swift|ObjC).podspec
, aby wskazywał na niestandardowy zasobnik TensorFlowLiteC
i używać w projekcie aplikacji modułu Swift lub Objective-C.
Programiści Bazela
Jeśli używasz Bazela jako głównego narzędzia do kompilacji, możesz po prostu dodać zależność TensorFlowLite
do swojego celu w pliku BUILD
.
Dla Swifta:
swift_library(
deps = [
"//tensorflow/lite/swift:TensorFlowLite",
],
)
Dla celu C:
objc_library(
deps = [
"//tensorflow/lite/objc:TensorFlowLite",
],
)
Kiedy tworzysz projekt aplikacji, wszelkie zmiany w bibliotece TensorFlow Lite zostaną pobrane i wbudowane w Twoją aplikację.
Zmodyfikuj bezpośrednio ustawienia 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ć platformę TensorFlowLiteC
, musisz dodać platformę TensorFlowLiteC
jako osadzone środowisko do projektu aplikacji. Rozpakuj plik TensorFlowLiteC_framework.zip
wygenerowany z powyższej kompilacji, aby uzyskać katalog TensorFlowLiteC.framework
. Ten katalog jest rzeczywistym frameworkiem, który Xcode może zrozumieć.
Po przygotowaniu TensorFlowLiteC.framework
najpierw musisz dodać go jako osadzony plik binarny do docelowej aplikacji. Dokładna sekcja ustawień projektu może się różnić w zależności od wersji Xcode.
- Xcode 11: Przejdź do karty „Ogólne” w edytorze projektu docelowej aplikacji i dodaj plik
TensorFlowLiteC.framework
w sekcji „Frameworks, Libraries and Embedded Content”. - Xcode 10 i starsze wersje: Przejdź do karty „Ogólne” w edytorze projektu dla docelowej aplikacji i dodaj plik
TensorFlowLiteC.framework
w obszarze „Osadzone pliki binarne”. Struktura powinna być również dodana automatycznie w sekcji „Połączone struktury i biblioteki”.
Kiedy dodasz framework jako osadzony plik binarny, Xcode zaktualizuje również wpis „Ścieżki wyszukiwania frameworków” w zakładce „Ustawienia kompilacji”, aby uwzględnić katalog nadrzędny twojego frameworka. Jeżeli nie stanie się to automatycznie, należy ręcznie dodać katalog nadrzędny katalogu TensorFlowLiteC.framework
.
Po wykonaniu tych dwóch ustawień powinno być możliwe zaimportowanie i wywołanie interfejsu API języka C TensorFlow Lite, zdefiniowanego przez pliki nagłówkowe w katalogu TensorFlowLiteC.framework/Headers
.