অন-ডিভাইস AI (বিটা) এর জন্য খেলুন

ভূমিকা

প্লে ফর অন-ডিভাইস এআই অ্যান্ড্রয়েড অ্যাপ বান্ডেল এবং গুগল প্লে ডেলিভারির সুবিধাগুলি কাস্টম এমএল মডেল বিতরণে নিয়ে আসে যাতে আপনি কোনও অতিরিক্ত খরচ ছাড়াই কম ডিভাইস ইকোসিস্টেম জটিলতার সাথে মডেলের কার্যকারিতা উন্নত করতে পারেন। এটি আপনাকে আপনার কোড, সম্পদ এবং ML মডেল সমন্বিত প্লেতে একটি একক আর্টিফ্যাক্ট প্রকাশ করতে এবং বেশ কয়েকটি ডেলিভারি মোড এবং টার্গেটিং বিকল্প থেকে বেছে নিতে দেয়।

সুবিধা

  • Google Play-এ একটি একক প্রকাশনার শিল্পকর্ম আপলোড করুন এবং কোনো অতিরিক্ত খরচ ছাড়াই প্লে-তে হোস্টিং, ডেলিভারি, আপডেট এবং টার্গেটিং অর্পণ করুন।
  • ইন্সটল-টাইমে, ফাস্ট-ফলো, বা অন-ডিমান্ডে আপনার ML মডেলগুলি সরবরাহ করুন।
    • ইনস্টল-টাইম ডেলিভারি গ্যারান্টি দিতে পারে যে আপনার অ্যাপ খোলার সময় একটি খুব বড় মডেল উপস্থিত থাকবে। আপনার মডেল একটি APK হিসাবে ইনস্টল করা হবে.
    • আপনার অ্যাপ ইন্সটল হওয়ার পরে দ্রুত-অনুসরণ ডেলিভারি স্বয়ংক্রিয়ভাবে ব্যাকগ্রাউন্ডে ঘটে। আপনার মডেল সম্পূর্ণরূপে ডাউনলোড হওয়ার আগে ব্যবহারকারীরা আপনার অ্যাপ খুলতে পারে। আপনার মডেলটি আপনার অ্যাপের অভ্যন্তরীণ সঞ্চয়স্থানে ডাউনলোড করা হবে।
    • অন-ডিমান্ড ডেলিভারি আপনাকে রানটাইমে মডেলের অনুরোধ করতে দেয়, যেটি উপযোগী যদি মডেলটি শুধুমাত্র নির্দিষ্ট ব্যবহারকারী-প্রবাহের জন্য প্রয়োজন হয়। আপনার মডেলটি আপনার অ্যাপের অভ্যন্তরীণ সঞ্চয়স্থানে ডাউনলোড করা হবে।
  • ডিভাইস মডেল, সিস্টেম বৈশিষ্ট্য, বা RAM এর উপর ভিত্তি করে নির্দিষ্ট ডিভাইসে লক্ষ্য করা আপনার ML মডেলের ভেরিয়েন্টগুলি সরবরাহ করুন।
  • প্লে-এর স্বয়ংক্রিয় প্যাচিংয়ের সাহায্যে অ্যাপ আপডেটগুলিকে ছোট এবং অপ্টিমাইজ করে রাখুন, যার মানে শুধুমাত্র ফাইলের পার্থক্যগুলি ডাউনলোড করতে হবে।

বিবেচনা

  • প্লে ফর অন-ডিভাইস AI ব্যবহার করার মাধ্যমে আপনি Google Play ডেভেলপার ডিস্ট্রিবিউশন এগ্রিমেন্ট এবং প্লে কোর সফটওয়্যার ডেভেলপমেন্ট কিট পরিষেবার শর্তাবলীতে সম্মত হন।
  • অন-ডিভাইস AI-এর জন্য প্লে-এর দ্বারা ডাউনলোড করা মডেলগুলি শুধুমাত্র আপনার অ্যাপের দ্বারা ব্যবহার করা উচিত। মডেলগুলি অন্য অ্যাপগুলিতে অফার করা উচিত নয়৷
  • স্বতন্ত্র AI প্যাকগুলি তাদের সংকুচিত ডাউনলোড আকারের উপর ভিত্তি করে 1.5GB পর্যন্ত হতে পারে। আপনার অ্যাপ বান্ডেল থেকে জেনারেট করা আপনার অ্যাপের যেকোনো সংস্করণের সর্বাধিক ক্রমবর্ধমান অ্যাপের আকার হল 4GB।
  • 1GB এর বেশি আকারের অ্যাপগুলিকে অবশ্যই ন্যূনতম SDK লেভেল 21 বা তার বেশি সেট করতে হবে।

অন-ডিভাইস এআই-এর জন্য প্লে কীভাবে ব্যবহার করবেন

প্লে-অন-ডিভাইস এআই এআই প্যাক ব্যবহার করে। আপনি কাস্টম মডেলগুলি প্যাকেজ করেন যা আপনার অ্যাপ বান্ডেলে AI প্যাকে বিতরণের জন্য প্রস্তুত। এআই প্যাকটি ইন্সটল-টাইম, ফাস্ট-ফলো, বা অন-ডিমান্ডে ডেলিভারি করা উচিত কিনা তা আপনি বেছে নিতে পারেন।

আপনার অ্যাপ বান্ডেলের সাথে AI প্যাকগুলি প্যাকেজ করে, আপনি আপনার কাস্টম মডেলগুলির সাথে আপনার অ্যাপের বিতরণ পরিচালনা করতে প্লে-এর বিদ্যমান সমস্ত টেস্টিং এবং রিলিজ টুল, যেমন টেস্ট ট্র্যাক এবং স্টেজড রোলআউটগুলি ব্যবহার করতে পারেন।

এআই প্যাকগুলি অ্যাপ বাইনারির সাথে একসাথে আপডেট করা হয়। যদি আপনার নতুন অ্যাপ রিলিজ একটি AI প্যাকে পরিবর্তন না করে, তাহলে Play এর স্বয়ংক্রিয় প্যাচিং প্রক্রিয়া নিশ্চিত করবে যে ব্যবহারকারীকে এটি পুনরায় ডাউনলোড করতে হবে না। Play অ্যাপটি আপডেট করার সময় কি পরিবর্তন হয়েছে তা ডাউনলোড করবে।

