مطالعات موردی

چگونه SmileID درستی‌سنجی هویت را با CameraX به بیش‌از ۱۸٬۰۰۰ نوع دستگاه Android مقیاس‌بندی کرد

زمان خواندن: ۴ دقیقه
مشاهده نمایه Donovan McMurray
Donovan McMurray مهندس روابط توسعه‌دهندگان

برنامه‌های درستی‌سنجی هویت برای امور بانکی و ثبت سیم‌کارت به عکس‌های واضح و با وضوح بالا از چهره نیاز دارند تا بتوانند جعل هویت و جعل عمیق را تشخیص دهند. ضبط قاب‌هایی که به‌اندازه کافی برای بررسی‌های زنده بودن و ضدجعل واضح باشند، بدون اینکه دستگاه‌های با حافظه کم ازکار بیفتند، چالشی رایج برای توسعه‌دهندگان دوربین Android است.

برای SmileID، یک کیت توسعه نرم‌افزار پیشرو درستی‌سنجی هویت در آفریقا، این چالش به‌دلیل بوم‌سازگان سخت‌افزاری متنوع دوبرابر می‌شود. Android ۸۵٪ از سهم بازار دستگاه‌های هدف SmileID را تشکیل می‌دهد، ازجمله تلفن‌های هوشمند سطح پایه با پردازنده‌های بسیار محدود، مدل‌های منطقه‌ای ناشناخته، و پایانه‌های فروش (POS) سفارشی مقاوم‌شده.

harun_quote_card_green.png

SmileID پیش‌از استفاده از CameraX با موانع مهندسی دوربین استاندارد اما دلهره‌آوری مواجه بود: فیدهای پیش‌نمایش کشیده‌شده، جهت‌های حسگر چرخیده‌شده، خرابی‌های کمبود حافظه (OOM)، و اشکال‌های سفارشی سازنده تجهیزات اصلی (OEM). SmileID با انتقال کیت‌های توسعه نرم‌افزار Android اصلی خود به CameraX، این چالش‌ها را به یک مزیت تجاری بزرگ تبدیل کرد.

طبق گفته SmileID، انتقال کیت‌های توسعه نرم‌افزار Android آن‌ها به CameraX نتایج زیر را به‌همراه داشت:

متریکتأثیر انتقال به CameraX
رشد استفاده از کیت توسعه نرم‌افزار۲۰ برابر تا سال دوم (افزایش از ۲ تا ۳ برابر قبل‌از CameraX)
نرخ قبولی درستی‌سنجی‫٪۲۰ افزایش برای برنامه‌هایی که از کیت‌های توسعه نرم‌افزار SmileID استفاده می‌کنند
وضوح ضبطافزایش ۴ برابری در پیکسل‌های سلفی/زنده بودن بدون سربار شبکه
سازگاری مدل دستگاهبیش‌از ۱۸٬۰۰۰ نوع دستگاه Android پشتیبانی می‌شود
کل درستی‌سنجی‌های مقیاس‌بندی‌شدهبیش‌از ۱۶۰ میلیون درستی‌سنجی هویت پردازش شده است

چالش: سخت‌افزار تکه‌تکه و دردسر API قدیمی

برای تأیید اینکه کاربر همان کسی است که ادعا می‌کند، کیت توسعه نرم‌افزار SmileID باید قاب‌های سلفی با وضوح بالا را برای بررسی‌های زنده بودن درون‌دستگاهی و تشخیص جعل عمیق مبتنی بر ابر ضبط کند. 

تحت پیاده‌سازی‌های Camera1 قدیمی و Camera2 API سطح پایین، دستیابی به این امر به‌طور مداوم به چند دلیل دشوار بود: 

  • سفارشی‌سازی‌ها و ویژگی‌های خاص OEM: دستگاه‌های سازندگان مختلف جهت‌های حسگر دوربین فیزیکی را به‌طور متفاوتی گزارش می‌کردند که منجر به پیش‌نمایش‌های چرخیده یا ضبط چهره با جهت نادرست می‌شد.
  • اعوجاج نسبت ابعادی: درخواست اندازه قاب خاص در دستگاه‌های ارزان‌قیمت اغلب باعث می‌شد پیش‌نمایش دوربین به‌صورت عمودی یا افقی کشیده شود، چهره کاربر را دچار اعوجاج کند، و درستی‌سنجی زیست‌سنجشی را بی‌فایده کند.
  • خرابی‌های ناشی از کمبود حافظه (OOM): پردازش تصاویر خام با وضوح بالا در دستگاه‌هایی با حافظه دسترسی تصادفی (RAM) کم (اغلب ۱ گیگابایت یا کمتر) مکرراً منجر به خرابی‌های مهلک در تخصیص حافظه می‌شد.

به‌دلیل این نقاط اصطکاک، رشد سال‌به‌سال پذیرش کیت توسعه نرم‌افزار SmileID به ۲ تا ۳ برابر محدود شد و بسیاری از درستی‌سنجی‌ها مجبور بودند به‌جای اجرای بررسی‌های زنده بودن هم‌زمان در دستگاه، به بارگذاری عکس‌های ثابت ازطریق میانای برنامه‌سازی کاربردی REST با تأخیر بالا برگردند.

