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).podspec
i 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ęTensorFlowLiteC
i użyj tej wersji (patrz Korzystanie z lokalnego LiteRT) podstawowej poniżej).W
Podfile
projektu 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 update
Otwó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.framework
Umieszczona 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.framework
Pliki 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
.