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

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

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

Gradle डिपेंडेंसी

अपनी app/build.gradle.kts फ़ाइल में ये डिपेंडेंसी जोड़ें. एसिंक्रोनस और नॉन-ब्लॉकिंग एक्ज़ीक्यूशन को आसान बनाने के लिए, हार्डवेयर सर्फ़ेस हैंडलिंग के लिए Kotlin कोरुटीन और 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) }
}