از جلسه تقویت نور کم برای روشن و خاموش کردن «تقویت نور کم Google» استفاده کنید.
کاتلین
dependencies {
val low_light_boost_version = "16.0.1-beta04"
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.10.2")
implementation("com.google.android.gms:play-services-base:18.7.0")
implementation("com.google.android.gms:play-services-camera-low-light-boost:${low_light_boost_version}")
implementation("com.google.android.gms:play-services-tasks:18.3.0")
}
شیک
dependencies {
def low_light_boost_version = "16.0.1-beta04"
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.10.2'
implementation 'com.google.android.gms:play-services-base:18.7.0'
implementation 'com.google.android.gms:play-services-camera-low-light-boost:${low_light_boost_version}'
implementation 'com.google.android.gms:play-services-tasks:18.3.0'
}
LowLightBoostSession توسط بسته
com.google.android.gms.cameralowlight خدمات Google Play ارائه میشود. برای کسب اطلاعات درباره دسترسی به میاناهای برنامهسازی کاربردی خدمات Google Play، به اسناد خدمات Google Play مراجعه کنید.
ایجاد شیء فراخوانی برگشتی
وقتی جلسه تقویت نور کم را ایجاد میکنید، باید شیئی را به آن ارسال کنید که میانای LowLightBoostCallback را پیادهسازی میکند.
وقتی جلسه قطع یا نابود میشود، عملکردهای این شیء فراخوانی میشود. کد زیر نحوه ایجاد فراخوانی برگشتی را نشان میدهد:
کاتلین
private fun createLowLightBoostCallback(): LowLightBoostCallback = object : LowLightBoostCallback { override fun onSessionDestroyed() { Log.d(TAG, "onSessionDestroyed") lowLightBoostSession = null } override fun onSessionDisconnected(statusCode: Status) { Log.d(TAG, "onSessionDisconnected: error=$statusCode") lowLightBoostSession = null } }
جاوا
private LowLightBoostCallback createLowLightBoostCallback() {
LowLightBoostCallback lowLightBoostCallback = new LowLightBoostCallback() {
@Override
public void onSessionDestroyed() {
Log.d(TAG, "onSessionDestroyed");
lowLightBoostSession = null;
}
@Override
public void onSessionDisconnected(int statusCode) {
Log.d(TAG, "onSessionCreationFailed: error=" + statusCode);
lowLightBoostSession = null;
}
}
return lowLightBoostCallback;
}
نکات کلیدی درباره این کد
- این کد روشی خصوصی،
createLowLightBoostCallback()، را تعریف میکند که شیء فراخوانی را ایجاد میکند. وقتی جلسه تقویت نور کم را واقعاً ایجاد میکنید، همانطور که در ایجاد جلسه شرح داده شده است، آن روش را فراخوانی خواهید کرد. - وقتی جلسه قطع یا نابود میشود، فراخوانی برگشتی فراخوانده میشود. وقتی جلسه ایجاد میشود، این روش فراخوانی
نمیشود. برای بررسی اینکه جلسه با موفقیت ایجاد شده است یا نه، شیء
Taskرا که توسطLowLightBoostClient.createSessionبرگردانده شده است بررسی کنید.
ایجاد جلسه
برای ایجاد جلسه کمنور، روش
LowLightBoostClient.createSession را فراخوانی کنید.
کاتلین
val options = LowLightBoostOptions( previewSurface, cameraId, previewWidth, previewHeight, enableLowLightBoost ) launch { try { val lowLightBoostSession = lowLightBoostClient .createSession(options, createLowLightBoostCallback()).await() Log.d(TAG, "Session created successfully") // Get the surface from the LLB session; // give it to camera so camera can write frames to it. } catch (e: CancellationException) { Log.w(TAG, "Session creation was canceled", e) lowLightBoostSession = null } catch (e: ApiException) { Log.e(TAG, "Session creation failed with ApiException:", e) lowLightBoostSession = null } catch (e: Exception) { Log.e(TAG, "Session creation failed with Exception", e) lowLightBoostSession = null } }
جاوا
LowLightBoostOptions options = new LowLightBoostOptions(
previewSurface,
cameraId,
previewWidth,
previewHeight,
enableLowLightBoost);
lowLightBoostClient
.createSession(options, createLowLightBoostCallback())
.addOnSuccessListener(
lowLightBoostExecutor,
(session) -> {
Log.d(TAG, "Session created successfully");
// Get the surface from the LLB session;
// give it to camera so camera can write frames to it
})
.addOnFailureListener(
lowLightBoostExecutor,
(e) -> {
ApiException apiException = (ApiException) e;
Log.d(TAG, "Session creation failed: " + e);
lowLightBoostSession = null;
})
.addOnCompleteListener(
lowLightBoostExecutor,
(task) -> Log.d(TAG, "Session creation complete"))
.addOnCanceledListener(
lowLightBoostExecutor,
() -> {
throw new RuntimeException("Session creation canceled");
});
نکات کلیدی درباره این کد
- برای پیکربندی جلسه، شیء
LowLightBoostOptionsرا بهcreateSession()ارسال میکنید. این شیء مواردی مانند سطح هدف، شناسه دوربین مورد استفاده، و ابعاد پیشنمایش را مشخص میکند. - این کد فرض میکند که قبلاً اتصالی به دوربین Camera2 باز کردهاید،
و از آن اطلاعات برای تنظیم مقادیر
cameraId, previewWidth, previewHeightاستفاده کردهاید. برای اطلاعات بیشتر، به اسناد Camera2 مراجعه کنید. enableLowLightBoostمقدار بولی است که مشخص میکند آیا تقویت نور کم باید روشن یا خاموش شروع شود.-
createLowLightBoostCallbackروشی است که برای ایجاد شیء فراخوان مینویسید. وقتی اتصال جلسه قطع یا جلسه نابود شود، این شیء فراخوانده میشود. - روش
LowLightBoostClient.createSession()یک شیءTaskبرمیگرداند. از این شیء برای راهاندازی شنوندگان موفقیت و شکست استفاده میکنید. ویدیو را در شنونده موفقیت ضبط کنید. - میتوانید یک
Executorبرای اجرای شنوندگان مشخص کنید. اگرExecutorرا مشخص نکنید، شنوندگان در رشته اصلی اجرا میشوند. در این کد، فرض میکنیمlowLightBoostExecutorیکExecutorمناسب است.
قبول شدن در نتایج ضبط
«تقویت نور کم Google» برای دانستن میزان صحیح روشنایی که باید اعمال شود به فراداده دوربین خاصی نیاز دارد. باید TotalCaptureResult را به روش processCaptureResult() منتقل کنید. میتوانید TotalCaptureResult را در
روش فراخوانی onCaptureCompleted() دریافت کنید.
کاتلین
val captureCallback = object : CameraCaptureSession.CaptureCallback() { override fun onCaptureCompleted( session: CameraCaptureSession, request: CaptureRequest, result: TotalCaptureResult ) { super.onCaptureCompleted(session, request, result) lowLightBoostSession?.processCaptureResult(result) } }
جاوا
CameraCaptureSession.CaptureCallback captureCallback =
new CameraCaptureSession.CaptureCallback() {
@Override
public void onCaptureCompleted(
@NonNull CameraCaptureSession session,
@NonNull CaptureRequest request,
@NonNull TotalCaptureResult result) {
super.onCaptureCompleted(session, request, result)
if (lowLightBoostSession != null) {
lowLightBoostSession.processCaptureResult(result);
}
}
};
نکات کلیدی درباره این کد
- این کد فقط کد
CaptureCallbackمربوط به Google LLB را نشان میدهد. احتمالاً کد دیگری در این بازخوانیها خواهید داشت. - ارسال
TotalCaptureResultبه Google LLB امکان میدهد دادههای نوردهی خودکار و سایر فرادادههای لازم برای «بهبود در نور کم» را تجزیهوتحلیل کند تا تشخیص صحنه را پردازش کند و میزان بهبود اعمالشده بر قاب را تعیین کند. - هنگام ایجاد جلسه دوربین، باید شیء
captureCallbackرا ارسال کنید، برای مثال با `setSingleRepeatingRequest().
شروع پیشنمایش دوربین
پساز ایجاد جلسه نور کم، میتوانید پیشنمایش دوربین را شروع کنید
جاریسازی. باید این کار را در فراخوانی برگشتی onSuccess() که به جلسه نور کم ارسال میکنید انجام دهید، همانطور که در ایجاد جلسه توضیح داده شده است. کد زیر نحوه ضبط ویدیو را نشان میدهد:
کاتلین
MainActivity.this.lowLightBoostSession =
lowLightBoostSession
MainActivity.this.lowLightBoostSession
.setSceneDetectorCallback(
(lowLightBoostSession, boostStrength) -> {
Log.d(TAG, "onSceneBrightnessChanged: " +
"boostStrength=$boostStrength")
// boostStrength > 0.5 indicates a low light scene.
// Update UI accordingly.
},
lowLightBoostExecutor
)
try {
startCaptureSession(
lowLightBoostSession.getCameraSurface())
// Start a Camera2 session here. Pass the LLB surface
// to the camera so the camera can write frames to it.
} catch (e: CameraAccessException) {
Log.e(TAG, "Failed to start capture session", e)
// Must try again or start the capture session without LLB.
}
جاوا
MainActivity.this.lowLightBoostSession =
lowLightBoostSession;
MainActivity.this.lowLightBoostSession
.setSceneDetectorCallback(
(lowLightBoostSession, boostStrength) -> {
Log.d(TAG, "onSceneBrightnessChanged: " +
"boostStrength=" + boostStrength);
// boostStrength > 0.5 indicates a low light scene.
// Update UI accordingly.
},
lowLightBoostExecutor
);
try {
startCaptureSession(
lowLightBoostSession.getCameraSurface());
// Start a Camera2 session here. Pass the LLB surface
// to the camera so the camera can write frames to it.
} catch (CameraAccessException e) {
Log.e(TAG, "Failed to start capture session", e);
// Must try again or start the capture session without LLB.
}
نکات کلیدی درباره این کد
lowLightBoostSessionجلسهای است که در ایجاد جلسه ایجاد کردهاید.setSceneDetectorCallback()یک شیء بازخوانی را تعریف میکند که میانایSceneDetectorCallbackرا پیادهسازی میکند. وقتی روشنایی صحنه تغییر میکند، جلسه روشonSceneBrightnessChanged()آن شیء را فراخوانی میکند. پیادهسازی شما باید واسط کاربر دوربین را بهطور مناسب تنظیم کند.- میتوانید
Executorرا برای اجرای فراخوانی برگشتی مشخص کنید. اگرExecutorرا مشخص نکنید، فراخوانی برگشتی در رشته اصلی اجرا میشود. در این کد، فرض میکنیمlowLightBoostExecutorیکExecutorمناسب است. lowLightBoostSession.getCameraSurface()Surfaceرا با ویدیو ضبطشده برمیگرداند.
جلسه را رها کنید
وقتی دوربین دیگر فعال نیست، با فراخوانی LowLightBoostSession.release()، جلسه تقویت نور کم را رها کنید. بهویژه، باید مطمئن شوید که
وقتی فعالیتتان ازبین میرود، جلسه را رها کنید. میتوانید این کار را با فراخوانی
روش در روش onDestroy() فعالیتتان انجام دهید:
کاتلین
override protected void onDestroy() {
super.onDestroy()
if (lowLightBoostSession != null) {
lowLightBoostSession.release()
lowLightBoostSession = null
}
}
جاوا
@Override
protected void onDestroy() {
super.onDestroy();
if (lowLightBoostSession != null) {
lowLightBoostSession.release();
lowLightBoostSession = null;
}
}
نکات کلیدی درباره این کد
- پساز انتشار جلسه، نباید هیچکدام از روشهای آن را فراخوانی کنید. باید هر متغیری را که به جلسه اشاره میکند پاک کنید، همانطور که این کد انجام میدهد.