미디어 개선 API 시작하기

Media Enhancement API는 기기 내 GPU 가속을 사용하여 고품질의 지연 시간이 짧은 이미지 자동 개선 기능을 실행하는 강력한 도구입니다. 여기에는 자동 톤 매핑, 흐림 제거, 노이즈 제거, 업스케일링과 같은 기능이 포함됩니다.

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 코루틴을 사용하는 것이 좋습니다.

// 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 매니페스트 요구사항

<application> 파일의 AndroidManifest.xml 태그 내에 다음 요소를 추가합니다.

<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은 Media Enhancement 작업에 NPU 및 GPU 신경 가속을 사용 설정하는 데 필요한 네이티브 컴퓨팅 라이브러리를 제공합니다. 매니페스트에서 이러한 라이브러리를 선언하는 것은 고품질의 지연 시간이 짧은 개선을 실행하는 데 필수적인 하드웨어 가속을 활용하기 위한 API의 전제 조건입니다. OpenCL에 관한 자세한 내용은 OpenCL 구현을 참고하세요.

OpenGL ES는 미디어 개선 출력을 고성능으로 렌더링하는 데 필요한 네이티브 그래픽 라이브러리를 제공합니다. 매니페스트에서 이러한 라이브러리를 선언하는 것은 렌더링 파이프라인이 하드웨어 가속 노면에 처리된 미디어를 효과적으로 표시할 수 있도록 하는 데 필수적입니다. OpenGL에 관한 자세한 내용은 OpenGL API 문서 개요를 참고하세요.

병목 현상을 방지하려면 Android 렌더링 파이프라인이 하드웨어 가속되어야 합니다. API 14 이상을 타겟팅하는 앱의 경우 기본적으로 사용 설정되지만 android:hardwareAccelerated="true" 태그 내에서 <activity>를 명시적으로 설정합니다.

기기 호환성 및 모듈 설정

Google Play 서비스는 초기 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) }
}