7 दिसंबर को महिला एमएल संगोष्ठी में भाग लें अभी पंजीकरण करें

आईओएस के लिए टेंसरफ्लो लाइट बनाएं

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

यह दस्तावेज़ बताता है कि अपने दम पर TensorFlow Lite iOS लाइब्रेरी कैसे बनाई जाए। आम तौर पर, आपको स्थानीय रूप से TensorFlow Lite iOS लाइब्रेरी बनाने की आवश्यकता नहीं होती है। यदि आप इसका उपयोग करना चाहते हैं, तो सबसे आसान तरीका TensorFlow Lite CocoaPods के पूर्व-निर्मित स्थिर या रात्रिकालीन रिलीज़ का उपयोग करना है। अपने iOS प्रोजेक्ट में उनका उपयोग करने के तरीके के बारे में अधिक जानकारी के लिए iOS क्विकस्टार्ट देखें।

स्थानीय रूप से निर्माण

कुछ मामलों में, आप TensorFlow Lite के स्थानीय निर्माण का उपयोग करना चाह सकते हैं, उदाहरण के लिए जब आप TensorFlow Lite में स्थानीय परिवर्तन करना चाहते हैं और अपने iOS ऐप में उन परिवर्तनों का परीक्षण करना चाहते हैं या आप हमारे प्रदान किए गए डायनामिक के लिए स्थिर ढांचे का उपयोग करना पसंद करते हैं। TensorFlow Lite के लिए स्थानीय रूप से एक सार्वभौमिक iOS फ्रेमवर्क बनाने के लिए, आपको इसे macOS मशीन पर Bazel का उपयोग करके बनाने की आवश्यकता है।

एक्सकोड स्थापित करें

यदि आपके पास पहले से नहीं है, तो आपको Xcode 8 या बाद के संस्करण और xcode-select का उपयोग करने वाले टूल इंस्टॉल करने होंगे:

xcode-select --install

यदि यह एक नई स्थापना है, तो आपको निम्न आदेश वाले सभी उपयोगकर्ताओं के लिए लाइसेंस अनुबंध को स्वीकार करना होगा:

sudo xcodebuild -license accept

बेज़ेल स्थापित करें

बेज़ल TensorFlow के लिए प्राथमिक बिल्ड सिस्टम है। Bazel वेबसाइट पर दिए निर्देशों के अनुसार Bazel स्थापित करें। tensorflow रिपॉजिटरी के मूल में config.py configure.py में _TF_MIN_BAZEL_VERSION और _TF_MAX_BAZEL_VERSION के बीच एक संस्करण चुनना सुनिश्चित करें।

कार्यस्थान कॉन्फ़िगर करें और .bazelrc

रूट TensorFlow चेकआउट निर्देशिका में ./configure स्क्रिप्ट चलाएँ, और जब स्क्रिप्ट पूछती है कि क्या आप iOS समर्थन के साथ TensorFlow बनाना चाहते हैं, तो "हाँ" का उत्तर दें।

एक बार आईओएस समर्थन के साथ बेज़ल को ठीक से कॉन्फ़िगर किया गया है, तो आप निम्न आदेश के साथ TensorFlowLiteC ढांचे का निर्माण कर सकते हैं।

bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
  //tensorflow/lite/ios:TensorFlowLiteC_framework

यह कमांड आपके TensorFlow रूट डायरेक्टरी के तहत bazel-bin/tensorflow/lite/ios/ डायरेक्टरी के तहत TensorFlowLiteC_framework.zip फाइल जनरेट करेगा। डिफ़ॉल्ट रूप से, जेनरेट किए गए ढांचे में "वसा" बाइनरी होता है, जिसमें armv7, arm64, और x86_64 (लेकिन i386 नहीं) होता है। जब आप --config=ios_fat निर्दिष्ट करते हैं तो बिल्ड फ़्लैग्स की पूरी सूची देखने के लिए, कृपया .bazelrc फ़ाइल में iOS कॉन्फिग अनुभाग देखें।

TensorFlowLiteC स्थिर ढांचे का निर्माण करें

डिफ़ॉल्ट रूप से, हम केवल Cocoapods के माध्यम से गतिशील ढांचे को वितरित करते हैं। यदि आप इसके बजाय स्थिर ढांचे का उपयोग करना चाहते हैं, तो आप निम्न आदेश के साथ TensorFlowLiteC स्थिर ढांचे का निर्माण कर सकते हैं:

bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
  //tensorflow/lite/ios:TensorFlowLiteC_static_framework

कमांड आपके TensorFlow रूट डायरेक्टरी के तहत bazel-bin/tensorflow/lite/ios/ TensorFlowLiteC_static_framework.zip की एक फाइल जनरेट करेगा। इस स्थिर ढांचे का उपयोग ठीक उसी तरह किया जा सकता है जैसे गतिशील।

