
بروزرسانی: 01 اردیبهشت 1404
چگونه اینستاگرام کاربران را قادر می سازد تا عکس های خیره کننده ای در نور کم بگیرند

اینستاگرام، سرویس محبوب شبکه اجتماعی اشتراک گذاری ع، و ویدیو، دائماً کاربران را با بهترین تجربه دوربین در ک، خود خوشحال می کند. اخیراً اینستاگرام بهبود دیگری را در اندروید با اجرای Night Mode ارائه کرده است.
همانطور که دستگاه ها و دوربین های آنها بیشتر و بیشتر توانمند می شوند، کاربران انتظار دارند تصاویر با کیفیت بهتری در تنظیمات متنوع تری داشته باشند. خواه یک شب بیرون رفتن با دوستان باشد یا آرامش بلافاصله پس از به خواب رفتن نوزاد، لحظات خاصی که کاربران می خواهند ثبت کنند اغلب شرایط نوری ایده آلی ندارند.
اکنون، هنگامی که کاربران اینستاگرام در اندروید در محیط های کم نور ع، می گیرند، نماد ماه را مشاهده می کنند که به آنها امکان می دهد حالت شب را برای کیفیت بهتر تصویر فعال کنند. این ویژگی در حال حاضر برای کاربران با هر دستگاه پی،ل از سری 6 به بالا، Samsung Galaxy S24Ultra یا Samsung Flip6 یا Fold6 در دسترس است و دستگاه های بیشتری نیز باید دنبال شوند.

استفاده از فناوری های دوربین خاص دستگاه
اندروید به برنامه ها امکان می دهد از ویژگی های دوربین خاص دستگاه استفاده کنند Camera Extensions API. چارچوب Extensions در حال حاضر عملکردهایی مانند حالت شب را برای ضبط تصاویر در نور کم، بوکه برای اعمال تاری پس زمینه به سبک پرتره و روتوش چهره برای فیلترهای زیبایی ارائه می دهد. همه این ویژگی ها توسط سازندگان تج،ات اصلی (OEMs) به منظور به حدا،ر رساندن کیفیت هر ویژگی در سخت افزاری که روی آن اجرا می شود، پیاده سازی می شوند.

علاوه بر این، افشای این قابلیت خاص OEM از طریق Extensions API به توسعه دهندگان اجازه می دهد تا از یک پیاده سازی ثابت در همه این دستگاه ها استفاده کنند و بهترین های هر دو جهان را به دست آورند: پیاده سازی هایی که برای طیف وسیعی از دستگاه ها با سطح API یکپارچه تنظیم شده اند. به گفته نیلش پاتل، مهندس نرم افزار در اینستاگرام، «برای میلیاردها کاربر متا، نوشتن کد سفارشی برای هر دستگاه جدید به سادگی مقیاس پذیر نیست. همچنین هنگامی که کاربران متا برنامه را دانلود می کنند، اندازه برنامه غیر ضروری را اضافه می کند. از این رو دستورالعمل ما این است که "یک بار بنویسید تا به میلیاردها تبدیل شوید" و از API های پلتفرم حمایت کنید.
بیشتر و بیشتر OEM ها از برنامه های افزودنی نیز پشتیب، می کنند! در حال حاضر بیش از 120 دستگاه مختلف وجود دارد که از افزونه های دوربین پشتیب، می کنند که نشان دهنده بیش از 75 میلیون کاربر فعال ماهانه است. هرگز زمان بهتری برای ادغام برنامه های افزودنی در برنامه Android خود وجود نداشته است تا بهترین تجربه دوربین ممکن را به کاربران خود ارائه دهید.
تاثیر در اینستاگرام
نتایج اضافه شدن حالت شب به اینستاگرام برای کاربران اینستاگرام بسیار مثبت بوده است. جین کوی، یک مهندس شریک در اینستاگرام، گفت: «حالت شب تعداد ع، های گرفته شده و اشتراک گذاری شده با دوربین اینستاگرام را افزایش داده است، زیرا کیفیت ع، ها در حال حاضر در صحنه های کم نور به وضوح بهتر است».