AI প্যাকে শুধুমাত্র মডেল থাকে। জাভা/কোটলিন এবং নেটিভ লাইব্রেরি অনুমোদিত নয়। যদি আপনার এমএল মডেল চালানোর জন্য লাইব্রেরি বা কোড পাঠাতে হয়, তাহলে এটিকে বেস মডিউল বা বৈশিষ্ট্য মডিউলে নিয়ে যান। আপনি আপনার বৈশিষ্ট্য মডিউল কনফিগার করতে পারেন যাতে এটিতে AI প্যাকের মতো একই ডাউনলোড এবং টার্গেটিং সেটিংস থাকে।

AI প্যাকের সাথে LiteRT এবং MediaPipe ব্যবহার করুন

আপনি AI প্যাকগুলির সাথে LiteRT এবং MediaPipe ব্যবহার করতে পারেন। একটি AI প্যাকে আপনার মডেল প্যাকেজ করুন এবং তারপরে ইনস্টল-টাইম প্যাক বা দ্রুত-অনুসরণ এবং অন-ডিমান্ড প্যাকের জন্য নির্দেশাবলী ব্যবহার করে এটি অ্যাক্সেস করুন।

আরও পড়া:

AI প্যাক দিয়ে শুরু করুন

একটি উচ্চ স্তরে, আপনি কীভাবে অন-ডিভাইস এআই-এর জন্য প্লে ব্যবহার শুরু করতে পারেন তা এখানে রয়েছে:

  1. আপনার অ্যান্ড্রয়েড অ্যাপ বান্ডেলে আপনার মডেলগুলিকে AI প্যাকেজে প্যাকেজ করুন এবং AI প্যাকগুলি কীভাবে বিতরণ করা হবে তা নির্দিষ্ট করুন৷
  2. [ঐচ্ছিক] আপনি যদি বিভিন্ন ডিভাইসে বিভিন্ন মডেল সরবরাহ করতে চান, তাহলে আপনি আপনার AI প্যাকের জন্য ডিভাইস টার্গেটিং কনফিগার করতে পারেন। উদাহরণস্বরূপ, আপনি একটি নির্দিষ্ট ডিভাইস মডেলে AI প্যাক A, কমপক্ষে 6GB RAM সহ ডিভাইসগুলিতে AI প্যাক B সরবরাহ করতে পারেন এবং অন্যান্য সমস্ত ডিভাইস কোনও মডেল গ্রহণ করতে পারে না।
  3. [ঐচ্ছিক] আপনি যদি অন-ডিমান্ড ব্যবহার করেন বা দ্রুত-অনুসরণ করেন ডেলিভারি, আপনার এআই প্যাকগুলিকে প্রয়োজন অনুযায়ী ডাউনলোড করতে আপনার অ্যাপে প্লে এআই ডেলিভারি লাইব্রেরি সংহত করুন।
  4. Google Play-তে আপনার অ্যাপ বান্ডিল পরীক্ষা করুন এবং ছেড়ে দিন।

অ্যান্ড্রয়েড গ্রেডল প্লাগইন সংস্করণ পরীক্ষা করুন

AI প্যাকগুলি ব্যবহার করতে, নিশ্চিত করুন যে আপনার Android Gradle Plugin (AGP) সংস্করণটি কমপক্ষে 8.8। এই সংস্করণটি অ্যান্ড্রয়েড স্টুডিও লেডিবাগ 2 এর সাথে প্যাকেজ করা হয়েছে।

একটি AI প্যাকে আপনার মডেলটি বের করুন

নিম্নলিখিত পদক্ষেপগুলির জন্য Android স্টুডিওর প্রয়োজন নেই।

  1. আপনার প্রকল্পের শীর্ষ-স্তরের ডিরেক্টরিতে, এআই প্যাকের জন্য একটি ডিরেক্টরি তৈরি করুন। এই ডিরেক্টরির নামটি AI প্যাক নাম হিসাবে ব্যবহৃত হয়। AI প্যাকের নাম অবশ্যই একটি অক্ষর দিয়ে শুরু করতে হবে এবং শুধুমাত্র অক্ষর, সংখ্যা এবং আন্ডারস্কোর থাকতে পারে।
  2. AI প্যাক ডিরেক্টরিতে, একটি build.gradle ফাইল তৈরি করুন এবং নিম্নলিখিত কোড যোগ করুন। AI প্যাকের নাম এবং শুধুমাত্র একটি ডেলিভারি প্রকার উল্লেখ করতে ভুলবেন না:

    // In the AI pack's build.gradle file:
    plugins {
      id 'com.android.ai-pack'
    }
    
    aiPack {
        packName = "ai-pack-name" // Directory name for the AI pack
        dynamicDelivery {
            deliveryType = "[ install-time | fast-follow | on-demand ]"
        }
    }
    
  3. প্রজেক্টের অ্যাপ build.gradle ফাইলে, আপনার প্রোজেক্টের প্রতিটি AI প্যাকের নাম নিচে দেখানো মত যোগ করুন:

    // In the app build.gradle file:
    android {
        ...
        assetPacks = [":ai-pack-name", ":ai-pack2-name"]
    }
    
  4. প্রজেক্টের settings.gradle ফাইলে, নিচের মতো আপনার প্রোজেক্টে সমস্ত AI প্যাক অন্তর্ভুক্ত করুন:

    // In the settings.gradle file:
    include ':app'
    include ':ai-pack-name'
    include ':ai-pack2-name'
    
  5. আপনার AI প্যাকের ভিতরে, একটি src/main/assets/ ডিরেক্টরি তৈরি করুন।

  6. আপনার মডেলগুলি src/main/assets ডিরেক্টরিতে রাখুন। আপনি এখানেও সাবডিরেক্টরি তৈরি করতে পারেন। আপনার অ্যাপ্লিকেশানের জন্য ডিরেক্টরি কাঠামোটি এখন নিম্নলিখিতগুলির মতো হওয়া উচিত:

    • build.gradle
    • settings.gradle
    • app/
    • ai-pack-name/build.gradle
    • ai-pack-name/src/main/assets/your-model-directories
  7. আপনার মডেল লোড এবং চালানোর জন্য কোড যোগ করুন. আপনি কীভাবে এটি করবেন তা আপনার AI প্যাকের ডেলিভারি মোডের উপর নির্ভর করবে। নীচে ইনস্টল-সময় এবং দ্রুত-অনুসরণ/অন-ডিমান্ডের জন্য নির্দেশাবলী দেখুন।

  8. [ঐচ্ছিক] বিভিন্ন ডিভাইসে বিভিন্ন মডেল সরবরাহ করতে ডিভাইস টার্গেটিং কনফিগার করুন

  9. Gradle এর সাথে Android অ্যাপ বান্ডেল তৈরি করুন । জেনারেট করা অ্যাপ বান্ডেলে, রুট-লেভেল ডিরেক্টরিতে এখন নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে:

    • ai-pack-name/manifest/AndroidManifest.xml : এআই প্যাকের শনাক্তকারী এবং বিতরণ মোড কনফিগার করে
    • ai-pack-name/assets/your-model-directories : যে ডিরেক্টরিতে AI প্যাকের অংশ হিসাবে বিতরণ করা সমস্ত সম্পদ রয়েছে

    Gradle প্রতিটি AI প্যাকের জন্য ম্যানিফেস্ট তৈরি করে এবং আপনার জন্য assets/ ডিরেক্টরি আউটপুট করে।

