iOS এর জন্য TensorFlow Lite তৈরি করুন

এই দস্তাবেজটি বর্ণনা করে যে কীভাবে নিজের হাতে TensorFlow Lite iOS লাইব্রেরি তৈরি করবেন। সাধারণত, আপনাকে স্থানীয়ভাবে TensorFlow Lite iOS লাইব্রেরি তৈরি করতে হবে না। আপনি যদি এটি ব্যবহার করতে চান তবে সবচেয়ে সহজ উপায় হল টেনসরফ্লো লাইট কোকোপডের পূর্বনির্মাণ স্থিতিশীল বা রাতের রিলিজগুলি ব্যবহার করা। আপনার iOS প্রকল্পগুলিতে কীভাবে সেগুলি ব্যবহার করবেন সে সম্পর্কে আরও বিশদ বিবরণের জন্য iOS কুইকস্টার্ট দেখুন।

স্থানীয়ভাবে নির্মাণ

কিছু ক্ষেত্রে, আপনি TensorFlow Lite-এর একটি স্থানীয় বিল্ড ব্যবহার করতে চাইতে পারেন, উদাহরণস্বরূপ যখন আপনি TensorFlow Lite-এ স্থানীয় পরিবর্তন করতে চান এবং আপনার iOS অ্যাপে সেই পরিবর্তনগুলি পরীক্ষা করতে চান বা আপনি আমাদের দেওয়া ডায়নামিক একটিতে স্ট্যাটিক ফ্রেমওয়ার্ক ব্যবহার করতে পছন্দ করেন। স্থানীয়ভাবে TensorFlow Lite-এর জন্য একটি সর্বজনীন iOS ফ্রেমওয়ার্ক তৈরি করতে, আপনাকে একটি macOS মেশিনে Bazel ব্যবহার করে এটি তৈরি করতে হবে।

Xcode ইনস্টল করুন

যদি আপনি ইতিমধ্যেই না করে থাকেন, তাহলে আপনাকে Xcode 8 বা তার পরে ইনস্টল করতে হবে এবং xcode-select ব্যবহার করে টুলগুলি ইনস্টল করতে হবে:

xcode-select --install

এটি একটি নতুন ইনস্টল হলে, আপনাকে নিম্নলিখিত কমান্ড সহ সমস্ত ব্যবহারকারীদের জন্য লাইসেন্স চুক্তি গ্রহণ করতে হবে:

sudo xcodebuild -license accept

Bazel ইনস্টল করুন

Bazel হল TensorFlow এর প্রাথমিক বিল্ড সিস্টেম। Bazel ওয়েবসাইটের নির্দেশাবলী অনুযায়ী Bazel ইনস্টল করুন। tensorflow সংগ্রহস্থলের মূলে configure.py ফাইলে _TF_MIN_BAZEL_VERSION এবং _TF_MAX_BAZEL_VERSION এর মধ্যে একটি সংস্করণ বেছে নেওয়ার বিষয়টি নিশ্চিত করুন৷

WORKSPACE এবং .bazelrc কনফিগার করুন

রুট টেনসরফ্লো চেকআউট ডিরেক্টরিতে ./configure স্ক্রিপ্টটি চালান এবং স্ক্রিপ্টটি জিজ্ঞাসা করলে "হ্যাঁ" উত্তর দিন আপনি যদি iOS সমর্থন সহ টেনসরফ্লো তৈরি করতে চান।

একবার Bazel সঠিকভাবে 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 ফাইল তৈরি করবে। ডিফল্টরূপে, তৈরি করা ফ্রেমওয়ার্কটিতে একটি "ফ্যাট" বাইনারি থাকে, যাতে 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

উপরের কমান্ডটি টেনসরফ্লো লাইট বিল্ট-ইন এবং কাস্টম অপ্সের জন্য স্ট্যাটিক ফ্রেমওয়ার্ক bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip তৈরি করবে; এবং ঐচ্ছিকভাবে, স্ট্যাটিক ফ্রেমওয়ার্ক bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip জেনারেট করে যদি আপনার মডেলে সিলেক্ট টেনসরফ্লো অপস থাকে। মনে রাখবেন --target_archs পতাকা আপনার স্থাপনার আর্কিটেকচার নির্দিষ্ট করতে ব্যবহার করা যেতে পারে।

