Ten dokument opisuje, jak samodzielnie utworzyć bibliotekę LiteRT na iOS. Zwykle nie trzeba lokalnie tworzyć biblioteki LiteRT na iOS. Jeśli dla Ciebie. Najprostszym sposobem jest korzystanie ze stabilnej wersji wersji CocoaPods LiteRT. Zobacz iOS , gdzie znajdziesz więcej informacji o korzystaniu z nich w iOS. w projektach AI.
Kompiluję lokalnie
W niektórych przypadkach warto użyć lokalnej kompilacji LiteRT, gdy chcesz wprowadzić lokalne zmiany w LiteRT i je przetestować. zmian w aplikacji na iOS lub wolisz użyć platformy statycznej dynamiczny. Aby lokalnie utworzyć uniwersalną platformę iOS dla LiteRT, musisz utworzyć ją w Bazel na komputerze z macOS.
Zainstaluj Xcode
Jeśli jeszcze tego nie zrobiłeś, musisz zainstalować Xcode 8 lub nowszą wersję oraz narzędzia
przy użyciu: xcode-select:
xcode-select --install
Jeśli jest to nowa instalacja, musisz zaakceptować umowę licencyjną dla wszystkich użytkownikom za pomocą tego polecenia:
sudo xcodebuild -license accept
Zainstaluj Bazel
Podstawowym systemem kompilacji dla TensorFlow jest Bazel. Zainstaluj Bazel zgodnie z
znajdziesz na stronie internetowej Bazel. Wybierz
wersja od _TF_MIN_BAZEL_VERSION do _TF_MAX_BAZEL_VERSION w
Plik configure.py w katalogu głównym repozytorium tensorflow.
Skonfiguruj WORKSPACE i .bazelrc
uruchomić skrypt ./configure w głównym katalogu płatności TensorFlow,
odpowiedz „Tak” gdy skrypt pyta, czy chcesz utworzyć TensorFlow w iOS.
.
Utwórz dynamiczną platformę TensorFlowLiteC (zalecane)
Po prawidłowym skonfigurowaniu Bazel pod kątem obsługi iOS możesz utworzyć
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 pod
bazel-bin/tensorflow/lite/ios/ w katalogu głównym TensorFlow.
Wygenerowana platforma domyślnie zawiera komponent tłuszczowy binarny zawierający armv7,
arm64 i x86_64 (ale nie i386). Aby zobaczyć pełną listę flag kompilacji używanych, gdy
wpisz --config=ios_fat, zapoznaj się z sekcją konfiguracji iOS w
.bazelrc plik.
Tworzenie platformy statycznej TensorFlowLiteC
Domyślnie rozpowszechniamy platformę dynamiczną tylko za pomocą Cocoapods. Jeśli chcesz
z użyciem platformy statycznej, możesz utworzyć 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
katalogu. Tej struktury statycznej można używać dokładnie tak samo jak
dynamiczny.
Wybiórczo twórz platformy TFLite
Możesz tworzyć mniejsze struktury kierowane tylko na zbiór modeli za pomocą kompilację, która pomija nieużywane operacje w zbiorze modeli i uwzględnia tylko jąder operacyjnych wymaganych do uruchomienia określonego 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
Polecenie powyżej wygeneruje platformę statyczną
bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip dla TensorFlow
operacje wbudowane i niestandardowe Lite; i opcjonalnie generuje platformę statyczną,
bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip, jeśli
Twoje modele zawierają operacje wyboru TensorFlow. Zwróć uwagę, że flaga --target_archs
może służyć do określania architektur wdrożenia.
Użyj we własnej aplikacji
Deweloperzy CocoaPods
Dostępne są 3 produkty CocoaPod dla LiteRT:
TensorFlowLiteSwift: udostępnia interfejsy Swift API dla LiteRT.TensorFlowLiteObjC: udostępnia interfejsy Objective-C API dla LiteRT.TensorFlowLiteC: typowy pod podstawowy, który zawiera rdzeń LiteRT w środowisku wykonawczym i udostępnia podstawowe interfejsy API C używane przez 2 powyższe pody. Nie było nie mogą być bezpośrednio wykorzystywane przez użytkowników.
Jako deweloper wybierz TensorFlowLiteSwift lub
TensorFlowLiteObjC blok na podstawie języka, w którym napisana jest aplikacja, ale
ale nie oba. Konkretne kroki w przypadku korzystania z lokalnych kompilacji w wersji LiteRT są różne
w zależności od tego, który fragment chcesz utworzyć.
Korzystanie z lokalnych interfejsów API Swift lub Objective-C
Jeśli używasz CocoaPods i chcesz tylko przetestować lokalne zmiany w interfejsie interfejsy API Swift lub Objective-C API LiteRT, wykonaj opisane tutaj czynności.
Wprowadź zmiany w interfejsach API Swift lub Objective-C w momencie płatności za pomocą
tensorflow.Otwórz plik
TensorFlowLite(Swift|ObjC).podspeci zaktualizuj ten wiersz:
s.dependency 'TensorFlowLiteC', "#{s.version}"ma być:
(s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly") Dzięki temu będziesz mieć pewność, że tworzysz interfejsy API Swift lub Objective-C w porównaniu z najnowszą dostępną nocną wersją interfejsów APITensorFlowLiteC(budowane każdej nocy między 1:00 a 4:00 czasu pacyficznego) zamiast stajni która może być nieaktualna w porównaniu z lokalnym procesem płatnościtensorflow. Możesz również opublikować własną wersjęTensorFlowLiteCi użyj tej wersji (patrz Korzystanie z lokalnego LiteRT) podstawowej poniżej).W
Podfileprojektu iOS zmień zależność w ten sposób na wskazują ścieżkę lokalną do katalogu głównegotensorflow.
Swift:
pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
W programie Objective-C:
pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'Zaktualizuj instalację poda z katalogu głównego projektu na iOS.
$ pod updateOtwórz ponownie wygenerowany obszar roboczy (
<project>.xcworkspace) i odbuduj w Xcode.
Korzystanie z lokalnego rdzenia LiteRT
Możesz skonfigurować prywatne repozytorium specyfikacji CocoaPods i opublikować własne
TensorFlowLiteC do swojego prywatnego repozytorium. Możesz skopiować ten podspec,
pliku i zmień 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
instrukcje dotyczące używania prywatnych CocoaPods,
we własnym projekcie. Możesz też zmodyfikować TensorFlowLite(Swift|ObjC).podspec, aby
wskaż niestandardowy blok TensorFlowLiteC i użyj Swift lub Objective-C
pod w projekcie aplikacji.
Programiści w Bazelu
Jeśli używasz Bazel jako głównego narzędzia do tworzenia, możesz po prostu dodać
TensorFlowLite zależność od wartości docelowej w pliku BUILD.
Swift:
swift_library(
deps = [
"//tensorflow/lite/swift:TensorFlowLite",
],
)
Objective-C:
objc_library(
deps = [
"//tensorflow/lite/objc:TensorFlowLite",
],
)
Gdy tworzysz projekt aplikacji, wszelkie zmiany w bibliotece LiteRT można ją pobrać i wbudować w aplikację.
Bezpośrednie modyfikowanie ustawień projektu Xcode
Do dodawania LiteRT zdecydowanie zalecamy użycie CocoaPods lub Bazel
w zależności od projektu. Jeśli nadal chcesz dodać usługę TensorFlowLiteC
musisz dodać platformę TensorFlowLiteC jako
platformy wbudowanej do projektu aplikacji. Rozpakuj
TensorFlowLiteC_framework.zip wygenerowano na podstawie powyższej kompilacji, aby uzyskać
TensorFlowLiteC.framework. Ten katalog to faktyczna platforma
który będzie zrozumiały dla Xcode.
Gdy przygotujesz plik TensorFlowLiteC.framework, musisz go najpierw dodać
jako plik binarny osadzony w środowisku docelowym aplikacji. Dokładna sekcja ustawień projektu dla
może się różnić w zależności od wersji Xcode.
- Xcode 11. Przejdź do folderu 'General' (Ogólne) na karcie edytora projektu dla miejsca docelowego aplikacji,
i w sekcji „Frameworks, Libraries, and” dodaj
TensorFlowLiteC.frameworkUmieszczona treść . - Xcode 10 i starsze: przejdź do sekcji „General” (Ogólne). na karcie edytora projektów dla
jako cel na aplikację i w sekcji „Wbudowane” dodaj
TensorFlowLiteC.frameworkPliki binarne”. Platforma należy też dodać automatycznie w sekcji „Połączono”. Platformy i biblioteki .
Po dodaniu platformy jako osadzonego pliku binarnego Xcode aktualizuje także
Ścieżki wyszukiwania ramek wpis w obszarze „Ustawienia kompilacji” tabulator, aby uwzględnić element nadrzędny
do katalogu platformy. Jeśli nie nastąpi to automatycznie,
należy ręcznie dodać katalog nadrzędny instancji TensorFlowLiteC.framework
katalogu.
Po wykonaniu tych dwóch ustawień powinno być możliwe zaimportowanie i wywołanie metody
interfejsu C API LiteRT, zdefiniowanego przez pliki nagłówka
Katalog TensorFlowLiteC.framework/Headers.