Ten dokument opisuje, jak samodzielnie utworzyć bibliotekę iOS TensorFlow Lite na iOS. Standardowo nie trzeba lokalnie tworzyć biblioteki TensorFlow Lite na iOS. Jeśli chcesz po prostu korzystać z tej funkcji, najprostszym sposobem jest użycie gotowej wersji stabilnej lub nocnej wersji TensorFlow Lite CocoaPods. Więcej informacji o korzystaniu z nich w projektach na iOS znajdziesz w krótkim wprowadzeniu na iOS.
Tworzę lokalnie
W niektórych przypadkach możesz użyć lokalnej kompilacji TensorFlow Lite, na przykład gdy chcesz wprowadzić lokalne zmiany w TensorFlow Lite i przetestować je w swojej aplikacji na iOS lub wolisz użyć platformy statycznej zamiast naszej dynamicznej. Aby lokalnie utworzyć uniwersalną platformę iOS dla TensorFlow Lite, trzeba to zrobić w Bazel na komputerze z macOS.
Zainstaluj Xcode
Jeśli nie masz jeszcze zainstalowanego języka Xcode 8 lub nowszego, musisz zainstalować narzędzia, korzystając z xcode-select
:
xcode-select --install
Jeśli jest to nowa instalacja, konieczne będzie zaakceptowanie umowy licencyjnej dla wszystkich użytkowników za pomocą tego polecenia:
sudo xcodebuild -license accept
Zainstaluj aplikację Bazel
Bazel to podstawowy system kompilacji dla TensorFlow. Zainstaluj Bazel zgodnie z instrukcjami na stronie Bazel. Pamiętaj, aby wybrać wersję od _TF_MIN_BAZEL_VERSION
do _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 płatności TensorFlow i odpowiedz „Tak”, gdy skrypt zapyta, czy chcesz skompilować TensorFlow z obsługą iOS.
Tworzenie dynamicznej platformy TensorFlowLiteC (zalecane)
Po prawidłowym skonfigurowaniu aplikacji Bazel pod kątem obsługi iOS możesz utworzyć platformę TensorFlowLiteC
za pomocą tego 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 wygenerowana platforma zawiera „tłuszczowy” plik binarny zawierający Armv7, arm64 i x86_64 (ale nie i386). Pełną listę flag kompilacji używanych, gdy określasz --config=ios_fat
, znajdziesz w sekcji konfiguracji iOS w pliku .bazelrc
.
Tworzenie statycznej platformy TensorFlowLiteC
Domyślnie rozpowszechniamy dynamiczną platformę tylko za pomocą Cocoapods. Jeśli chcesz użyć platformy statycznej, możesz utworzyć statyczną platformę TensorFlowLiteC
za pomocą tego 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. Tej statycznej platformy można używać dokładnie w taki sam sposób jak platformy dynamicznej.
Selektywne tworzenie platform TFLite
Mniejsze platformy kierowane tylko na zestaw modeli możesz tworzyć za pomocą selektywnej kompilacji, która pomija nieużywane operacje w zbiorze modeli i uwzględnia tylko jądra operacji wymagane do uruchomienia danego zestawu modeli. Oto polecenie:
bash tensorflow/lite/ios/build_frameworks.sh \
--input_models=model1.tflite,model2.tflite \
--target_archs=x86_64,armv7,arm64
Powyższe polecenie wygeneruje statyczną platformę bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip
na potrzeby wbudowanych i niestandardowych operacji TensorFlow Lite. Opcjonalnie wygeneruje platformę statyczną bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip
, jeśli Twoje modele zawierają operacje Select TensorFlow. Pamiętaj, że flaga --target_archs
może służyć do określania architektur wdrożeń.
Wykorzystaj we własnej aplikacji
Programiści CocoaPods
Dla TensorFlow Lite dostępne są 3 komponenty CocoaPods:
TensorFlowLiteSwift
: udostępnia interfejsy API Swift dla TensorFlow Lite.TensorFlowLiteObjC
: udostępnia interfejsy API Objective-C dla TensorFlow Lite.TensorFlowLiteC
: wspólny pod podstawowy, który zawiera podstawowe środowisko wykonawcze TensorFlow Lite i udostępnia podstawowe interfejsy API C używane przez 2 powyższe pody. Nie są przeznaczone bezpośrednie dla użytkowników.
Jako deweloper wybierz TensorFlowLiteSwift
lub TensorFlowLiteObjC
blok w zależności od języka aplikacji, ale nie oba te rodzaje naraz. Dokładne kroki, które musisz wykonać, aby użyć lokalnych kompilacji TensorFlow Lite, zależą od tego, którą część chcesz utworzyć.
Używanie lokalnych interfejsów API Swift lub Objective-C
Jeśli używasz CocoaPods i chcesz przetestować tylko pewne lokalne zmiany w interfejsach API Swift lub interfejsach API Objective-C TensorFlow Lite, wykonaj te czynności.
Wprowadź zmiany w interfejsach API Swift lub Objective-C podczas procesu płatności
tensorflow
.Otwórz plik
TensorFlowLite(Swift|ObjC).podspec
i zaktualizuj ten wiersz:
s.dependency 'TensorFlowLiteC', "#{s.version}"
na:
s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
Dzięki temu masz pewność, że tworzysz interfejsy API Swift lub Objective-C przy użyciu najnowszej dostępnej nocnej wersji interfejsów APITensorFlowLiteC
(uruchamianych co noc między 1:00 a 4:00 czasu pacyficznego), a nie wersji stabilnej, która może być nieaktualna w porównaniu z lokalną wersją płatnościtensorflow
. Możesz też opublikować własną wersję systemuTensorFlowLiteC
i użyć jej (patrz sekcja Korzystanie z lokalnego rdzenia TensorFlow Lite poniżej).W
Podfile
projektu na iOS zmień zależność w ten sposób, aby wskazywała ścieżkę lokalną do katalogu głównegotensorflow
.
W przypadku Swift:
pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
W przypadku elementu Objective-C:
pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'
Zaktualizuj instalację podów z katalogu głównego projektu na iOS.
$ pod update
Otwórz ponownie wygenerowany obszar roboczy (
<project>.xcworkspace
) i odtwórz aplikację w Xcode.
Użycie lokalnego rdzenia TensorFlow Lite
Możesz skonfigurować prywatne repozytorium specyfikacji CocoaPods i opublikować własną platformę TensorFlowLiteC
w swoim prywatnym repozytorium. Możesz skopiować ten plik podspec i zmienić 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 wykonać instrukcje korzystania z prywatnych CocoaPods, aby użyć go we własnym projekcie. Możesz też zmodyfikować TensorFlowLite(Swift|ObjC).podspec
, aby wskazywał Twój niestandardowy pod TensorFlowLiteC
, a następnie użyć poda Swift lub Objective-C w projekcie aplikacji.
Deweloperzy baz danych
Jeśli używasz Bazel jako głównego narzędzia do kompilacji, możesz po prostu dodać zależność TensorFlowLite
do celu w pliku BUILD
.
W przypadku Swift:
swift_library(
deps = [
"//tensorflow/lite/swift:TensorFlowLite",
],
)
W przypadku Objective-C:
objc_library(
deps = [
"//tensorflow/lite/objc:TensorFlowLite",
],
)
Gdy tworzysz projekt aplikacji, wszelkie zmiany w bibliotece TensorFlow Lite są wychwytywane i wbudowane w aplikację.
Bezpośrednio modyfikuj ustawienia projektu Xcode
Zdecydowanie zalecamy użycie CocoaPods lub Bazel w celu dodania zależności TensorFlow Lite do projektu. Jeśli nadal chcesz ręcznie dodać platformę TensorFlowLiteC
, musisz dodać platformę TensorFlowLiteC
jako osadzoną platformę do projektu aplikacji. Rozpakuj plik TensorFlowLiteC_framework.zip
wygenerowany w ramach powyższej kompilacji, aby uzyskać katalog TensorFlowLiteC.framework
. Jest to rzeczywista platforma zrozumiała dla Xcode.
Po przygotowaniu pliku TensorFlowLiteC.framework
musisz najpierw dodać go jako osadzony plik binarny do miejsca docelowego aplikacji. Dokładne ustawienia projektu mogą się różnić w zależności od wersji Xcode.
- Xcode 11: w edytorze projektu otwórz kartę „General” (Ogólne) dla miejsca docelowego aplikacji i dodaj
TensorFlowLiteC.framework
w sekcji „Frameworks, Libraries andnę Content”. - Xcode 10 i starsze: w edytorze projektu otwórz kartę „General” (Ogólne) miejsca docelowego aplikacji i dodaj
TensorFlowLiteC.framework
w sekcji „Osadzone pliki binarne”. Platformę tę należy też dodać automatycznie w sekcji „Połączone platformy i biblioteki”.
Gdy dodasz platformę jako osadzony plik binarny, Xcode zaktualizuje też wpis „Framework Search Paths” na karcie „Build Settings” (Ustawienia kompilacji), aby uwzględnić katalog nadrzędny Twojej platformy. Jeśli nie dzieje się to automatycznie, musisz ręcznie dodać katalog nadrzędny katalogu TensorFlowLiteC.framework
.
Gdy skonfigurujesz te 2 ustawienia, możesz zaimportować i wywołać interfejs C API TensorFlow Lite, zdefiniowany przez pliki nagłówka w katalogu TensorFlowLiteC.framework/Headers
.