راه‌حل: خطوط لوله سازگار با CameraX 

SmileID کیت‌های توسعه نرم‌افزار تلفن همراه خود را از ابتدا بااستفاده از CameraX بازطراحی کرد که به‌طور خاص برای انتزاع پیچیدگی بوم‌سازگان دستگاه زیربنایی و ارائه یک میانای توسعه‌دهنده سازگار و آگاه از چرخه حیات بومی ساخته شده است.

SmileID بااستفاده از موارد استفاده اصلی CameraX (به‌ویژه Preview و ImageAnalysis) یک خط لوله دوربین دومنظوره و قدرتمند ساخت:

  • پیش‌نمایش: پیش‌نمایش هم‌زمان و کاملاً متناسبی از فید دوربین را برای راهنمایی کاربر ارائه می‌دهد.
  • ImageAnalysis: به‌طور مداوم فریم‌ها را به‌صورت محلی و هم‌زمان پردازش می‌کند تا تشخیص خودکار زنده بودن و چهره در قاب را اجرا کند و فریم سلفی درستی‌سنجی‌شده را استخراج کند.

برای ثبت جزئیات بسیار واضح برای تشخیص جعل عمیق بدون ایجاد ازکارافتادگی‌های ناشی از کمبود حافظه، SmileID میانای برنامه‌سازی کاربردی مدرن ResolutionSelector CameraX را مستقیماً به پیکربندی ImageAnalysis خود اضافه کرد. این ویژگی به توسعه‌دهندگان امکان می‌دهد وضوح هدف را درخواست کنند و درصورتی‌که دستگاه از آن اندازه دقیق پشتیبانی نکند، قانون بازگشت را انتخاب کنند. برای مثال، نمودار و پیکربندی نمونه زیر نشان می‌دهد که ResolutionSelector چگونه اندازه‌های نامزد را در اطراف هدف ۱۲۰۰×۹۰۰ ارزیابی می‌کند:

resolution_selector_diagram_vertical.png

در اینجا کد نمونه مربوطه نشان می‌دهد که چگونه می‌توانید ResolutionSelector را با STRATEGY_KEEP_ONLY_LATEST در برنامه خود جفت کنید (از FALLBACK_RULE_CLOSEST_HIGHER_THEN_LOWER برای اولویت‌بندی وضوح یا FALLBACK_RULE_CLOSEST_LOWER_THEN_HIGHER برای محدود کردن استفاده از حافظه استفاده کنید):

import android.util.Size
import androidx.camera.core.CameraSelector
import androidx.camera.core.ImageAnalysis
import androidx.camera.core.Preview
import androidx.camera.core.resolutionselector.AspectRatioStrategy
import androidx.camera.core.resolutionselector.ResolutionSelector
import androidx.camera.core.resolutionselector.ResolutionStrategy
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.lifecycle.LifecycleOwner

fun configureCameraX(cameraProvider: ProcessCameraProvider, lifecycleOwner: LifecycleOwner, 
                     surfaceProvider: Preview.SurfaceProvider, 
                     executor: java.util.concurrent.Executor, analyzer: ImageAnalysis.Analyzer) {
    // 1. Define a resolution strategy requesting high quality (for example, 1200x900px) 
    // and selecting the closest higher (or, if unavailable, lower) resolution.
    val resolutionSelector = ResolutionSelector.Builder()
        .setResolutionStrategy(
            ResolutionStrategy(
                Size(1200, 900),
                ResolutionStrategy.FALLBACK_RULE_CLOSEST_HIGHER_THEN_LOWER
            )
        )
        .setAspectRatioStrategy(AspectRatioStrategy.RATIO_4_3_FALLBACK_AUTO_STRATEGY)
        .build()

    // 2. Configure the ImageAnalysis use case with the resolution selector
    // and a backpressure strategy that keeps the UI responsive on slow processors.
    val imageAnalysis = ImageAnalysis.Builder()
        .setResolutionSelector(resolutionSelector)        
        // Drops older frames if the device's CPU is still busy analyzing the previous one
        .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
        .build()

    // 3. Set up the preview stream and attach the Analyzer and SurfaceProvider
    imageAnalysis.setAnalyzer(executor, analyzer)
    val preview = Preview.Builder().build().also { it.surfaceProvider = surfaceProvider }

    // 4. Bind both use cases concurrently to the lifecycle provider
    try {
        cameraProvider.unbindAll()
        cameraProvider.bindToLifecycle(
            lifecycleOwner,
            CameraSelector.DEFAULT_FRONT_CAMERA,
            preview,
            imageAnalysis
        )
    } catch (exc: Exception) {
        // Handle binding failure safely
    }
}

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

نحوه حل تفاوت‌های سخت‌افزاری توسط CameraX

استانداردسازی در CameraX به این معنی بود که SmileID می‌توانست به دو لایه مهندسی سازگاری تکیه کند تا SDK خود را در دستگاه‌های مختلف پایدار نگه دارد:

