Media Enhancement API का इस्तेमाल शुरू करना

मीडिया एन्हांसमेंट एपीआई एक दमदार टूल है. यह उपयोगकर्ता के डिवाइस पर मौजूद जीपीयू की मदद से, इमेज को बेहतर बनाने की सुविधा देता है. इसमें इंतज़ार का समय कम लगता है और इमेज की क्वालिटी भी अच्छी होती है. इसमें टोन मैपिंग, अनब्लरिंग, नॉइज़ कम करना, और अपस्केलिंग जैसी सुविधाएं शामिल हैं.

एपीआई शुरू करने से पहले, आपको अपने प्रोजेक्ट की डिपेंडेंसी कॉन्फ़िगर करनी होंगी. साथ ही, अपने मेनिफ़ेस्ट में हार्डवेयर ऐक्सलरेशन की ज़रूरी शर्तें बतानी होंगी. इन कॉन्फ़िगरेशन को स्किप करने की वजह से, GLOBAL_INIT_FAILED रनटाइम गड़बड़ियां होती हैं.

Gradle डिपेंडेंसी

अपनी app/build.gradle.kts फ़ाइल में ये डिपेंडेंसी जोड़ें. एसिंक्रोनस और नॉन-ब्लॉकिंग एक्ज़ीक्यूशन को आसान बनाने के लिए, हार्डवेयर सर्फ़ेस हैंडलिंग के लिए Kotlin coroutines और Jetpack Media3 को शामिल करें.

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 का इस्तेमाल करें.

// 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")

Android मेनिफ़ेस्ट से जुड़ी ज़रूरी शर्तें

अपनी 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>

OpenCL, मीडिया को बेहतर बनाने से जुड़े टास्क के लिए, एनपीयू और जीपीयू न्यूरल ऐक्सेलरेटर को चालू करने के लिए ज़रूरी नेटिव कंप्यूट लाइब्रेरी उपलब्ध कराता है. हार्डवेयर ऐक्सलरेशन का फ़ायदा पाने के लिए, इन लाइब्रेरी को अपने मेनिफ़ेस्ट में शामिल करना ज़रूरी है. हार्डवेयर ऐक्सलरेशन, कम समय में बेहतर क्वालिटी वाले बदलाव करने के लिए ज़रूरी है. OpenCL के बारे में ज़्यादा जानने के लिए, OpenCL implementations देखें.

OpenGL ES, नेटिव ग्राफ़िक्स लाइब्रेरी उपलब्ध कराता है. इनकी ज़रूरत, मीडिया को बेहतर बनाने वाले आउटपुट को बेहतर तरीके से रेंडर करने के लिए होती है. इन लाइब्रेरी को अपने मेनिफ़ेस्ट में शामिल करना ज़रूरी है. इससे यह पक्का किया जा सकता है कि रेंडरिंग पाइपलाइन, प्रोसेस किए गए मीडिया को हार्डवेयर की मदद से तेज़ी से काम करने वाली सतहों पर असरदार तरीके से दिखा सके. OpenGL के बारे में जानकारी पाने के लिए, OpenGL API के दस्तावेज़ की खास जानकारी देखें.

बॉटलनैक से बचने के लिए, Android रेंडरिंग पाइपलाइन को हार्डवेयर की मदद से तेज़ किया जाना चाहिए. यह सुविधा, API 14 या इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए डिफ़ॉल्ट रूप से चालू होती है. हालांकि, इसे android:hardwareAccelerated="true" टैग में जाकर साफ़ तौर पर सेट किया जा सकता है<activity>.

डिवाइस के साथ काम करने की सुविधा और मॉड्यूल सेटअप करना

Google Play services, मशीन लर्निंग मॉडल को डाइनैमिक तरीके से डिलीवर करता है, ताकि आपके शुरुआती APK का स्टोरेज स्पेस बचाया जा सके. सुधार करने से पहले, ऐप्लिकेशन को EnhancementClient का इस्तेमाल करना होगा. इससे यह पुष्टि की जा सकेगी कि हार्डवेयर काम कर रहा है. साथ ही, यह पक्का किया जा सकेगा कि ज़रूरी मॉडल वेट डाउनलोड हो गए हैं और स्थानीय तौर पर कैश मेमोरी में सेव हो गए हैं. यह प्रोसेस, हर डिवाइस के लिए सिर्फ़ एक बार करनी होती है.

suspendCancellableCoroutine का इस्तेमाल करके, टास्क पर आधारित क्लाइंट कॉलबैक को स्टैंडर्ड Kotlin सस्पेंडिंग फ़ंक्शन में रैप किया जा सकता है. इससे, कोड को साफ़-सुथरे तरीके से क्रमवार तरीके से एक्ज़ीक्यूट किया जा सकता है:

// 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) }
}