चुनिंदा रूप से TFlite ढांचे का निर्माण करें

आप चुनिंदा बिल्ड का उपयोग करके मॉडल के केवल एक सेट को लक्षित करने वाले छोटे ढांचे का निर्माण कर सकते हैं, जो आपके मॉडल सेट में अप्रयुक्त संचालन को छोड़ देगा और केवल दिए गए मॉडल के सेट को चलाने के लिए आवश्यक ओप कर्नेल शामिल करेगा। आदेश इस प्रकार है:

bash tensorflow/lite/ios/build_frameworks.sh \
  --input_models=model1.tflite,model2.tflite \
  --target_archs=x86_64,armv7,arm64

उपरोक्त कमांड TensorFlow Lite बिल्ट-इन और कस्टम ऑप्स के लिए स्टैटिक फ्रेमवर्क bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip जेनरेट करेगा; और वैकल्पिक रूप से, यदि आपके मॉडल में Select TensorFlow ops शामिल हैं, तो स्थिर ढांचा bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip उत्पन्न करता है। ध्यान दें कि --target_archs ध्वज का उपयोग आपके परिनियोजन आर्किटेक्चर को निर्दिष्ट करने के लिए किया जा सकता है।

अपने स्वयं के आवेदन में प्रयोग करें

CocoaPods डेवलपर

TensorFlow Lite के लिए तीन CocoaPods हैं:

  • TensorFlowLiteSwift : TensorFlow Lite के लिए स्विफ्ट API प्रदान करता है।
  • TensorFlowLiteObjC : TensorFlow Lite के लिए Objective-C API प्रदान करता है।
  • TensorFlowLiteC : कॉमन बेस पॉड, जो TensorFlow Lite कोर रनटाइम को एम्बेड करता है और उपरोक्त दो पॉड्स द्वारा उपयोग किए जाने वाले बेस C API को उजागर करता है। उपयोगकर्ताओं द्वारा सीधे उपयोग किए जाने का मतलब नहीं है।

एक डेवलपर के रूप में, आपको उस भाषा के आधार पर TensorFlowLiteSwift या TensorFlowLiteObjC पॉड चुनना चाहिए जिसमें आपका ऐप लिखा गया है, लेकिन दोनों नहीं। TensorFlow Lite के स्थानीय बिल्ड का उपयोग करने के लिए सटीक चरण भिन्न होते हैं, यह इस बात पर निर्भर करता है कि आप किस सटीक भाग का निर्माण करना चाहते हैं।

स्थानीय स्विफ्ट या ऑब्जेक्टिव-सी एपीआई का उपयोग करना

यदि आप CocoaPods का उपयोग कर रहे हैं, और केवल TensorFlow Lite के Swift API या Objective-C API में कुछ स्थानीय परिवर्तनों का परीक्षण करना चाहते हैं, तो यहां दिए गए चरणों का पालन करें।

  1. अपने tensorflow चेकआउट में स्विफ्ट या ऑब्जेक्टिव-सी एपीआई में बदलाव करें।

  2. TensorFlowLite(Swift|ObjC).podspec फ़ाइल खोलें और इस लाइन को अपडेट करें:
    s.dependency 'TensorFlowLiteC', "#{s.version}"
    होना:
    s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
    यह सुनिश्चित करने के लिए है कि आप अपने स्विफ्ट या ऑब्जेक्टिव-सी एपीआई का निर्माण TensorFlowLiteC APIs के नवीनतम उपलब्ध रात्रिकालीन संस्करण (हर रात 1-4AM प्रशांत समय के बीच निर्मित) के बजाय स्थिर संस्करण के लिए कर रहे हैं, जो आपके स्थानीय tensorflow की तुलना में पुराना हो सकता है। चेक आउट। वैकल्पिक रूप से, आप TensorFlowLiteC के अपने स्वयं के संस्करण को प्रकाशित करना चुन सकते हैं और उस संस्करण का उपयोग कर सकते हैं (नीचे स्थानीय TensorFlow लाइट कोर अनुभाग का उपयोग करना देखें)।

  3. अपने iOS प्रोजेक्ट के Podfile में, अपने tensorflow रूट डायरेक्टरी के स्थानीय पथ को इंगित करने के लिए निर्भरता को निम्नानुसार बदलें।
    स्विफ्ट के लिए:
    pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
    उद्देश्य-सी के लिए:
    pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'

  4. अपने iOS प्रोजेक्ट रूट डायरेक्टरी से अपने पॉड इंस्टॉलेशन को अपडेट करें।
    $ pod update

  5. जनरेट किए गए कार्यक्षेत्र ( <project>.xcworkspace ) को फिर से खोलें और Xcode के भीतर अपने ऐप का पुनर्निर्माण करें।

स्थानीय TensorFlow लाइट कोर का उपयोग करना