۱. آزمایشگاه تست دوربین و رسانه Google

سازگاری CameraX با درستی‌سنجی سخت‌افزاری فیزیکی و مداوم پشتیبانی می‌شود. در آزمایشگاه تست رسانه و دوربین اختصاصی Google، یک مجموعه آزمون خودکارشده به‌طور روزانه در یک ماتریس چرخشی عظیم از بیش‌از ۱۹۰ مدل دستگاه Android فیزیکی اجرا می‌شود. این شامل دستگاه‌هایی می‌شود که مجموعه تراشه‌ها، نسخه‌های سیستم‌عامل، و قابلیت‌های سخت‌افزاری مختلفی دارند. 

برای حرکت به‌سمت رفتار سازگارتر در دستگاه‌های پرطرفدار، «آزمایشگاه آزمایش رسانه و دوربین» Google به‌طور خودکار پس‌رفت‌های کتابخانه را قبل‌از اینکه بتوانند بر کد تولید شما تأثیر بگذارند، شناسایی می‌کند.

۲. راه‌حل‌های خودکار برای مشکلات دستگاه

دستگاه‌های Android مختلف محدودیت‌های فیزیکی متفاوتی دارند. برخی‌از آن‌ها ممکن است نتوانند تنظیمات نوردهی سفارشی را اعمال کنند، درحالی‌که برخی دیگر ممکن است هنگام استفاده از نسبت‌های ابعادی خاص، داده‌های تصویر وارونه را گزارش کنند. برای جلوگیری از آلوده شدن پایگاه‌های کد توسعه‌دهندگان با بلوک‌های شرطی پیچیده براساس سازنده و مدل دستگاه، CameraX کلاس‌های داخلی ناهنجاری دستگاه مانند DeviceQuirks و CameraQuirks را در camera-camera2 (DeviceQuirksLoader.kt) حفظ می‌کند. وقتی CameraX دستگاهی را با مشکل شناخته‌شده‌ای شناسایی می‌کند، به‌طور خودکار راه‌حل سفارشی‌شده‌ای را تزریق می‌کند. برای SmileID، این به این معنی بود که کیت توسعه نرم‌افزار آن‌ها می‌توانست به‌طور قابل‌اعتماد در بیش‌از ۱۸٬۰۰۰ نوع دستگاه Android بدون نیاز به وصله‌های خاص دستگاه در پایگاه کد آن‌ها کار کند.

افزایش مقیاس به بیش‌از ۱۶۰ میلیون درستی‌سنجی

SmileID با انتقال به CameraX، ادغام کیت توسعه نرم‌افزار را برای توسعه‌دهندگان نرم‌افزار خارجی ساده کرد. 

حذف اعوجاج نسبت ابعادی، پیش‌نمایش‌های با تأخیر، و ازکارافتادن‌های ناگهانی به‌دلیل کمبود حافظه باعث افزایش ۲۰ درصدی نرخ قبولی در درستی‌سنجی برای سرویس‌هایی شد که از کیت‌های توسعه نرم‌افزار آن‌ها استفاده می‌کنند. برای مؤسسه‌های مالی و برنامه‌های پول همراه در سراسر آفریقا، افزایش ۲۰ درصدی در نرخ قبولی به‌معنای صدها هزار کاربر قانونی است که به‌جای ریزش، با موفقیت وارد سیستم می‌شوند.

juma_quote_card_blue.png

توسعه‌دهندگان متوجه شدند. سهولت ادغام کیت توسعه نرم‌افزار مبتنی بر CameraX باعث شد استفاده از آن در سال اول ۱۵ برابر افزایش یابد و در سال دوم به ۲۰ برابر برسد. تاکنون، SmileID بااستفاده از CameraX بیش‌از ۱۶۰ میلیون درستی‌سنجی هویت را با موفقیت پردازش کرده است.

Build Your Compatibility Story with the CameraX Skill

توسعه برای دوربین‌ها نباید سخت باشد. برای کمک به تیم شما در اتخاذ همان الگوهای CameraX که SmileID استفاده کرده است، Android مهارت CameraX را برای نمایندگان کدنویسی هوش مصنوعی راه‌اندازی کرده است. 

وقتی از CameraX Skill در محیط توسعه نرم‌افزار خود استفاده می‌کنید، عوامل کدنویسی هوش مصنوعی مانند Gemini الگوهای فعلی CameraX را برای انتقال، اتصال چرخه حیات، ConcurrentCamera، و MlKitAnalyzer اعمال می‌کنند. چه درحال راه‌اندازی فیدهای دوربین دوگانه باشید، چه درحال پیکربندی پیش‌نمایش با PreviewView یا CameraXViewfinder باشید، یا درحال مدیریت تجزیه‌وتحلیل یادگیری ماشین (ML) هم‌زمان باشید، «مهارت CameraX» نماینده شما را برای تولید کد دقیق و آماده تولید راهنمایی می‌کند.

نویسنده:
ادامه خواندن