ইন্সটল-টাইম ডেলিভারি কনফিগার করুন

ইনস্টল-টাইম হিসাবে কনফিগার করা AI প্যাকগুলি অ্যাপ লঞ্চের সময় অবিলম্বে উপলব্ধ। এই মোডে পরিবেশিত AI প্যাকগুলি অ্যাক্সেস করতে Java AssetManager API ব্যবহার করুন:

import android.content.res.AssetManager;
...
Context context = createPackageContext("com.example.app", 0);
AssetManager assetManager = context.getAssets();
InputStream is = assetManager.open("model-name");

দ্রুত-অনুসরণ এবং অন-ডিমান্ড ডেলিভারি কনফিগার করুন

দ্রুত-অনুসরণ বা অন-ডিমান্ড ডেলিভারি সহ AI প্যাকগুলি ডাউনলোড করতে, Play AI ডেলিভারি লাইব্রেরি ব্যবহার করুন৷

প্লে এআই ডেলিভারি লাইব্রেরির উপর নির্ভরতা ঘোষণা করুন

আপনার অ্যাপের build.gradle ফাইলে, প্লে এআই ডেলিভারি লাইব্রেরির উপর নির্ভরতা ঘোষণা করুন:

dependencies {
  ...
  implementation "com.google.android.play:ai-delivery:0.1.1-alpha01"
}

স্থিতি পরীক্ষা করুন

প্রতিটি AI প্যাক অ্যাপের অভ্যন্তরীণ স্টোরেজে একটি পৃথক ফোল্ডারে সংরক্ষণ করা হয়। একটি AI প্যাকের রুট ফোল্ডার নির্ধারণ করতে getPackLocation() পদ্ধতি ব্যবহার করুন। এই পদ্ধতি নিম্নলিখিত মান প্রদান করে:

রিটার্ন মান স্ট্যাটাস
একটি বৈধ AiPackLocation অবজেক্ট AI প্যাক রুট ফোল্ডার assetsPath() এ অবিলম্বে অ্যাক্সেসের জন্য প্রস্তুত
null অজানা AI প্যাক বা AI প্যাক উপলব্ধ নেই৷

এআই প্যাক সম্পর্কে ডাউনলোড তথ্য পান

ব্যবহার করুন
getPackStates() পদ্ধতিটি ডাউনলোডের আকার নির্ধারণ করতে এবং প্যাকটি ইতিমধ্যে ডাউনলোড হচ্ছে কিনা।

Task<AiPackStates> getPackStates(List<String> packNames)

getPackStates() হল একটি অ্যাসিঙ্ক্রোনাস পদ্ধতি যা একটি Task<AiPackStates> প্রদান করে। একটি AiPackStates অবজেক্টের packStates() পদ্ধতি একটি Map<String, AiPackState> প্রদান করে। এই মানচিত্রে প্রতিটি অনুরোধ করা AI প্যাকের অবস্থা রয়েছে, যার নাম দ্বারা চাবি করা হয়েছে:

Map<String, AiPackState> AiPackStates#packStates()

চূড়ান্ত অনুরোধ নিম্নলিখিত দ্বারা দেখানো হয়:

final String aiPackName = "myAiPackName";

