মিডিয়া এনহ্যান্সমেন্ট এপিআই দিয়ে শুরু করুন

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

এপিআই ইনিশিয়ালাইজ করার আগে, আপনাকে অবশ্যই আপনার প্রোজেক্টের ডিপেন্ডেন্সিগুলো কনফিগার করতে হবে এবং ম্যানিফেস্টে হার্ডওয়্যার অ্যাক্সিলারেশনের প্রয়োজনীয়তা ঘোষণা করতে হবে। এই কনফিগারেশনগুলো এড়িয়ে যাওয়াই হলো GLOBAL_INIT_FAILED রানটাইম এররের প্রধান কারণ।

গ্রেডল নির্ভরতা

আপনার app/build.gradle.kts ফাইলে নিম্নলিখিত ডিপেন্ডেন্সিগুলো যোগ করুন। অ্যাসিঙ্ক্রোনাস ও নন-ব্লকিং এক্সিকিউশন সহজ করার জন্য, কোটলিন কোরাউটিন এবং হার্ডওয়্যার সারফেস হ্যান্ডলিংয়ের জন্য জেটপ্যাক মিডিয়া৩ অন্তর্ভুক্ত করুন।

dependencies {
    // Google Play services Media Enhancement Library (Beta)
    implementation("com.google.android.gms:play-services-media-effect-enhancement:16.0.0-beta04")
}

Google-এর Maven রিপোজিটরিতে play-services-media-effect-enhancement এর প্যাকেজের বিবরণ দেখুন।

এনহ্যান্সমেন্ট সেশনগুলো অ্যাসিঙ্কভাবে পরিচালনা করার জন্য আমরা কোটলিন কো-রুটিন ব্যবহারেরও পরামর্শ দিই।

// Kotlin coroutines for asynchronous API handling
  implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")
  implementation("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.7.3")

অ্যান্ড্রয়েড ম্যানিফেস্টের প্রয়োজনীয়তা

আপনার AndroidManifest.xml ফাইলের <application> ট্যাগের ভিতরে নিম্নলিখিত উপাদানগুলি যোগ করুন:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application>
        <!-- 1. Google Play services version for runtime compatibility checks -->
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
        <!-- 2. Declare OpenCL compute libraries for NPU/GPU neural acceleration -->
        <uses-native-library android:name="libOpenCL.so" android:required="false" />
        <uses-native-library android:name="libOpenCL-car.so" android:required="false" />
        <uses-native-library android:name="libOpenCL-pixel.so" android:required="false" />
        <!-- 3. Declare OpenGL ES for high-performance graphics rendering -->
        <uses-native-library android:name="libGLESv2.so" android:required="false" />
        <uses-native-library android:name="libGLESv3.so" android:required="false" />
    </application>
</manifest>

মিডিয়া এনহ্যান্সমেন্ট টাস্কের জন্য এনপিইউ (NPU) এবং জিপিইউ (GPU) নিউরাল অ্যাক্সিলারেশন সক্ষম করতে প্রয়োজনীয় নেটিভ কম্পিউট লাইব্রেরিগুলো ওপেনসিএল (OpenCL) সরবরাহ করে। এপিআই (API)-এর হার্ডওয়্যার অ্যাক্সিলারেশন ব্যবহারের জন্য আপনার ম্যানিফেস্টে এই লাইব্রেরিগুলো ঘোষণা করা একটি পূর্বশর্ত, যা উচ্চ-মানের ও স্বল্প-লেটেন্সির এনহ্যান্সমেন্ট সম্পাদনের জন্য অপরিহার্য। ওপেনসিএল সম্পর্কে আরও তথ্যের জন্য, ওপেনসিএল ইমপ্লিমেন্টেশনস (OpenCL implementations) দেখুন।

মিডিয়া এনহ্যান্সমেন্ট আউটপুটের উচ্চ-পারফরম্যান্স রেন্ডারিংয়ের জন্য প্রয়োজনীয় নেটিভ গ্রাফিক্স লাইব্রেরিগুলো OpenGL ES সরবরাহ করে। আপনার ম্যানিফেস্টে এই লাইব্রেরিগুলো ঘোষণা করা অপরিহার্য, যাতে রেন্ডারিং পাইপলাইন হার্ডওয়্যার-অ্যাক্সিলারেটেড সারফেসে প্রক্রিয়াজাত মিডিয়া কার্যকরভাবে প্রদর্শন করতে পারে। OpenGL সম্পর্কে তথ্যের জন্য, OpenGL API ডকুমেন্টেশন ওভারভিউ দেখুন।

বাধা এড়ানোর জন্য অ্যান্ড্রয়েড রেন্ডারিং পাইপলাইন অবশ্যই হার্ডওয়্যার-অ্যাক্সিলারেটেড হতে হবে। যদিও API 14+ টার্গেট করা অ্যাপগুলির জন্য এটি ডিফল্টরূপে সক্রিয় থাকে, আপনার <activity> ট্যাগের মধ্যে স্পষ্টভাবে android:hardwareAccelerated="true" সেট করুন।

ডিভাইসের সামঞ্জস্যতা এবং মডিউল সেটআপ

আপনার প্রাথমিক APK স্টোরেজ স্পেস বাঁচাতে গুগল প্লে সার্ভিসেস ডাইনামিকভাবে মেশিন লার্নিং মডেল সরবরাহ করে। কোনো উন্নতি সাধনের আগে, অ্যাপ্লিকেশনটিকে অবশ্যই EnhancementClient ব্যবহার করে হার্ডওয়্যার সাপোর্ট যাচাই করতে হবে এবং প্রয়োজনীয় মডেল ওয়েটগুলো স্থানীয়ভাবে ডাউনলোড ও ক্যাশ করা হয়েছে কিনা তা নিশ্চিত করতে হবে। প্রতিটি ডিভাইসের জন্য এটি একটি এককালীন প্রক্রিয়া।

suspendCancellableCoroutine ব্যবহার করে, আপনি আরও পরিচ্ছন্ন ও অনুক্রমিক নির্বাহের জন্য টাস্ক-ভিত্তিক ক্লায়েন্ট কলব্যাকগুলিকে স্ট্যান্ডার্ড কোটলিন সাসপেন্ডিং ফাংশনের মধ্যে র‍্যাপ করতে পারেন:

// Verifies if host hardware supports NPU/GPU acceleration
suspend fun EnhancementClient.isDeviceSupportedAsync(): Boolean = suspendCancellableCoroutine { continuation ->
    this.isDeviceSupported()
        .addOnSuccessListener { result -> continuation.resume(result) }
        .addOnFailureListener { exception -> continuation.resumeWithException(exception) }
}
// Verifies the presence of required neural network models
suspend fun EnhancementClient.isModuleInstalledAsync(): Boolean = suspendCancellableCoroutine { continuation ->
    this.isModuleInstalled()
        .addOnSuccessListener { result -> continuation.resume(result) }
        .addOnFailureListener { exception -> continuation.resumeWithException(exception) }
}