ع، های زیر را مقایسه کنید تا متوجه شوید که حالت شب چقدر تفاوت دارد. ع، اول در اینستاگرام با حالت شب خاموش، ع، دوم در اینستاگرام با حالت شب روشن گرفته شده است، و ع، سوم با اپلیکیشن دوربین اصلی با فعال بودن پردازش کم نور خود دستگاه گرفته شده است.

تضمین کیفیت از طریق مجموعه تست تصویر (ITS)
مجموعه تست تصویر دوربین اندروید (ITS) چارچوبی برای آزمایش تصاویر از دوربین های اندرویدی است. تست های ITS دوربین را پیکربندی می کنند و ع، هایی را برای تأیید داده های تصویر مورد انتظار می گیرند. این تست ها کاربردی هستند و اطمینان می دهند که ویژگی های دوربین تبلیغاتی مطابق انتظار عمل می کنند. تبلتی که در یک طرف جعبه ITS نصب شده است، نمودار تست را نمایش می دهد. دستگاه مورد آزمایش در طرف مقابل جعبه ITS نصب شده است.
دستگاه ها باید آزمایش های ITS را برای هر ویژگی که دستگاه ادعا می کند برای استفاده از برنامه ها پشتیب، می کند، از جمله آزمایش هایی که برای برنامه افزودنی دوربین حالت شب داریم، پشت سر بگذارند.

تیم دوربین Android با چالش اطمینان از عملکرد پیوسته ویژگی Night Mode Camera Extension در همه دستگاه ها به روشی مقیاس پذیر مواجه شد. این امر مست،م ایجاد یک محیط آزمایشی با نور بسیار کم و محدوده دینامیکی گسترده بود. این پیکربندی برای شبیه سازی سناریوهای نورپردازی در دنیای واقعی، مانند شهری در شب با سطوح مختلف روشنایی و سایه، یا روشنایی جوی یک رستوران ضروری بود.
اولین قدم برای طراحی آزمایش، تعریف شرایط نوری خاص برای شبیه سازی بود. آزمایش مید، با نورسنج در مکان ها و شرایط نوری مختلف برای تعیین سطح لو، هدف انجام شد. هدف این بود که اطمینان حاصل شود که دوربین می تواند تصاویر واضحی را در شرایط کم نور ثبت کند، که منجر به ایجاد 3 لو، به ،وان سطح لو، هدف شد. شکل زیر شرایط مختلف نور و مقدار لو، مربوطه آنها را نشان می دهد.

گام بعدی ایجاد یک نمودار آزمایشی برای اندازه گیری دقیق محدوده دینامیکی گسترده در یک محیط کم نور بود. این تیم بر روی چندین نمودار آزمایشی توسعه و تکرار ،د و به نمودار آزمایشی زیر رسیدند که در زیر نشان داده شده است. این نمودار شبکه ای از مربع ها را در سایه های مختلف خا،تری مرتب می کند. یک طرح کلی قرمز منطقه آزمایشی را برای برش مشخص می کند. این امکان حذف مناطق خارجی تیره تر را فراهم می کند. این شبکه از الگوی منحنی هیلبرت پیروی می کند تا تغییرات ناگه، نور یا تاریکی را به حداقل برساند. این طراحی امکان اندازه گیری کمی و شبیه سازی طیف وسیعی از شرایط نور را فراهم می کند.

نمودار آزمایشی با استفاده از Night Mode Camera Extension در شرایط کم نور تصویری می گیرد. تصویر برای ارزیابی بهبود سایه ها و تون های می، و در عین حال اطمینان از اشباع نشدن نقاط برجسته استفاده می شود. این ارزیابی شامل دو معیار است: اطمینان حاصل شود که میانگین مقدار لوما شش تاریک ترین جعبه حداقل 85 است، و اطمینان حاصل شود که میانگین کنتراست لوما بین این جعبه ها حداقل 17 است. شکل زیر نتایج آزمایش و نمودار را نشان می دهد.

