Utwórz LiteRT na iOS

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. .

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.

  1. Wprowadź zmiany w interfejsach API Swift lub Objective-C w momencie płatności za pomocą tensorflow.

  2. 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 API TensorFlowLiteC (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ści tensorflow. Możesz również opublikować własną wersję TensorFlowLiteC i użyj tej wersji (patrz Korzystanie z lokalnego LiteRT) podstawowej poniżej).

  3. W Podfile projektu iOS zmień zależność w ten sposób na wskazują ścieżkę lokalną do katalogu głównego tensorflow.
    Swift:
    pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
    W programie Objective-C:
    pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'

  4. Zaktualizuj instalację poda z katalogu głównego projektu na iOS.
    $ pod update

  5. 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.