আপনার নিজের অ্যাপ্লিকেশন ব্যবহার করুন

কোকোপডস ডেভেলপার

টেনসরফ্লো লাইটের জন্য তিনটি কোকোপড রয়েছে:

  • TensorFlowLiteSwift : TensorFlow Lite-এর জন্য সুইফট API প্রদান করে।
  • TensorFlowLiteObjC : TensorFlow Lite এর জন্য Objective-C API প্রদান করে।
  • TensorFlowLiteC : সাধারণ বেস পড, যা TensorFlow Lite কোর রানটাইমকে এম্বেড করে এবং উপরের দুটি পড দ্বারা ব্যবহৃত বেস C API-কে প্রকাশ করে। ব্যবহারকারীদের দ্বারা সরাসরি ব্যবহার করার উদ্দেশ্যে নয়।

একজন ডেভেলপার হিসেবে, আপনার অ্যাপটি যে ভাষায় লেখা হয়েছে তার উপর ভিত্তি করে TensorFlowLiteSwift বা TensorFlowLiteObjC পড বেছে নেওয়া উচিত, কিন্তু উভয়ই নয়। TensorFlow Lite-এর স্থানীয় বিল্ডগুলি ব্যবহার করার জন্য সঠিক পদক্ষেপগুলি আলাদা, আপনি কোন সঠিক অংশটি তৈরি করতে চান তার উপর নির্ভর করে।

স্থানীয় সুইফট বা অবজেক্টিভ-সি API ব্যবহার করা

আপনি যদি 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 API (প্রতি রাতে 1-4AM প্যাসিফিক টাইম এর মধ্যে নির্মিত) এর সর্বশেষ উপলব্ধ রাত্রিকালীন সংস্করণের বিপরীতে আপনার Swift বা Objective-C API তৈরি করছেন, যা আপনার স্থানীয় tensorflow তুলনায় পুরানো হতে পারে। চেকআউট বিকল্পভাবে, আপনি TensorFlowLiteC এর নিজস্ব সংস্করণ প্রকাশ করতে এবং সেই সংস্করণটি ব্যবহার করতে বেছে নিতে পারেন (নীচে স্থানীয় টেনসরফ্লো লাইট ব্যবহার করা বিভাগ দেখুন)।

  3. আপনার iOS প্রকল্পের Podfile , আপনার tensorflow রুট ডিরেক্টরিতে স্থানীয় পাথ নির্দেশ করতে নিম্নরূপ নির্ভরতা পরিবর্তন করুন।
    সুইফটের জন্য:
    pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
    উদ্দেশ্য-C এর জন্য:
    pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'

  4. আপনার iOS প্রকল্প রুট ডিরেক্টরি থেকে আপনার পড ইনস্টলেশন আপডেট করুন।
    $ pod update

  5. জেনারেট করা ওয়ার্কস্পেস ( <project>.xcworkspace ) পুনরায় খুলুন এবং Xcode-এর মধ্যে আপনার অ্যাপটি পুনর্নির্মাণ করুন।

স্থানীয় টেনসরফ্লো লাইট কোর ব্যবহার করা হচ্ছে

আপনি একটি ব্যক্তিগত 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 ব্যবহার করার নির্দেশাবলী অনুসরণ করতে পারেন আপনার নিজের প্রকল্পে এটি ব্যবহার করতে। এছাড়াও আপনি TensorFlowLite(Swift|ObjC).podspec পরিবর্তন করতে পারেন আপনার কাস্টম TensorFlowLiteC পডের দিকে নির্দেশ করতে এবং আপনার অ্যাপ প্রকল্পে Swift বা Objective-C পড ব্যবহার করতে পারেন৷

বেজেল ডেভেলপার