aiPackManager
    .getPackStates(Collections.singletonList(aiPackName))
    .addOnCompleteListener(new OnCompleteListener<AiPackStates>() {
        @Override
        public void onComplete(Task<AiPackStates> task) {
            AiPackStates aiPackStates;
            try {
                aiPackStates = task.getResult();
                AiPackState aiPackState =
                    aiPackStates.packStates().get(aiPackName);
            } catch (RuntimeExecutionException e) {
                Log.d("MainActivity", e.getMessage());
                return;
            });

নিম্নলিখিত AiPackState পদ্ধতিগুলি AI প্যাকের আকার, এখন পর্যন্ত ডাউনলোড করা পরিমাণ (যদি অনুরোধ করা হয়), এবং ইতিমধ্যে অ্যাপে স্থানান্তরিত পরিমাণ প্রদান করে:

একটি AI প্যাকের স্থিতি পেতে, status() পদ্ধতিটি ব্যবহার করুন, যা একটি পূর্ণসংখ্যা হিসাবে স্থিতি প্রদান করে যা AiPackStatus ক্লাসের একটি ধ্রুবক ক্ষেত্রের সাথে সম্পর্কিত। একটি AI প্যাক যা এখনও ইনস্টল করা হয়নি তার AiPackStatus.NOT_INSTALLED স্ট্যাটাস রয়েছে।

একটি অনুরোধ ব্যর্থ হলে, errorCode() পদ্ধতি ব্যবহার করুন, যার রিটার্ন মান AiPackErrorCode ক্লাসের একটি ধ্রুবক ক্ষেত্রের সাথে মিলে যায়।

ইনস্টল করুন

প্রথমবার একটি AI প্যাক ডাউনলোড করতে fetch() পদ্ধতি ব্যবহার করুন বা সম্পূর্ণ করার জন্য একটি AI প্যাক আপডেট করার জন্য কল করুন:

Task<AiPackStates> fetch(List<String> packNames)

এই পদ্ধতিটি একটি AiPackStates অবজেক্ট প্রদান করে যাতে প্যাকগুলির একটি তালিকা এবং তাদের প্রাথমিক ডাউনলোডের অবস্থা এবং আকার রয়েছে। যদি fetch() এর মাধ্যমে অনুরোধ করা একটি AI প্যাক ইতিমধ্যেই ডাউনলোড করা হয়, ডাউনলোডের স্থিতি ফেরত দেওয়া হয় এবং কোনও অতিরিক্ত ডাউনলোড শুরু হয় না।

ডাউনলোড স্টেট মনিটর

AI প্যাকগুলির ইনস্টলেশনের অগ্রগতি ট্র্যাক করতে আপনার একটি AiPackStateUpdateListener প্রয়োগ করা উচিত। পৃথক এআই প্যাকের স্থিতি ট্র্যাকিং সমর্থন করার জন্য স্ট্যাটাস আপডেটগুলি প্যাক প্রতি ভেঙে দেওয়া হয়। আপনার অনুরোধের জন্য অন্যান্য সমস্ত ডাউনলোড সম্পূর্ণ হওয়ার আগে আপনি উপলব্ধ AI প্যাকগুলি ব্যবহার করা শুরু করতে পারেন।

void registerListener(AiPackStateUpdateListener listener)
void unregisterListener(AiPackStateUpdateListener listener)
বড় ডাউনলোড

যদি ডাউনলোডটি 200 MB-এর চেয়ে বড় হয় এবং ব্যবহারকারী Wi-Fi-এ না থাকে, তাহলে ডাউনলোড শুরু হবে না যতক্ষণ না ব্যবহারকারী স্পষ্টভাবে একটি মোবাইল ডেটা সংযোগ ব্যবহার করে ডাউনলোডের সাথে এগিয়ে যাওয়ার জন্য তাদের সম্মতি দেন৷ একইভাবে, যদি ডাউনলোডটি বড় হয় এবং ব্যবহারকারী Wi-Fi হারান, ডাউনলোডটি বিরতি দেওয়া হয় এবং একটি মোবাইল ডেটা সংযোগ ব্যবহার করে এগিয়ে যাওয়ার জন্য স্পষ্ট সম্মতি প্রয়োজন৷ একটি পজ করা প্যাকে WAITING_FOR_WIFI স্টেট আছে। ব্যবহারকারীকে সম্মতির জন্য অনুরোধ জানানোর জন্য UI ফ্লো ট্রিগার করতে, showConfirmationDialog() পদ্ধতি ব্যবহার করুন।

মনে রাখবেন যে অ্যাপটি এই পদ্ধতিতে কল না করলে, ডাউনলোডটি বিরতি দেওয়া হয় এবং ব্যবহারকারী যখন Wi-Fi সংযোগে ফিরে আসে শুধুমাত্র তখনই স্বয়ংক্রিয়ভাবে পুনরায় শুরু হবে।

প্রয়োজনীয় ব্যবহারকারী নিশ্চিতকরণ

যদি একটি প্যাকের REQUIRES_USER_CONFIRMATION স্থিতি থাকে, তবে ব্যবহারকারী showConfirmationDialog() এর সাথে দেখানো ডায়ালগটি গ্রহণ না করা পর্যন্ত ডাউনলোডটি এগিয়ে যাবে না। এই স্থিতি ঘটতে পারে যখন অ্যাপটি প্লে দ্বারা স্বীকৃত না হয়—উদাহরণস্বরূপ, যদি অ্যাপটি সাইডলোড করা হয়। মনে রাখবেন যে এই ক্ষেত্রে showConfirmationDialog() কল করলে অ্যাপটি আপডেট হবে। আপডেটের পরে, আপনাকে আবার এআই প্যাকগুলির জন্য অনুরোধ করতে হবে।

নিম্নলিখিত একটি শ্রোতা বাস্তবায়ন একটি উদাহরণ:

AiPackStateUpdateListener aiPackStateUpdateListener = new AiPackStateUpdateListener() {
    private final ActivityResultLauncher<IntentSenderRequest> activityResultLauncher =
      registerForActivityResult(
          new ActivityResultContracts.StartIntentSenderForResult(),
          new ActivityResultCallback<ActivityResult>() {
            @Override
            public void onActivityResult(ActivityResult result) {
              if (result.getResultCode() == RESULT_OK) {
                Log.d(TAG, "Confirmation dialog has been accepted.");
              } else if (result.getResultCode() == RESULT_CANCELED) {
                Log.d(TAG, "Confirmation dialog has been denied by the user.");
              }
            }
          });

    @Override
    public void onStateUpdate(AiPackState aiPackState) {
      switch (aiPackState.status()) {
        case AiPackStatus.PENDING:
          Log.i(TAG, "Pending");
          break;

        case AiPackStatus.DOWNLOADING:
          long downloaded = aiPackState.bytesDownloaded();
          long totalSize = aiPackState.totalBytesToDownload();
          double percent = 100.0 * downloaded / totalSize;

          Log.i(TAG, "PercentDone=" + String.format("%.2f", percent));
          break;

        case AiPackStatus.TRANSFERRING:
          // 100% downloaded and assets are being transferred.
          // Notify user to wait until transfer is complete.
          break;

        case AiPackStatus.COMPLETED:
          // AI pack is ready to use. Run the model.
          break;

        case AiPackStatus.FAILED:
          // Request failed. Notify user.
          Log.e(TAG, aiPackState.errorCode());
          break;

        case AiPackStatus.CANCELED:
          // Request canceled. Notify user.
          break;

        case AiPackStatus.WAITING_FOR_WIFI:
        case AiPackStatus.REQUIRES_USER_CONFIRMATION:
          if (!confirmationDialogShown) {
            aiPackManager.showConfirmationDialog(activityResultLauncher);
            confirmationDialogShown = true;
          }
          break;

        case AiPackStatus.NOT_INSTALLED:
          // AI pack is not downloaded yet.
          break;
        case AiPackStatus.UNKNOWN:
          Log.wtf(TAG, "AI pack status unknown")
          break;
      }
    }
}

বিকল্পভাবে, আপনি বর্তমান ডাউনলোডের স্থিতি পেতে getPackStates() পদ্ধতি ব্যবহার করতে পারেন। AiPackStates ডাউনলোডের অগ্রগতি, ডাউনলোডের স্থিতি এবং যেকোনো ব্যর্থতার ত্রুটি কোড রয়েছে।

এআই প্যাকগুলি অ্যাক্সেস করুন

ডাউনলোডের অনুরোধ COMPLETED অবস্থায় পৌঁছানোর পরে আপনি ফাইল সিস্টেম কল ব্যবহার করে একটি AI প্যাক অ্যাক্সেস করতে পারেন। AI প্যাকের রুট ফোল্ডার পেতে getPackLocation() পদ্ধতি ব্যবহার করুন।

এআই প্যাকগুলি এআই প্যাক রুট ডিরেক্টরির মধ্যে assets ডিরেক্টরিতে সংরক্ষণ করা হয়। আপনি সুবিধার পদ্ধতি assetsPath() ব্যবহার করে assets ডিরেক্টরির পথ পেতে পারেন। একটি নির্দিষ্ট সম্পদের পথ পেতে নিম্নলিখিত পদ্ধতি ব্যবহার করুন:

private String getAbsoluteAiAssetPath(String aiPack, String relativeAiAssetPath) {
    AiPackLocation aiPackPath = aiPackManager.getPackLocation(aiPack);

    if (aiPackPath == null) {
        // AI pack is not ready
        return null;
    }

    String aiAssetsFolderPath = aiPackPath.assetsPath();
    // equivalent to: FilenameUtils.concat(aiPackPath.path(), "assets");
    String aiAssetPath = FilenameUtils.concat(aiAssetsFolderPath, relativeAiAssetPath);
    return aiAssetPath;
}

ডিভাইস টার্গেটিং কনফিগার করুন

আপনার AI প্যাকগুলি গ্রহণ করা উচিত এমন ডিভাইস বা ডিভাইসগুলির গ্রুপ নির্দিষ্ট করতে আপনি ডিভাইস টার্গেটিং নির্দেশাবলী অনুসরণ করতে পারেন।

অন্যান্য প্লে এআই ডেলিভারি এপিআই পদ্ধতি

নিম্নলিখিত কিছু অতিরিক্ত API পদ্ধতি রয়েছে যা আপনি আপনার অ্যাপে ব্যবহার করতে চাইতে পারেন।

অনুরোধ বাতিল করুন

একটি সক্রিয় AI প্যাক অনুরোধ বাতিল করতে cancel() ব্যবহার করুন। মনে রাখবেন যে এই অনুরোধটি একটি সর্বোত্তম-প্রচেষ্টা অপারেশন।

একটি AI প্যাক সরান

একটি AI প্যাক অপসারণের সময়সূচী করতে removePack() ব্যবহার করুন।

একাধিক এআই প্যাকের অবস্থান পান

বাল্কে একাধিক AI প্যাকের স্থিতি জিজ্ঞাসা করতে getPackLocations() ব্যবহার করুন, যা AI প্যাক এবং তাদের অবস্থানগুলির একটি মানচিত্র প্রদান করে৷ getPackLocations() দ্বারা প্রত্যাবর্তিত মানচিত্রে বর্তমানে ডাউনলোড করা এবং আপ-টু-ডেট প্রতিটি প্যাকের জন্য একটি এন্ট্রি রয়েছে।

ডিভাইস টার্গেটিং

ডিভাইস টার্গেটিং আপনাকে আপনার অ্যাপ বান্ডেলের কোন অংশগুলি নির্দিষ্ট ডিভাইসে বিতরণ করা হবে তার উপর সূক্ষ্ম নিয়ন্ত্রণ দেয়। উদাহরণস্বরূপ, আপনি নিশ্চিত করতে পারেন যে একটি বড় মডেল শুধুমাত্র উচ্চ RAM সহ ডিভাইসগুলিতে বিতরণ করা হয়েছে বা আপনি বিভিন্ন ডিভাইসে একটি মডেলের বিভিন্ন সংস্করণ সরবরাহ করতে পারেন।

আপনি ডিভাইস বৈশিষ্ট্য লক্ষ্য করতে পারেন যেমন:

প্রয়োজনীয় পদক্ষেপের ওভারভিউ

ডিভাইস টার্গেটিং সক্ষম করতে নিম্নলিখিত পদক্ষেপগুলি প্রয়োজন:

  1. একটি XML ফাইলে আপনার ডিভাইস গ্রুপ সংজ্ঞায়িত করুন।
  2. আপনার বান্ডেলের কোন অংশগুলি কোন ডিভাইস গ্রুপে যেতে হবে তা নির্দিষ্ট করুন৷
  3. [ঐচ্ছিক] স্থানীয়ভাবে আপনার কনফিগারেশন পরীক্ষা করুন.
  4. Google Play-তে আপনার বান্ডেল (এক্সএমএল ফাইল ধারণকারী) আপলোড করুন।

অ্যান্ড্রয়েড গ্রেডল প্লাগইন সংস্করণ পরীক্ষা করুন

ডিভাইস টার্গেটিং ব্যবহার করতে, নিশ্চিত করুন যে আপনার Android Gradle Plugin (AGP) সংস্করণটি কমপক্ষে 8.10.0-alpha01। এটি অ্যান্ড্রয়েড স্টুডিও মিরকাট 2 এর সাথে প্যাকেজ করা হয়েছে, যা ক্যানারিতে রয়েছে।

অ্যান্ড্রয়েড গ্রেডল প্লাগইনে এই বৈশিষ্ট্যটি সক্ষম করুন

ডিভাইস টার্গেটিং আপনার gradle.properties ফাইলে স্পষ্টভাবে সক্রিয় করা আবশ্যক:

android.experimental.enableDeviceTargetingConfigApi=true

একটি ডিভাইস টার্গেটিং কনফিগারেশন XML ফাইল তৈরি করুন

ডিভাইস টার্গেটিং কনফিগারেশন ফাইল হল একটি XML ফাইল যেখানে আপনি আপনার কাস্টম ডিভাইস গ্রুপগুলিকে সংজ্ঞায়িত করেন। উদাহরণস্বরূপ, আপনি qti_v79 নামক একটি ডিভাইস গ্রুপকে সংজ্ঞায়িত করতে পারেন যাতে চিপে থাকা Qualcomm SM8750 সিস্টেম সহ সমস্ত ডিভাইস রয়েছে:

<config:device-targeting-config
    xmlns:config="http://schemas.android.com/apk/config">

    <config:device-group name="qti_v79">
        <config:device-selector>
            <config:system-on-chip manufacturer="QTI" model="SM8750"/>
        </config:device-selector>
    </config:device-group>

</config:device-targeting-config>

একটি ডিভাইস গ্রুপ 5টি পর্যন্ত ডিভাইস নির্বাচকের সমন্বয়ে গঠিত। একটি ডিভাইস একটি ডিভাইস গ্রুপে অন্তর্ভুক্ত করা হয় যদি এটি তার ডিভাইস নির্বাচকদের কোনোটিকে সন্তুষ্ট করে।

একটি ডিভাইস নির্বাচকের এক বা একাধিক ডিভাইস বৈশিষ্ট্য থাকতে পারে। একটি ডিভাইস নির্বাচন করা হয় যদি এটি নির্বাচকের ডিভাইস বৈশিষ্ট্যগুলির সাথে মেলে।

যদি একটি ডিভাইস একাধিক গোষ্ঠীর সাথে মেলে, তবে এটি সেই গোষ্ঠীর জন্য সামগ্রী পরিবেশন করা হবে যা XML ফাইলে প্রথমে সংজ্ঞায়িত করা হয়েছে। আপনি XML ফাইলে গ্রুপ সংজ্ঞায়িত করা আপনার অগ্রাধিকার ক্রম.

যদি একটি ডিভাইস কোনো গ্রুপের সাথে মেলে না, তবে এটি ডিফল্ট "অন্যান্য" গ্রুপ পাবে। এই গ্রুপটি স্বয়ংক্রিয়ভাবে তৈরি হয় এবং স্পষ্টভাবে সংজ্ঞায়িত করা উচিত নয়।

উপলব্ধ ডিভাইস বৈশিষ্ট্য

  • device_ram : ডিভাইস RAM এর প্রয়োজনীয়তা
    • min_bytes ( অন্তর্ভুক্ত) : ন্যূনতম প্রয়োজনীয় RAM (বাইটে)
    • max_bytes ( একচেটিয়া) : সর্বাধিক প্রয়োজনীয় RAM (বাইটে)
  • include_device_ids : ডিভাইস মডেল এই নির্বাচকে অন্তর্ভুক্ত করতে হবে (প্রতি গ্রুপে সর্বাধিক 10000টি ডিভাইস_আইডি) । ডিভাইসটি তালিকার যেকোনো ডিভাইস_আইডির সাথে মেলে তাহলে এই সম্পত্তিটি সন্তুষ্ট।
    • build_brand : ডিভাইস প্রস্তুতকারক
    • build_device : ডিভাইস মডেল কোড
  • excluded_device_ids : ডিভাইস মডেলগুলিকে এই নির্বাচকে বাদ দিতে হবে (প্রতি গ্রুপে সর্বাধিক 10000টি ডিভাইস_আইডি) । এই বৈশিষ্ট্যটি সন্তুষ্ট যদি ডিভাইসটি তালিকার কোনো device_id-এর সাথে মেলে না।
    • build_brand : ডিভাইস প্রস্তুতকারক
    • build_device : ডিভাইস মডেল কোড
  • প্রয়োজনীয়_সিস্টেম_বিশিষ্ট : একটি ডিভাইসের যে বৈশিষ্ট্যগুলিকে এই নির্বাচক দ্বারা অন্তর্ভুক্ত করতে হবে (প্রতি গ্রুপে সর্বাধিক 100টি বৈশিষ্ট্য) । এই বৈশিষ্ট্যটি পূরণ করতে একটি ডিভাইসের এই তালিকায় সমস্ত সিস্টেম বৈশিষ্ট্য থাকা প্রয়োজন৷

    সিস্টেম বৈশিষ্ট্য উল্লেখ

    • নাম : একটি সিস্টেম বৈশিষ্ট্য
  • forbidden_system_features : বৈশিষ্ট্যগুলি যা একটি ডিভাইসকে এই নির্বাচক দ্বারা অন্তর্ভুক্ত করতে হবে না (প্রতি গ্রুপে সর্বাধিক 100টি বৈশিষ্ট্য) । যদি একটি ডিভাইসে এই তালিকায় সিস্টেম বৈশিষ্ট্যগুলির কোনোটি থাকে তবে এটি এই সম্পত্তিকে সন্তুষ্ট করে না।

    সিস্টেম বৈশিষ্ট্য উল্লেখ

    • নাম : একটি সিস্টেম বৈশিষ্ট্য
  • সিস্টেম-অন-চিপ : সিস্টেম অন চিপ এই নির্বাচকের মধ্যে অন্তর্ভুক্ত করা হবে। এই বৈশিষ্ট্যটি পূরণ করতে একটি ডিভাইসের এই তালিকায় যেকোনো চিপ থাকা প্রয়োজন।

এখানে সমস্ত সম্ভাব্য ডিভাইস বৈশিষ্ট্য দেখানো একটি উদাহরণ:

<config:device-targeting-config
    xmlns:config="http://schemas.android.com/apk/config">

    <config:device-group name="myCustomGroup1">
      <config:device-selector ram-min-bytes="8000000000">
        <config:included-device-id brand="google" device="redfin"/>
        <config:included-device-id brand="google" device="sailfish"/>
        <config:included-device-id brand="good-brand"/>
        <config:excluded-device-id brand="google" device="caiman"/>
        <config:system-on-chip manufacturer="Sinclair" model="ZX80"/>
        <config:system-on-chip manufacturer="Commodore" model="C64"/>
      </config:device-selector>
      <config:device-selector ram-min-bytes="16000000000"/>
    </config:device-group>

    <config:device-group name="myCustomGroup2">
      <config:device-selector ram-min-bytes="4000000000" ram-max-bytes="8000000000">
        <config:required-system-feature name="android.hardware.bluetooth"/>
        <config:required-system-feature name="android.hardware.location"/>
        <config:forbidden-system-feature name="android.hardware.camera"/>
        <config:forbidden-system-feature name="mindcontrol.laser"/>
      </config:device-selector>
    </config:device-group>

</config:device-targeting-config>

অফিসিয়াল ডিভাইস প্রস্তুতকারক এবং ডিভাইস মডেল কোড

আপনি Google Play Console-এ ডিভাইস ক্যাটালগ ব্যবহার করে ডিভাইস প্রস্তুতকারক এবং মডেল কোডের জন্য সঠিক ফর্ম্যাটিং খুঁজে পেতে পারেন:

  • ডিভাইস ক্যাটালগ ব্যবহার করে পৃথক ডিভাইসগুলি পরিদর্শন করা, এবং নীচের উদাহরণে দেখানো অবস্থানে প্রস্তুতকারক এবং মডেল কোড খুঁজে পাওয়া (Google Pixel 4a-এর জন্য, প্রস্তুতকারক হল "Google" এবং মডেল কোড হল "সানফিশ")'

    ডিভাইস ক্যাটালগে pixel 4a পৃষ্ঠা

    ডিভাইস ক্যাটালগে pixel 4a পৃষ্ঠা

  • সমর্থিত ডিভাইসগুলির একটি CSV ডাউনলোড করা এবং বিল্ড_ব্র্যান্ড এবং বিল্ড_ডিভাইস ক্ষেত্রের জন্য যথাক্রমে প্রস্তুতকারক এবং মডেল কোড ব্যবহার করা।

আপনার অ্যাপ বান্ডেলে আপনার ডিভাইস টার্গেটিং কনফিগারেশন ফাইল অন্তর্ভুক্ত করুন

আপনার প্রধান মডিউল এর build.gradle ফাইলে নিম্নলিখিত যোগ করুন:

android {
  ...
  bundle {
    deviceTargetingConfig = file('device_targeting_config.xml')
    deviceGroup {
      enableSplit = true   // split bundle by #group
      defaultGroup = "other"  // group used for standalone APKs
    }
  }
  ...
}

device_targeting_config.xml হল আপনার কনফিগারেশন ফাইলের পাথ প্রধান মডিউলের সাপেক্ষে। এটি নিশ্চিত করে যে আপনার কনফিগারেশন ফাইলটি আপনার অ্যাপ বান্ডেলের সাথে প্যাকেজ করা আছে।

deviceGroup ক্লজ নিশ্চিত করে যে আপনার বান্ডেল থেকে জেনারেট করা APKগুলি ডিভাইস গ্রুপ দ্বারা বিভক্ত।

আপনার AI প্যাকের জন্য ডিভাইস টার্গেটিং ব্যবহার করুন

আপনি কেবলমাত্র আপনার বড় মডেলগুলিকে চালাতে পারে এমন ডিভাইসগুলিতে সরবরাহ করে ডিভাইসগুলিতে আকার অপ্টিমাইজ রাখতে পারেন৷

শেষ ধাপে তৈরি করা বিদ্যমান AI প্যাক ডিরেক্টরিগুলি নিয়ে আপনার AI প্যাকগুলিকে ডিভাইস গোষ্ঠীগুলির দ্বারা উপবিভাজন করুন এবং #group_myCustomGroup1, #group_myCustomGroup2, ইত্যাদির সাথে উপযুক্ত ফোল্ডারগুলি (নিচে বর্ণিত হিসাবে) পোস্ট-ফিক্সিং করুন৷ আপনার অ্যাপে AI প্যাকগুলি ব্যবহার করার সময়, আপনাকে ফোল্ডারগুলিকে সম্বোধন করতে হবে না, পোস্টফিক্স করার সময় স্বয়ংক্রিয়ভাবে পোস্টফিক্স করা হয় (অন্যান্য শব্দগুলি তৈরি করা হয়)৷

পূর্ববর্তী পদক্ষেপের পরে, এটি এর মতো দেখতে পারে:

...
.../ai-pack-name/src/main/assets/image-classifier#group_myCustomGroup1/
.../ai-pack-name/src/main/assets/image-classifier#group_myCustomGroup2/
...

এই উদাহরণে, আপনি কোনো পোস্টফিক্স ছাড়াই ai-pack-name/assets/image-classifier/ উল্লেখ করবেন।

myCustomGroup1 এর ডিভাইসগুলি image-classifier#group_myCustomGroup1/ অধীনে সমস্ত সম্পত্তি পাবে, যেখানে myCustomGroup2 এর ডিভাইসগুলি image-classifier#group_myCustomGroup2/ অধীনে সমস্ত সম্পত্তি পাবে।

যে ডিভাইসগুলি myCustomGroup1 বা myCustomGroup2 এর অন্তর্গত নয় সেগুলি একটি খালি ai-pack-name প্যাক পাবে৷

কারণ যে ডিভাইসগুলি কোনো ডিভাইস গ্রুপের সাথে মেলে না সেগুলি আপনার AI প্যাকের ডিফল্ট ভেরিয়েন্ট পাবে। এটি এমন কিছু অন্তর্ভুক্ত করে যা একটি #group_suffix সহ একটি ডিরেক্টরির মধ্যে নেই।

একবার আপনি AI প্যাকটি ডাউনলোড করার পরে, আপনি ইনস্টল-টাইম প্যাকগুলির জন্য AssetManager বা দ্রুত-অনুসরণ এবং অন-ডিমান্ড প্যাকের জন্য AiPackManager ব্যবহার করে আপনার মডেল উপস্থিত আছে কিনা তা পরীক্ষা করতে পারেন৷ নমুনা অ্যাপে সমস্ত ডেলিভারি মোডের জন্য এটি করার উদাহরণ দেখানো হয়েছে।

আপনার বৈশিষ্ট্য মডিউল জন্য ডিভাইস টার্গেটিং ব্যবহার করুন

আপনি বৈশিষ্ট্য মডিউলগুলির জন্য ডিভাইস টার্গেটিং ব্যবহার করতে পারেন। ডিভাইস গ্রুপ দ্বারা বৈশিষ্ট্য মডিউলগুলিকে উপবিভাজন করার পরিবর্তে, আপনি নির্দিষ্ট করুন যে ডিভাইস গ্রুপ সদস্যতার উপর ভিত্তি করে সম্পূর্ণ মডিউল বিতরণ করা উচিত কিনা।

myCustomGroup1 বা myCustomGroup2 এর অন্তর্গত ডিভাইসগুলিতে একটি বৈশিষ্ট্য মডিউল সরবরাহ করতে, এর AndroidManifest.xml সংশোধন করুন:

<manifest ...>
  ...
  <dist:module dist:title="...">
    <dist:delivery>
      <dist:install-time>
        <dist:conditions>
          <dist:device-groups>
            <dist:device-group dist:name="myCustomGroup1"/>
            <dist:device-group dist:name="myCustomGroup2"/>
          </dist:device-groups>
          ...
        </dist:conditions>
      </dist:install-time>
    </dist:delivery>
  </dist:module>
  ...
</manifest>

স্থানীয়ভাবে পরীক্ষা করুন

আপনার নতুন বান্ডেলের জন্য একটি রিলিজ তৈরি করার আগে, আপনি অভ্যন্তরীণ অ্যাপ শেয়ারিং বা বান্ডলেটুল দিয়ে স্থানীয়ভাবে পরীক্ষা করতে পারেন।

অভ্যন্তরীণ অ্যাপ শেয়ারিং

অভ্যন্তরীণ অ্যাপ শেয়ারিং আপনাকে দ্রুত একটি URL তৈরি করতে একটি অ্যাপ বান্ডিল ব্যবহার করতে দেয় যা আপনি একটি স্থানীয় ডিভাইসে ট্যাপ করতে পারেন যা ইনস্টল করতে Google Play সেই ডিভাইসের জন্য ঠিক কী ইনস্টল করবে যদি অ্যাপটির সেই সংস্করণটি পরীক্ষা বা প্রোড ট্র্যাকে লাইভ থাকে।

অভ্যন্তরীণ অ্যাপ শেয়ারিং নির্দেশাবলী একবার দেখুন।

বান্ডলেটুল

বিকল্পভাবে, আপনি bundletool (1.18.0 বা তার উপরে) ব্যবহার করে APK গুলি তৈরি করতে পারেন এবং সেগুলিকে আপনার ডিভাইসে সাইডলোড করতে পারেন৷ bundletool ব্যবহার করে স্থানীয়ভাবে আপনার অ্যাপ পরীক্ষা করতে এই পদক্ষেপগুলি অনুসরণ করুন:

  1. Android Studio বা bundletool দিয়ে আপনার অ্যাপ বান্ডিল তৈরি করুন।

  2. --local-testing পতাকা সহ APK তৈরি করুন:

    java -jar bundletool-all.jar build-apks --bundle=path/to/your/bundle.aab \
      --output=output.apks --local-testing
    
  3. একটি ডিভাইস সংযুক্ত করুন এবং APKগুলি সাইডলোড করতে bundletool চালান:

    # Example without Device Targeting Configuration
    java -jar bundletool.jar install-apks --apks=output.apks
    
    # Example with Device Targeting Configuration (you must specify which groups the connected device belongs to)
    java -jar bundletool.jar install-apks --apks=output.apks --device-groups=myCustomGroup1,myCustomGroup2
    

বান্ডলেটুল সহ স্থানীয় পরীক্ষার সীমাবদ্ধতা

নিম্নলিখিত বান্ডলেটুল সহ স্থানীয় পরীক্ষার সীমাবদ্ধতা রয়েছে:

  • fast-follow প্যাকগুলি on-demand প্যাক হিসাবে আচরণ করে। অর্থাৎ, অ্যাপটি সাইডলোড হলে সেগুলি স্বয়ংক্রিয়ভাবে আনা হবে না। অ্যাপটি শুরু হলে ডেভেলপারদের ম্যানুয়ালি তাদের অনুরোধ করতে হবে; এর জন্য আপনার অ্যাপে কোনো কোড পরিবর্তনের প্রয়োজন নেই।
  • প্যাকগুলি প্লে-এর পরিবর্তে বাহ্যিক সঞ্চয়স্থান থেকে আনা হয়, তাই নেটওয়ার্ক ত্রুটির ক্ষেত্রে আপনার কোড কীভাবে আচরণ করে তা আপনি পরীক্ষা করতে পারবেন না।
  • স্থানীয় পরীক্ষায় ওয়াই-ফাই-এর জন্য অপেক্ষার দৃশ্যকল্প কভার করে না।
  • আপডেট সমর্থিত নয়. আপনার বিল্ডের একটি নতুন সংস্করণ ইনস্টল করার আগে, ম্যানুয়ালি পূর্ববর্তী সংস্করণটি আনইনস্টল করুন৷

যাচাই করুন যে সঠিক APKগুলি ইনস্টল করা হচ্ছে

ডিভাইসে শুধুমাত্র সঠিক APK ইনস্টল করা আছে তা নিশ্চিত করতে নিম্নলিখিত পদ্ধতি ব্যবহার করুন

adb shell pm path {packageName}

আপনার এমন কিছু দেখতে হবে:

package:{...}/base.apk
package:{...}/split_config.en.apk
package:{...}/split_config.xxhdpi.apk
package:{...}/split_main_ai-pack-name.apk
package:{...}/split_main_ai-pack-name.config.group_myCustomGroup1.apk

মনে রাখবেন যে আপনি এই তালিকায় শুধুমাত্র APK দেখতে পাবেন, যেগুলি বৈশিষ্ট্য মডিউল এবং ইনস্টল-টাইম AI প্যাকগুলি থেকে তৈরি। অন-ডিমান্ড এবং ফাস্ট-ফলো এআই প্যাকগুলি APK হিসাবে ইনস্টল করা হয় না।

Google Play-তে পরীক্ষা করুন এবং প্রকাশ করুন

আমরা সুপারিশ করি যে আপনি একটি অভ্যন্তরীণ পরীক্ষা ট্র্যাক দিয়ে Google Play-তে আপনার অ্যাপের শেষ থেকে শেষ পর্যন্ত পরীক্ষা করুন৷

একবার আপনি এটি করে ফেললে, আপনি পর্যায়ক্রমে রোল-আউটগুলির সাথে উত্পাদনে আপনার অ্যাপ আপডেটটি ক্রমবর্ধমানভাবে প্রকাশ করতে পারেন৷

অন-ডিভাইস এআই-এর জন্য প্লে ব্যবহার করে নমুনা অ্যাপ

আমাদের নমুনা অ্যাপে অ্যাক্সেস পেতে আপনার Google Play অংশীদার পরিচালকের সাথে যোগাযোগ করুন।

এটি প্রদর্শন করে কিভাবে প্রতিটি ডেলিভারি মোড ব্যবহার করতে হয় সেইসাথে ডিভাইস টার্গেটিং কনফিগারেশন। শুরু করতে স্থানীয় পরীক্ষার বিভাগটি দেখুন।

অ্যান্ড্রয়েড অ্যাপ বান্ডেল সম্পর্কে আরও জানুন এবং এআই ডেলিভারি SDK-এর রেফারেন্সগুলি পড়ুন।