आप एक निजी CocoaPods चश्मा भंडार स्थापित कर सकते हैं, और अपने कस्टम TensorFlowLiteC ढांचे को अपने निजी रेपो में प्रकाशित कर सकते हैं। आप इस पॉडस्पेक फ़ाइल की प्रतिलिपि बना सकते हैं और कुछ मानों को संशोधित कर सकते हैं:

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

अपनी खुद की TensorFlowLiteC.podspec फ़ाइल बनाने के बाद, आप निजी CocoaPods को अपने प्रोजेक्ट में उपयोग करने के लिए निर्देशों का पालन कर सकते हैं। आप अपने कस्टम TensorFlowLiteC पॉड को इंगित करने के लिए TensorFlowLite(Swift|ObjC).podspec को भी संशोधित कर सकते हैं और अपने ऐप प्रोजेक्ट में स्विफ्ट या ऑब्जेक्टिव-सी पॉड का उपयोग कर सकते हैं।

बाजेल डेवलपर्स

यदि आप मुख्य बिल्ड टूल के रूप में Bazel का उपयोग कर रहे हैं, तो आप बस अपनी BUILD फ़ाइल में अपने लक्ष्य के लिए TensorFlowLite निर्भरता जोड़ सकते हैं।

स्विफ्ट के लिए:

swift_library(
  deps = [
      "//tensorflow/lite/swift:TensorFlowLite",
  ],
)

उद्देश्य-सी के लिए:

objc_library(
  deps = [
      "//tensorflow/lite/objc:TensorFlowLite",
  ],
)

जब आप अपना ऐप प्रोजेक्ट बनाते हैं, तो TensorFlow लाइट लाइब्रेरी में कोई भी बदलाव उठाया जाएगा और आपके ऐप में बनाया जाएगा।

Xcode प्रोजेक्ट सेटिंग्स को सीधे संशोधित करें

अपने प्रोजेक्ट में TensorFlow Lite निर्भरता जोड़ने के लिए CocoaPods या Bazel का उपयोग करने की अत्यधिक अनुशंसा की जाती है। यदि आप अभी भी TensorFlowLiteC फ्रेमवर्क को मैन्युअल रूप से जोड़ना चाहते हैं, तो आपको अपने एप्लिकेशन प्रोजेक्ट में एक एम्बेडेड फ्रेमवर्क के रूप में TensorFlowLiteC फ्रेमवर्क को जोड़ना होगा। TensorFlowLiteC.framework निर्देशिका प्राप्त करने के लिए उपरोक्त बिल्ड से उत्पन्न TensorFlowLiteC_framework.zip को अनज़िप करें। यह निर्देशिका वास्तविक ढांचा है जिसे Xcode समझ सकता है।

एक बार जब आप TensorFlowLiteC.framework तैयार कर लेते हैं, तो सबसे पहले आपको इसे अपने ऐप लक्ष्य में एक एम्बेडेड बाइनरी के रूप में जोड़ना होगा। इसके लिए सटीक प्रोजेक्ट सेटिंग्स अनुभाग आपके Xcode संस्करण के आधार पर भिन्न हो सकता है।

  • Xcode 11: अपने ऐप लक्ष्य के लिए प्रोजेक्ट एडिटर के 'सामान्य' टैब पर जाएं, और 'फ्रेमवर्क, लाइब्रेरी और एंबेडेड कंटेंट' सेक्शन के तहत TensorFlowLiteC.framework जोड़ें।
  • Xcode 10 और नीचे: अपने ऐप लक्ष्य के लिए प्रोजेक्ट एडिटर के 'सामान्य' टैब पर जाएं, और 'एंबेडेड बायनेरिज़' के तहत TensorFlowLiteC.framework जोड़ें। फ्रेमवर्क को 'लिंक्ड फ्रेमवर्क और लाइब्रेरी' सेक्शन के तहत स्वचालित रूप से जोड़ा जाना चाहिए।

जब आप फ्रेमवर्क को एक एम्बेडेड बाइनरी के रूप में जोड़ते हैं, तो Xcode आपके फ्रेमवर्क की मूल निर्देशिका को शामिल करने के लिए 'बिल्ड सेटिंग्स' टैब के तहत 'फ्रेमवर्क सर्च पाथ्स' प्रविष्टि को भी अपडेट करेगा। यदि यह स्वचालित रूप से नहीं होता है, तो आपको TensorFlowLiteC.framework निर्देशिका की मूल निर्देशिका को मैन्युअल रूप से जोड़ना चाहिए।

एक बार ये दो सेटिंग्स हो जाने के बाद, आपको TensorFlowLiteC.framework/Headers निर्देशिका के तहत हेडर फ़ाइलों द्वारा परिभाषित TensorFlow Lite के C API को आयात और कॉल करने में सक्षम होना चाहिए।