আপনি যদি প্রধান বিল্ড টুল হিসাবে Bazel ব্যবহার করেন, তাহলে আপনি আপনার BUILD ফাইলে আপনার লক্ষ্যে TensorFlowLite নির্ভরতা যোগ করতে পারেন।

সুইফটের জন্য:

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

উদ্দেশ্য-C এর জন্য:

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

আপনি যখন আপনার অ্যাপ প্রজেক্ট তৈরি করবেন, তখন TensorFlow Lite লাইব্রেরিতে যেকোনও পরিবর্তন আপনার অ্যাপে তোলা হবে।

Xcode প্রকল্প সেটিংস সরাসরি পরিবর্তন করুন

আপনার প্রকল্পে TensorFlow Lite নির্ভরতা যোগ করার জন্য CocoaPods বা Bazel ব্যবহার করার জন্য এটি অত্যন্ত সুপারিশ করা হয়। আপনি যদি এখনও ম্যানুয়ালি TensorFlowLiteC ফ্রেমওয়ার্ক যোগ করতে চান, তাহলে আপনাকে আপনার অ্যাপ্লিকেশন প্রকল্পে একটি এমবেডেড ফ্রেমওয়ার্ক হিসেবে TensorFlowLiteC ফ্রেমওয়ার্ক যোগ করতে হবে। TensorFlowLiteC.framework ডিরেক্টরি পেতে উপরের বিল্ড থেকে জেনারেট করা TensorFlowLiteC_framework.zip আনজিপ করুন। এই ডিরেক্টরিটি আসল কাঠামো যা এক্সকোড বুঝতে পারে।

একবার আপনি TensorFlowLiteC.framework প্রস্তুত করার পরে, প্রথমে আপনাকে এটিকে আপনার অ্যাপ টার্গেটে একটি এমবেডেড বাইনারি হিসাবে যুক্ত করতে হবে৷ এর জন্য সঠিক প্রকল্প সেটিংস বিভাগটি আপনার Xcode সংস্করণের উপর নির্ভর করে ভিন্ন হতে পারে।

  • Xcode 11: আপনার অ্যাপ টার্গেটের জন্য প্রজেক্ট এডিটরের 'সাধারণ' ট্যাবে যান এবং 'ফ্রেমওয়ার্ক, লাইব্রেরি এবং এমবেডেড কন্টেন্ট' বিভাগের অধীনে TensorFlowLiteC.framework যোগ করুন।
  • Xcode 10 এবং নীচে: আপনার অ্যাপ টার্গেটের জন্য প্রকল্প সম্পাদকের 'সাধারণ' ট্যাবে যান এবং 'এমবেডেড বাইনারি'-এর অধীনে TensorFlowLiteC.framework যোগ করুন। ফ্রেমওয়ার্কটি 'লিঙ্কড ফ্রেমওয়ার্কস অ্যান্ড লাইব্রেরি' বিভাগের অধীনে স্বয়ংক্রিয়ভাবে যুক্ত করা উচিত।

আপনি যখন ফ্রেমওয়ার্কটিকে একটি এমবেডেড বাইনারি হিসাবে যুক্ত করেন, তখন Xcode আপনার ফ্রেমওয়ার্কের মূল ডিরেক্টরি অন্তর্ভুক্ত করতে 'বিল্ড সেটিংস' ট্যাবের অধীনে 'ফ্রেমওয়ার্ক অনুসন্ধান পথ' এন্ট্রি আপডেট করবে। এটি স্বয়ংক্রিয়ভাবে না ঘটলে, আপনাকে ম্যানুয়ালি TensorFlowLiteC.framework ডিরেক্টরির মূল ডিরেক্টরি যোগ করতে হবে।

এই দুটি সেটিংস হয়ে গেলে, আপনি TensorFlowLiteC.framework/Headers ডিরেক্টরির অধীনে হেডার ফাইল দ্বারা সংজ্ঞায়িত TensorFlow Lite-এর C API আমদানি এবং কল করতে সক্ষম হবেন।