यह दस्तावेज़ बताता है कि आप स्वयं TensorFlow Lite iOS लाइब्रेरी कैसे बना सकते हैं। आम तौर पर, आपको स्थानीय रूप से TensorFlow Lite iOS लाइब्रेरी बनाने की आवश्यकता नहीं होती है। यदि आप बस इसका उपयोग करना चाहते हैं, तो सबसे आसान तरीका TensorFlow Lite CocoaPods के पूर्वनिर्मित स्थिर या रात्रिकालीन रिलीज़ का उपयोग करना है। अपने iOS प्रोजेक्ट्स में इनका उपयोग कैसे करें, इसके बारे में अधिक जानकारी के लिए iOS क्विकस्टार्ट देखें।
स्थानीय स्तर पर निर्माण
कुछ मामलों में, आप TensorFlow Lite के स्थानीय बिल्ड का उपयोग करना चाह सकते हैं, उदाहरण के लिए जब आप TensorFlow Lite में स्थानीय परिवर्तन करना चाहते हैं और अपने iOS ऐप में उन परिवर्तनों का परीक्षण करना चाहते हैं या आप हमारे द्वारा प्रदान किए गए डायनामिक फ्रेमवर्क के बजाय स्थिर ढांचे का उपयोग करना पसंद करते हैं। स्थानीय स्तर पर TensorFlow Lite के लिए एक सार्वभौमिक iOS फ्रेमवर्क बनाने के लिए, आपको इसे macOS मशीन पर बेज़ेल का उपयोग करके बनाना होगा।
एक्सकोड स्थापित करें
यदि आपने पहले से नहीं किया है, तो आपको Xcode 8 या उसके बाद के संस्करण और xcode-select
का उपयोग करके टूल इंस्टॉल करने की आवश्यकता होगी:
xcode-select --install
यदि यह एक नया इंस्टॉल है, तो आपको निम्नलिखित आदेश के साथ सभी उपयोगकर्ताओं के लिए लाइसेंस समझौते को स्वीकार करना होगा:
sudo xcodebuild -license accept
बेज़ेल स्थापित करें
बेज़ल TensorFlow के लिए प्राथमिक निर्माण प्रणाली है। बेज़ेल वेबसाइट पर दिए गए निर्देशों के अनुसार बेज़ेल स्थापित करें। tensorflow
रिपॉजिटरी के मूल में configure.py
फ़ाइल में _TF_MIN_BAZEL_VERSION
और _TF_MAX_BAZEL_VERSION
के बीच एक संस्करण चुनना सुनिश्चित करें।
वर्कस्पेस और .bazenrc कॉन्फ़िगर करें
रूट TensorFlow चेकआउट निर्देशिका में ./configure
स्क्रिप्ट चलाएँ, और जब स्क्रिप्ट पूछे कि क्या आप iOS समर्थन के साथ TensorFlow बनाना चाहते हैं तो "हाँ" उत्तर दें।
TensorFlowLiteC डायनामिक फ्रेमवर्क बनाएं (अनुशंसित)
एक बार जब बेज़ल iOS समर्थन के साथ ठीक से कॉन्फ़िगर हो जाता है, तो आप निम्न कमांड के साथ 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
फ़ाइल जेनरेट करेगा। डिफ़ॉल्ट रूप से, जेनरेट किए गए फ्रेमवर्क में एक "फैट" बाइनरी होती है, जिसमें आर्मवी7, आर्म64 और x86_64 (लेकिन कोई i386 नहीं) होता है। जब आप --config=ios_fat
निर्दिष्ट करते हैं तो उपयोग किए गए बिल्ड फ़्लैग की पूरी सूची देखने के लिए, कृपया .bazelrc
फ़ाइल में iOS कॉन्फ़िगरेशन अनुभाग देखें।
TensorFlowLiteC स्थिर ढाँचा बनाएँ
डिफ़ॉल्ट रूप से, हम केवल कोकोपोड्स के माध्यम से गतिशील ढांचे को वितरित करते हैं। यदि आप इसके बजाय स्थिर ढांचे का उपयोग करना चाहते हैं, तो आप निम्न आदेश के साथ 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
उत्पन्न करेगा; और वैकल्पिक रूप से, यदि आपके मॉडल में सेलेक्ट टेन्सरफ्लो ऑप्स शामिल हैं, तो स्टैटिक फ्रेमवर्क bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip
उत्पन्न करता है। ध्यान दें कि --target_archs
ध्वज का उपयोग आपके परिनियोजन आर्किटेक्चर को निर्दिष्ट करने के लिए किया जा सकता है।
अपने स्वयं के अनुप्रयोग में उपयोग करें
कोकोपोड्स डेवलपर्स
TensorFlow Lite के लिए तीन CocoaPods हैं:
-
TensorFlowLiteSwift
: TensorFlow Lite के लिए स्विफ्ट एपीआई प्रदान करता है। -
TensorFlowLiteObjC
: TensorFlow Lite के लिए ऑब्जेक्टिव-सी एपीआई प्रदान करता है। -
TensorFlowLiteC
: सामान्य बेस पॉड, जो TensorFlow Lite कोर रनटाइम को एम्बेड करता है और उपरोक्त दो पॉड्स द्वारा उपयोग किए गए बेस C API को उजागर करता है। उपयोगकर्ताओं द्वारा सीधे उपयोग के लिए नहीं है।
एक डेवलपर के रूप में, आपको उस भाषा के आधार पर TensorFlowLiteSwift
या TensorFlowLiteObjC
पॉड चुनना चाहिए जिसमें आपका ऐप लिखा गया है, लेकिन दोनों को नहीं। TensorFlow Lite के स्थानीय बिल्ड का उपयोग करने के सटीक चरण अलग-अलग होते हैं, यह इस बात पर निर्भर करता है कि आप कौन सा सटीक भाग बनाना चाहते हैं।
स्थानीय स्विफ्ट या ऑब्जेक्टिव-सी एपीआई का उपयोग करना
यदि आप CocoaPods का उपयोग कर रहे हैं, और केवल TensorFlow Lite के स्विफ्ट एपीआई या ऑब्जेक्टिव-सी एपीआई में कुछ स्थानीय परिवर्तनों का परीक्षण करना चाहते हैं, तो यहां दिए गए चरणों का पालन करें।
अपने
tensorflow
चेकआउट में स्विफ्ट या ऑब्जेक्टिव-सी एपीआई में बदलाव करें।TensorFlowLite(Swift|ObjC).podspec
फ़ाइल खोलें, और इस लाइन को अपडेट करें:
s.dependency 'TensorFlowLiteC', "#{s.version}"
होना:
s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
यह सुनिश्चित करने के लिए है कि आप अपने स्विफ्ट या ऑब्जेक्टिव-सी एपीआई को स्थिर संस्करण के बजायTensorFlowLiteC
API के नवीनतम उपलब्ध रात्रिकालीन संस्करण (हर रात 1-4AM प्रशांत समय के बीच निर्मित) के आधार पर बना रहे हैं, जो आपके स्थानीयtensorflow
की तुलना में पुराना हो सकता है। चेक आउट। वैकल्पिक रूप से, आपTensorFlowLiteC
का अपना स्वयं का संस्करण प्रकाशित करना और उस संस्करण का उपयोग करना चुन सकते हैं (नीचे स्थानीय TensorFlow Lite कोर अनुभाग का उपयोग करना देखें)।अपने iOS प्रोजेक्ट के
Podfile
में, अपनेtensorflow
रूट निर्देशिका के स्थानीय पथ को इंगित करने के लिए निर्भरता को निम्नानुसार बदलें।
स्विफ्ट के लिए:
pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
उद्देश्य-सी के लिए:
pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'
अपने iOS प्रोजेक्ट रूट डायरेक्टरी से अपने पॉड इंस्टॉलेशन को अपडेट करें।
$ pod update
जेनरेट किए गए वर्कस्पेस (
<project>.xcworkspace
) को दोबारा खोलें और Xcode के भीतर अपने ऐप को दोबारा बनाएं।
स्थानीय TensorFlow Lite कोर का उपयोग करना
आप एक निजी 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
भी संशोधित कर सकते हैं और अपने ऐप प्रोजेक्ट में स्विफ्ट या ऑब्जेक्टिव-सी पॉड का उपयोग कर सकते हैं।
बेज़ेल डेवलपर्स
यदि आप बेज़ेल को मुख्य बिल्ड टूल के रूप में उपयोग कर रहे हैं, तो आप बस अपनी BUILD
फ़ाइल में अपने लक्ष्य पर TensorFlowLite
निर्भरता जोड़ सकते हैं।
स्विफ्ट के लिए:
swift_library(
deps = [
"//tensorflow/lite/swift:TensorFlowLite",
],
)
उद्देश्य-सी के लिए:
objc_library(
deps = [
"//tensorflow/lite/objc:TensorFlowLite",
],
)
जब आप अपना ऐप प्रोजेक्ट बनाते हैं, तो TensorFlow Lite लाइब्रेरी में कोई भी बदलाव उठाया जाएगा और आपके ऐप में बनाया जाएगा।
Xcode प्रोजेक्ट सेटिंग्स को सीधे संशोधित करें
अपने प्रोजेक्ट में TensorFlow Lite निर्भरता जोड़ने के लिए कोकोपोड्स या बेज़ेल का उपयोग करने की अत्यधिक अनुशंसा की जाती है। यदि आप अभी भी 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 को आयात और कॉल करने में सक्षम होना चाहिए।