با استفاده از زیرساخت موجود ITS، تیم Android Camera توانست ع، های پیوسته و با کیفیت Night Mode Camera Extension را ارائه دهد. این به توسعه دهندگان برنامه اعتماد به نفس می دهد تا ع، های حالت شب را برای کاربران خود یکپارچه و فعال کنند. همچنین به OEM ها اجازه می دهد تا پیاده سازی های خود را تأیید کنند و اطمینان حاصل کنند که کاربران بهترین کیفیت را دریافت می کنند.
نحوه پیاده سازی حالت شب با افزونه های دوربین
برنامه های افزودنی دوربین برای برنامه های ساخته شده با Camera2 یا CameraX در دسترس هستند. در این بخش، هر یک از ویژگی هایی که اینستاگرام پیاده سازی کرده است را بررسی می کنیم. نمونه های کد از CameraX استفاده می کنند، اما در هر مرحله پیوندهایی به مستندات Camera2 پیدا خواهید کرد.
فعال ، برنامه افزودنی حالت شب
حالت شب شامل ،یب نوردهی های متعدد در یک ع، ثابت برای ع، هایی با کیفیت بهتر در محیط های کم نور است. بنابراین ابتدا باید در دسترس بودن حالت شب را بررسی کنید و به سیستم دوربین بگویید که یک جلسه Extension دوربین را شروع کند. با CameraX، این کار با یک انجام می شود Extensions Manager به جای استاندارد مدیر دوربین.
private suspend fun setUpCamera() { // Obtain an instance of a process camera provider. The camera provider // provides access to the set of cameras ،ociated with the device. // The camera obtained from the provider will be bound to the activity lifecycle. val cameraProvider = ProcessCameraProvider.getInstance(application).await() // Obtain an instance of the extensions manager. The extensions manager // enables a camera to use extension capabilities available on the device. val extensionsManager = ExtensionsManager.getInstanceAsync( application, cameraProvider).await() // Select the camera. val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA // Query if extension is available. Not all devices will support // extensions or might only support a subset of extensions. if (extensionsManager.isExtensionAvailable(cameraSelector, ExtensionMode.NIGHT)) { // Unbind all use cases before enabling different extension modes. try { cameraProvider.unbindAll() // Retrieve a night extension enabled camera selector val nightCameraSelector = extensionsManager.getExtensionEnabledCameraSelector( cameraSelector, ExtensionMode.NIGHT ) // Bind image capture and preview use cases with the extension enabled camera // selector. val imageCapture = ImageCapture.Builder().build() val preview = Preview.Builder().build() // Connect the preview to receive the surface the camera outputs the frames // to. This will allow displaying the camera frames in either a TextureView // or SurfaceView. The SurfaceProvider can be obtained from the PreviewView. preview.setSurfaceProvider(surfaceProvider) // Returns an instance of the camera bound to the lifecycle // Use this camera object to control various operations with the camera // Example: flash, zoom, focus metering etc. val camera = cameraProvider.bindToLifecycle( lifecycleOwner, nightCameraSelector, imageCapture, preview ) } catch (e: Exception) { Log.e(TAG, "Use case binding failed", e) } } else { // In the case where the extension isn\'t available, you s،uld set up // CameraX normally with non-extension-enabled CameraSelector. }}
برای انجام این کار در Camera2، به ،مت زیر مراجعه کنید ایجاد یک CameraExtensionSession با Camera2 Extensions API راهنمای
پیاده سازی نوار پیشرفت و تصویر PostView
برای تجربه کاربری حتی بالاتر، می تو،د در حین پردازش تصویر حالت شب، بازخورد ارائه دهید. در اندروید 14، برای پیشرفت و مشاهده پست، تماس های برگشتی اضافه کردیم، که یک تصویر موقت قبل از تکمیل پردازش حالت شب است. کد زیر نحوه استفاده از این تماس های برگشتی را نشان می دهد takePicture() روش پیاده سازی واقعی برای به روز رس، رابط کاربری بسیار وابسته به برنامه است، بنابراین ما کد به روز رس، رابط کاربری واقعی را به شما واگذار می کنیم.
// When setting up the ImageCapture.Builder, set postviewEnabled and // posviewResolutionSelector in order to get a PostView bitmap in the// onPostviewBitmapAvailable callback when takePicture() is called.val cameraInfo = cameraProvider.getCameraInfo(cameraSelector)val isPostviewSupported = ImageCapture.getImageCaptureCapabilities(cameraInfo).isPostviewSupportedval postviewResolutionSelector = ResolutionSelector.Builder() .setAspectRatioStrategy(AspectRatioStrategy( AspectRatioStrategy.RATIO_16_9_FALLBACK_AUTO_STRATEGY, AspectRatioStrategy.FALLBACK_RULE_AUTO)) .setResolutionStrategy(ResolutionStrategy( previewSize, ResolutionStrategy.FALLBACK_RULE_CLOSEST_LOWER_THEN_HIGHER )) .build()imageCapture = ImageCapture.Builder() .setTargetAspectRatio(AspectRatio.RATIO_16_9) .setPostviewEnabled(isPostviewSupported) .setPostviewResolutionSelector(postviewResolutionSelector) .build()// When the Night Mode p،to is being taken, define these additional callbacks// to implement PostView and a progress indicator in your app.imageCapture.takePicture( outputFileOptions, Dispatchers.Default.asExecutor(), object : ImageCapture.OnImageSavedCallback { override fun onPostviewBitmapAvailable(bitmap: Bitmap) { // Add the Bitmap to your UI as a place،lder while the final result is processed } override fun onCaptureProcessProgressed(progress: Int) { // Use the progress value to update your UI; values go from 0 to 100. } })
برای انجام این کار در Camera2، نگاه کنید به CameraFragment.kt فایل در برنامه نمونه Camera2Extensions.
پیاده سازی نشانگر نماد ماه
یکی دیگر از لمس های طراحی متمرکز بر کاربر، نشان دادن نماد ماه است تا به کاربر اطلاع دهد که تصویربرداری از حالت شب اتفاق خواهد افتاد. همچنین ایده خوبی است که به کاربر اجازه دهید روی نماد ماه ضربه بزند تا ضبط حالت شب را غیرفعال کند. یک API آینده در Android 16 در سال آینده وجود دارد که به شما اطلاع می دهد زم، که دستگاه در محیط کم نور قرار دارد.
در اینجا مقادیر ممکن برای Night Mode Indicator API آمده است:
- دوربین قادر به تشخیص مطمئن شرایط نور صحنه فعلی نیست تا مشخص کند که آیا یک ع، از ضبط برنامه افزودنی دوربین در حالت شب سود می برد یا خیر.
ناشناخته
- دوربین شرایط نوری را شناسایی کرده است که به اندازه کافی روشن هستند. برنامه افزودنی دوربین حالت شب در دسترس است اما ممکن است نتواند تنظیمات دوربین را برای گرفتن ع، با کیفیت بالاتر بهینه کند.
خاموش
- دوربین شرایط نور کم را تشخیص داده است. توصیه می شود از Night Mode Camera Extension برای بهینه سازی تنظیمات دوربین برای گرفتن ع،ی با کیفیت بالا در تاریکی استفاده کنید.
روشن
مراحل بعدی
اطلاعات بیشتر در مورد API های دوربین اندروید را در این مقاله بخو،د راهنمای دوربین 2 و راهنمای CameraX. هنگامی که اصول اولیه را به دست آوردید، آن را بررسی کنید دوربین Android و Media Dev Center تا توسعه برنامه دوربین خود را به سطح بعدی ارتقا دهید. برای جزئیات بیشتر در مورد ویژگی های آینده اندروید، مانند Night Mode Indicator API، با آن شروع کنید پیش نمایش اندروید 16 برنامه
منبع: http://android-developers.googleblog.com/2024/12/instagram-on-android-low-light-p،tos.html