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

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

নাইটলি স্ন্যাপশট ব্যবহার করুন

রাতের স্ন্যাপশট ব্যবহার করতে, আপনার রুট গ্রেডল বিল্ড কনফিগারেশনে নিম্নলিখিত রেপো যোগ করুন।

allprojects {
    repositories {      // should be already there
        mavenCentral()  // should be already there
        maven {         // add this repo to use snapshots
          name 'ossrh-snapshot'
          url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
    }
}

আপনার build.gradle-এ নির্ভরতা (বা প্রয়োজন অনুযায়ী সম্পাদনা) রাতের স্ন্যাপশট যোগ করুন

...
dependencies {
    ...
    implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
    implementation 'org.tensorflow:tensorflow-lite-gpu:0.0.0-nightly-SNAPSHOT'
    implementation 'org.tensorflow:tensorflow-lite-support:0.0.0-nightly-SNAPSHOT'
    ...
}
...

স্থানীয়ভাবে টেনসরফ্লো লাইট তৈরি করুন

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

ডকার ব্যবহার করে বিল্ড এনভায়রনমেন্ট সেট আপ করুন

  • ডকার ফাইলটি ডাউনলোড করুন। ডকার ফাইলটি ডাউনলোড করে, আপনি সম্মত হন যে নিম্নলিখিত পরিষেবার শর্তাবলী আপনার ব্যবহারকে নিয়ন্ত্রণ করে:

স্বীকার করতে ক্লিক করার মাধ্যমে, আপনি এতদ্বারা সম্মত হন যে Android স্টুডিও এবং অ্যান্ড্রয়েড নেটিভ ডেভেলপমেন্ট কিট-এর সমস্ত ব্যবহার https://developer.android.com/studio/terms- এ উপলব্ধ অ্যান্ড্রয়েড সফ্টওয়্যার ডেভেলপমেন্ট কিট লাইসেন্স চুক্তি দ্বারা পরিচালিত হবে (যেমন URL হতে পারে সময়ে সময়ে Google দ্বারা আপডেট বা পরিবর্তন করা হবে)।

ফাইলটি ডাউনলোড করতে আপনাকে অবশ্যই পরিষেবার শর্তাবলী স্বীকার করতে হবে।

  • আপনি ঐচ্ছিকভাবে Android SDK বা NDK সংস্করণ পরিবর্তন করতে পারেন। ডাউনলোড করা ডকার ফাইলটিকে একটি খালি ফোল্ডারে রাখুন এবং রান করে আপনার ডকার ইমেজ তৈরি করুন:
docker build . -t tflite-builder -f tflite-android.Dockerfile
  • আপনার বর্তমান ফোল্ডারটিকে কন্টেইনারের ভিতরে /host_dir এ মাউন্ট করে ডকার কন্টেইনারটি ইন্টারেক্টিভভাবে শুরু করুন (মনে রাখবেন যে /tensorflow_src হল কন্টেইনারের ভিতরে TensorFlow সংগ্রহস্থল):
docker run -it -v $PWD:/host_dir tflite-builder bash

আপনি যদি Windows এ PowerShell ব্যবহার করেন, তাহলে "$PWD" কে "pwd" দিয়ে প্রতিস্থাপন করুন।

আপনি যদি হোস্টে একটি TensorFlow সংগ্রহস্থল ব্যবহার করতে চান, তাহলে সেই হোস্ট ডিরেক্টরিটি মাউন্ট করুন (-v hostDir:/host_dir)।

  • একবার আপনি কন্টেইনারের ভিতরে গেলে, আপনি অতিরিক্ত Android টুল এবং লাইব্রেরিগুলি ডাউনলোড করতে নিম্নলিখিতগুলি চালাতে পারেন (মনে রাখবেন যে আপনাকে লাইসেন্স গ্রহণ করতে হতে পারে):
sdkmanager \
  "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
  "platform-tools" \
  "platforms;android-${ANDROID_API_LEVEL}"

বিল্ড সেটিংস কনফিগার করার জন্য এখন আপনাকে কনফিগার ওয়ার্কস্পেস এবং .bazelrc বিভাগে যেতে হবে।

আপনি লাইব্রেরি নির্মাণ শেষ করার পরে, আপনি কন্টেইনারের ভিতরে /host_dir এ কপি করতে পারেন যাতে আপনি হোস্টে সেগুলি অ্যাক্সেস করতে পারেন।

ডকার ছাড়াই বিল্ড এনভায়রনমেন্ট সেট আপ করুন

Bazel এবং Android পূর্বশর্ত ইনস্টল করুন

Bazel হল TensorFlow এর প্রাথমিক বিল্ড সিস্টেম। এটি তৈরি করতে, আপনার অবশ্যই এটি এবং আপনার সিস্টেমে Android NDK এবং SDK ইনস্টল থাকতে হবে৷

  1. Bazel বিল্ড সিস্টেমের সর্বশেষ সংস্করণ ইনস্টল করুন।
  2. নেটিভ (C/C++) TensorFlow Lite কোড তৈরি করতে Android NDK-এর প্রয়োজন। বর্তমান প্রস্তাবিত সংস্করণ 25b, যা এখানে পাওয়া যেতে পারে।
  3. Android SDK এবং বিল্ড টুলগুলি এখানে পাওয়া যেতে পারে, অথবা বিকল্পভাবে Android স্টুডিওর অংশ হিসাবে। Build tools API >= 23 হল TensorFlow Lite তৈরির জন্য প্রস্তাবিত সংস্করণ।

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

এটি একটি এককালীন কনফিগারেশন ধাপ যা টিএফ লাইট লাইব্রেরি তৈরি করতে প্রয়োজন। রুট টেনসরফ্লো চেকআউট ডিরেক্টরিতে ./configure স্ক্রিপ্টটি চালান এবং যখন স্ক্রিপ্টটি Android বিল্ডের জন্য ./WORKSPACE ইন্টারেক্টিভভাবে কনফিগার করতে বলে তখন "হ্যাঁ" উত্তর দিন। স্ক্রিপ্ট নিম্নলিখিত পরিবেশ ভেরিয়েবল ব্যবহার করে সেটিংস কনফিগার করার চেষ্টা করবে:

  • ANDROID_SDK_HOME
  • ANDROID_SDK_API_LEVEL
  • ANDROID_NDK_HOME
  • ANDROID_NDK_API_LEVEL

যদি এই ভেরিয়েবলগুলি সেট করা না থাকে, সেগুলি অবশ্যই স্ক্রিপ্ট প্রম্পটে ইন্টারেক্টিভভাবে প্রদান করতে হবে। সফল কনফিগারেশন রুট ফোল্ডারে .tf_configure.bazelrc ফাইলে নিম্নলিখিত অনুরূপ এন্ট্রি প্রদান করবে:

build --action_env ANDROID_NDK_HOME="/usr/local/android/android-ndk-r25b"
build --action_env ANDROID_NDK_API_LEVEL="26"
build --action_env ANDROID_BUILD_TOOLS_VERSION="30.0.3"
build --action_env ANDROID_SDK_API_LEVEL="30"
build --action_env ANDROID_SDK_HOME="/usr/local/android/android-sdk-linux"

নির্মাণ এবং ইনস্টল

একবার Bazel সঠিকভাবে কনফিগার হয়ে গেলে, আপনি রুট চেকআউট ডিরেক্টরি থেকে নিম্নরূপ TensorFlow Lite AAR তৈরি করতে পারেন:

bazel build -c opt --cxxopt=--std=c++17 --config=android_arm64 \
  --fat_apk_cpu=x86,x86_64,arm64-v8a,armeabi-v7a \
  --define=android_dexmerger_tool=d8_dexmerger \
  --define=android_incremental_dexing_tool=d8_dexbuilder \
  //tensorflow/lite/java:tensorflow-lite

এটি bazel-bin/tensorflow/lite/java/ এ একটি AAR ফাইল তৈরি করবে। মনে রাখবেন যে এটি বিভিন্ন স্থাপত্যের সাথে একটি "ফ্যাট" AAR তৈরি করে; আপনার যদি সেগুলির সবগুলির প্রয়োজন না হয়, তাহলে আপনার স্থাপনার পরিবেশের জন্য উপযুক্ত উপসেটটি ব্যবহার করুন।

আপনি নিম্নরূপ মডেলের একটি সেট লক্ষ্য করে ছোট AAR ফাইল তৈরি করতে পারেন:

bash tensorflow/lite/tools/build_aar.sh \
  --input_models=model1,model2 \
  --target_archs=x86,x86_64,arm64-v8a,armeabi-v7a

উপরের স্ক্রিপ্টটি tensorflow-lite.aar ফাইল এবং ঐচ্ছিকভাবে tensorflow-lite-select-tf-ops.aar ফাইল তৈরি করবে যদি মডেলগুলির মধ্যে একটি টেনসরফ্লো অপস ব্যবহার করে। আরও বিশদ বিবরণের জন্য, অনুগ্রহ করে টেনসরফ্লো লাইট বাইনারি আকার হ্রাস করুন বিভাগটি দেখুন।

প্রজেক্টে সরাসরি AAR যোগ করুন

tensorflow-lite.aar ফাইলটিকে আপনার প্রজেক্টে libs নামে একটি ডিরেক্টরিতে সরান। নতুন ডিরেক্টরির উল্লেখ করতে আপনার অ্যাপের build.gradle ফাইলটি পরিবর্তন করুন এবং বিদ্যমান TensorFlow Lite নির্ভরতাকে নতুন স্থানীয় লাইব্রেরির সাথে প্রতিস্থাপন করুন, যেমন:

allprojects {
    repositories {
        mavenCentral()
        maven {  // Only for snapshot artifacts
            name 'ossrh-snapshot'
            url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
        flatDir {
            dirs 'libs'
        }
    }
}

dependencies {
    compile(name:'tensorflow-lite', ext:'aar')
}

স্থানীয় Maven সংগ্রহস্থলে AAR ইনস্টল করুন

আপনার রুট চেকআউট ডিরেক্টরি থেকে নিম্নলিখিত কমান্ডটি চালান:

mvn install:install-file \
  -Dfile=bazel-bin/tensorflow/lite/java/tensorflow-lite.aar \
  -DgroupId=org.tensorflow \
  -DartifactId=tensorflow-lite -Dversion=0.1.100 -Dpackaging=aar

আপনার অ্যাপের build.gradle এ, নিশ্চিত করুন যে আপনার কাছে mavenLocal() নির্ভরতা আছে এবং টেনসরফ্লো লাইট নির্ভরতা প্রতিস্থাপন করুন যেটিতে TensorFlow অপ্সের জন্য সমর্থন রয়েছে:

allprojects {
    repositories {
        mavenCentral()
        maven {  // Only for snapshot artifacts
            name 'ossrh-snapshot'
            url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
        mavenLocal()
    }
}

dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.1.100'
}

উল্লেখ্য যে এখানে 0.1.100 সংস্করণটি সম্পূর্ণরূপে পরীক্ষা/উন্নয়নের জন্য। স্থানীয় AAR ইনস্টল করার সাথে, আপনি আপনার অ্যাপ কোডে স্ট্যান্ডার্ড TensorFlow Lite Java inference APIs ব্যবহার করতে পারেন।