यह दस्तावेज़ बताता है कि अपने दम पर 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 डायनामिक फ्रेमवर्क बनाएँ (अनुशंसित)
एक बार आईओएस समर्थन के साथ बेज़ल को ठीक से कॉन्फ़िगर किया गया है, तो आप निम्न आदेश के साथ 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 में कुछ स्थानीय परिवर्तनों का परीक्षण करना चाहते हैं, तो यहां दिए गए चरणों का पालन करें।
अपने
tensorflow
चेकआउट में स्विफ्ट या ऑब्जेक्टिव-सी एपीआई में बदलाव करें।TensorFlowLite(Swift|ObjC).podspec
फ़ाइल खोलें और इस लाइन को अपडेट करें:
s.dependency 'TensorFlowLiteC', "#{s.version}"
होना:
s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
यह सुनिश्चित करने के लिए है कि आप अपने स्विफ्ट या ऑब्जेक्टिव-सी एपीआई का निर्माणTensorFlowLiteC
APIs के नवीनतम उपलब्ध रात्रिकालीन संस्करण (हर रात 1-4AM प्रशांत समय के बीच निर्मित) के बजाय स्थिर संस्करण के लिए कर रहे हैं, जो आपके स्थानीयtensorflow
की तुलना में पुराना हो सकता है। चेक आउट। वैकल्पिक रूप से, आपTensorFlowLiteC
के अपने स्वयं के संस्करण को प्रकाशित करना चुन सकते हैं और उस संस्करण का उपयोग कर सकते हैं (नीचे स्थानीय TensorFlow लाइट कोर अनुभाग का उपयोग करना देखें)।अपने iOS प्रोजेक्ट के
Podfile
में, अपनेtensorflow
रूट डायरेक्टरी के स्थानीय पथ को इंगित करने के लिए निर्भरता को निम्नानुसार बदलें।
स्विफ्ट के लिए:
pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
उद्देश्य-सी के लिए:
pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'
अपने iOS प्रोजेक्ट रूट डायरेक्टरी से अपने पॉड इंस्टॉलेशन को अपडेट करें।
$ pod update
जनरेट किए गए कार्यक्षेत्र (
<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 को आयात और कॉल करने में सक्षम होना चाहिए।