কেস স্টাডি

SmileID কীভাবে CameraX-এর সাহায্যে ১৮,০০০-এর বেশি Android ডিভাইসের ধরনের জন্য পরিচয় যাচাইকরণ স্কেল করেছে

৪ মিনিট লাগবে
Donovan McMurray-এর প্রোফাইল দেখুন
Donovan McMurray ডেভেলপার রিলেশনস ইঞ্জিনিয়ার

ব্যাঙ্কিং এবং সিম রেজিস্ট্রেশনের জন্য পরিচয় যাচাইকরণ অ্যাপে স্পুফিং এবং ডিপফেক শনাক্ত করতে মুখের স্পষ্ট, হাই-রেজোলিউশন ছবি প্রয়োজন। কম মেমরির ডিভাইসে ক্র্যাশ না করে, লাইভনেস ও অ্যান্টি-স্পুফিং চেক করার জন্য যথেষ্ট শার্প ফ্রেম ক্যাপচার করা, Android ক্যামেরা ডেভেলপারদের জন্য একটি সাধারণ চ্যালেঞ্জ।

SmileID-এর জন্য, যা আফ্রিকায় পরিচয় যাচাইকরণের একটি প্রধান SDK, এই চ্যালেঞ্জটি বিভিন্ন হার্ডওয়্যার ইকোসিস্টেমের কারণে দ্বিগুণ হয়ে যায়। Android SmileID-এর টার্গেট ডিভাইস মার্কেট শেয়ারের ৮৫% প্রতিনিধিত্ব করে, যার মধ্যে অত্যন্ত সীমাবদ্ধ প্রসেসর সহ এন্ট্রি-লেভেল স্মার্টফোন, অস্পষ্ট আঞ্চলিক মডেল এবং রাগডাইজড কাস্টম পয়েন্ট অফ সেল (POS) টার্মিনাল অন্তর্ভুক্ত।

harun_quote_card_green.png

CameraX ব্যবহার করার আগে, SmileID-কে সাধারণ কিন্তু কঠিন ক্যামেরা ইঞ্জিনিয়ারিং বাধার সম্মুখীন হতে হয়েছিল: স্ট্রেচড প্রিভিউ ফিড, রোটেটেড সেন্সর ওরিয়েন্টেশন, আউট-অফ-মেমরি (OOM) ক্র্যাশ এবং কাস্টম আসল ডিভাইস প্রস্তুতকারক (OEM) সংক্রান্ত সমস্যা। SmileID তাদের মূল Android SDK-কে CameraX-এ মাইগ্রেট করে এই চ্যালেঞ্জগুলিকে একটি বড় ব্যবসায়িক সুবিধায় রূপান্তরিত করেছে।

SmileID-এর মতে, তাদের Android SDK-কে CameraX-এ মাইগ্রেট করার ফলে নিম্নলিখিত ফলাফল পাওয়া গেছে:

মেট্রিকCameraX মাইগ্রেশনের প্রভাব
SDK অ্যাডপশন গ্রোথ২য় বছরে ২০ গুণ (CameraX-এর আগে ২-৩ গুণ থেকে বেশি)
যাচাইকরণ পাস রেটSmileID-এর SDK ব্যবহার করা অ্যাপের ক্ষেত্রে ২০% বৃদ্ধি
ক্যাপচার রেজোলিউশননেটওয়ার্ক ওভারহেড ছাড়াই সেলফি/লাইভনেস পিক্সেলে ৪ গুণ বৃদ্ধি
ডিভাইস মডেলের কম্প্যাটিবিলিটি১৮,০০০+ Android ডিভাইসের ধরন কাজ করে
মোট যাচাইকরণ স্কেল করা হয়েছে১৬০ মিলিয়নের বেশি পরিচয় যাচাইকরণ প্রসেস করা হয়েছে

চ্যালেঞ্জ: ফ্র্যাগমেন্টেড হার্ডওয়্যার ও লিগ্যাসি API-এর সমস্যা

ব্যবহারকারী নিজের পরিচয় যা দাবি করছেন তা সঠিক কিনা তা কনফার্ম করতে, SmileID-এর SDK-কে অবশ্যই অন-ডিভাইস লাইভনেস চেক ও ক্লাউড-ভিত্তিক ডিপফেক শনাক্তকরণের জন্য হাই-রেজোলিউশন সেলফি ফ্রেম ক্যাপচার করতে হবে। 

পুরনো Camera1 এবং লো-লেভেল Camera2 API ইমপ্লিমেন্টেশনের অধীনে, বিভিন্ন কারণে এটি ধারাবাহিকভাবে অর্জন করা কঠিন ছিল: 

  • OEM কাস্টমাইজেশন ও অদ্ভুত আচরণ: বিভিন্ন প্রস্তুতকারকের ডিভাইস ফিজিক্যাল ক্যামেরা সেন্সর ওরিয়েন্টেশন আলাদাভাবে রিপোর্ট করেছে, যার ফলে প্রিভিউ রোটেট হয়ে গেছে বা ভুল ওরিয়েন্টেশনে ফেস ক্যাপচার হয়েছে।
  • অ্যাস্পেক্ট রেশিও বিকৃতি: বাজেট ডিভাইসে নির্দিষ্ট ফ্রেম সাইজের অনুরোধ করার ফলে প্রায়শই ক্যামেরা প্রিভিউ উল্লম্ব বা অনুভূমিকভাবে প্রসারিত হয়, ব্যবহারকারীর মুখ বিকৃত হয় এবং বায়োমেট্রিক যাচাইকরণ অকেজো হয়ে যায়।
  • আউট-অফ-মেমরি (OOM) ক্র্যাশ: কম RAM (সাধারণত ১ জিবি বা তার কম) থাকা ডিভাইসে র হাই-রেজোলিউশন ছবি প্রসেস করার সময় প্রায়ই মারাত্মক মেমরি অ্যালোকেশন ক্র্যাশ হয়।

এইসব সমস্যার কারণে, SmileID-এর বছরের পর বছর SDK অ্যাডপশন বৃদ্ধির হার ২-৩ গুণেই সীমাবদ্ধ ছিল এবং অনেক যাচাইকরণের ক্ষেত্রে রিয়েল-টাইম অন-ডিভাইস লাইভনেস চেক চালানোর পরিবর্তে হাই-লেটেন্সি REST API-এর মাধ্যমে স্ট্যাটিক ফটো আপলোড করতে হয়েছিল।

সমাধান: CameraX-এর সাথে সামঞ্জস্যপূর্ণ পাইপলাইন 

SmileID তাদের মোবাইল SDK-কে CameraX ব্যবহার করে একদম শুরু থেকে নতুন করে তৈরি করেছে, যা বিশেষভাবে তৈরি করা হয়েছে যাতে ডিভাইসের ইকোসিস্টেমের জটিলতা থেকে দূরে থাকা যায় এবং একটি সামঞ্জস্যপূর্ণ, নেটিভ লাইফসাইকেল-অ্যাওয়ার ডেভেলপার ইন্টারফেস প্রদান করা যায়।

CameraX-এর মূল ব্যবহারের কেস (বিশেষ করে Preview এবং ImageAnalysis) ব্যবহার করে SmileID একটি শক্তিশালী, দ্বৈত-উদ্দেশ্য ক্যামেরা পাইপলাইন তৈরি করেছে:

  • প্রিভিউ: ব্যবহারকারীকে গাইড করার জন্য ক্যামেরা ফিডের একটি নিখুঁত অনুপাতে, রিয়েল-টাইম প্রিভিউ রেন্ডার করে।
  • ImageAnalysis: অটোমেটেড লাইভনেস ও ফেস-ইন-ফ্রেম শনাক্তকরণ এবং যাচাই করা সেলফি ফ্রেম এক্সট্র্যাক্ট করার জন্য রিয়েল-টাইমে স্থানীয়ভাবে ফ্রেম প্রসেস করে।

OOM ক্র্যাশ না ঘটিয়ে ডিপফেক শনাক্তকরণের জন্য অতি-তীক্ষ্ণ বিবরণ ক্যাপচার করতে, SmileID সরাসরি তাদের ImageAnalysis কনফিগারেশনে CameraX-এর আধুনিক ResolutionSelector API যোগ করেছে। এটি ডেভেলপারদের টার্গেট রেজোলিউশনের জন্য অনুরোধ করতে এবং কোনও ডিভাইস সেই সঠিক সাইজ সাপোর্ট না করলে একটি ফলব্যাক নিয়ম বেছে নিতে দেয়। যেমন, নিম্নলিখিত ডায়াগ্রাম ও স্যাম্পেল কনফিগারেশন থেকে বোঝা যায় যে ResolutionSelector কীভাবে ১২০০x৯০০ টার্গেটের কাছাকাছি ক্যান্ডিডেট সাইজ মূল্যায়ন করে:

resolution_selector_diagram_vertical.png

আপনার নিজের অ্যাপে STRATEGY_KEEP_ONLY_LATEST-এর সাথে ResolutionSelector কীভাবে পেয়ার করবেন তা দেখানোর জন্য এখানে সংশ্লিষ্ট স্যাম্পেল কোড দেওয়া হল (শার্পনেসকে অগ্রাধিকার দিতে 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 ডিভাইস মডেল-এর একটি বিশাল, রোটেটিং ম্যাট্রিক্স জুড়ে প্রতিদিন একটি অটোমেটেড টেস্ট স্যুট চালানো হয়। এর মধ্যে বিভিন্ন চিপসেট, OS ভার্সন ও হার্ডওয়্যার ক্ষমতা সম্পন্ন ডিভাইস অন্তর্ভুক্ত। 

জনপ্রিয় ডিভাইস জুড়ে আরও সামঞ্জস্যপূর্ণ আচরণ করার জন্য, Google-এর ক্যামেরা এবং মিডিয়া টেস্ট ল্যাব আপনার প্রোডাকশন কোডকে প্রভাবিত করার আগেই লাইব্রেরি রিগ্রেশন অটোমেটিক শনাক্ত করে।

২. ডিভাইস Quirks-এর জন্য অটোমেটিক ওয়ার্কঅ্যারাউন্ড

বিভিন্ন Android ডিভাইসের বিভিন্ন ফিজিক্যাল সীমাবদ্ধতা আছে। কিছু ডিভাইসে কাস্টম এক্সপোজার সেটিংস সেট করা নাও যেতে পারে, আবার কিছু ডিভাইসে নির্দিষ্ট অ্যাস্পেক্ট রেশিও ব্যবহার করার সময় উল্টো ছবি ডেটা রিপোর্ট করতে পারে। ডিভাইস প্রস্তুতকারক এবং মডেলের উপর ভিত্তি করে জটিল শর্তসাপেক্ষ ব্লক সহ ডেভেলপারদের তাদের কোডবেস দূষিত করা থেকে বিরত রাখতে, CameraX ক্যামেরা-ক্যামেরা2 (DeviceQuirksLoader.kt)-এ DeviceQuirks এবং CameraQuirks-এর মতো অভ্যন্তরীণ ডিভাইস কুইর্ক ক্লাস বজায় রাখে। CameraX যখন পরিচিত সমস্যা সহ কোনও ডিভাইস শনাক্ত করে, তখন এটি অটোমেটিক একটি কাস্টমাইজ করা সমাধান ইনজেক্ট করে। SmileID-এর ক্ষেত্রে, এর অর্থ হল তাদের SDK ১৮,০০০-এর বেশি Android ডিভাইসের ধরন জুড়ে নির্ভরযোগ্যভাবে কাজ করতে পারে, যার জন্য তাদের কোডবেসে ডিভাইস-নির্দিষ্ট প্যাচের প্রয়োজন হয় না।

১৬০ মিলিয়নের বেশি যাচাইকরণে স্কেল আপ করা

CameraX-এ মাইগ্রেট করার মাধ্যমে, SmileID এক্সটার্নাল অ্যাপ ডেভেলপারদের জন্য SDK ইন্টিগ্রেশন সহজ করেছে। 

অ্যাস্পেক্ট রেশিও বিকৃতি, ল্যাগি প্রিভিউ এবং হঠাৎ OOM ক্র্যাশ দূর করার ফলে SDK ব্যবহার করা পরিষেবার জন্য যাচাইকরণ পাস রেট ২০% বৃদ্ধি পেয়েছে। আফ্রিকা জুড়ে আর্থিক প্রতিষ্ঠান এবং মোবাইল মানি অ্যাপের জন্য, পাস রেট ২০% বৃদ্ধি পাওয়ার অর্থ হল, শত শত বৈধ ব্যবহারকারী মন্থন করার পরিবর্তে সফলভাবে অনবোর্ডিং করছেন।

juma_quote_card_blue.png

ডেভেলপাররা লক্ষ্য করেছেন। CameraX-ভিত্তিক SDK ইন্টিগ্রেট করার সুবিধা প্রথম বছরে ১৫ গুণ বেশি ব্যবহারকারীকে আকৃষ্ট করেছে, যা দ্বিতীয় বছরে ২০ গুণ বেশি ব্যবহারকারীকে আকৃষ্ট করেছে। আজ পর্যন্ত, SmileID, CameraX ব্যবহার করে ১৬০ মিলিয়নেরও বেশি পরিচয় যাচাইকরণ সফলভাবে প্রসেস করেছে।

CameraX স্কিলের মাধ্যমে আপনার কম্প্যাটিবিলিটি স্টোরি তৈরি করুন

ক্যামেরার জন্য ডেভেলপ করা কঠিন নয়। SmileID-এর ব্যবহার করা একই CameraX প্যাটার্ন আপনার টিমকে গ্রহণ করতে সাহায্য করার জন্য, Android AI কোডিং এজেন্টের জন্য CameraX স্কিল লঞ্চ করেছে। 

আপনার ডেভেলপমেন্ট এনভায়রনমেন্টে CameraX স্কিল ব্যবহার করলে, Gemini-র মতো AI কোডিং এজেন্ট মাইগ্রেশন, লাইফসাইকেল বাইন্ডিং, ConcurrentCamera এবং MlKitAnalyzer-এর জন্য বর্তমান CameraX প্যাটার্ন প্রয়োগ করে। আপনি ডুয়াল-ক্যামেরা ফিড সেট-আপ করছেন, PreviewView বা CameraXViewfinder-এর মাধ্যমে প্রিভিউ কনফিগার করছেন অথবা রিয়েল-টাইম মেশিন লার্নিং (ML) বিশ্লেষণ ম্যানেজ করছেন, যাই হোক না কেন, CameraX Skill আপনার এজেন্টকে সঠিক, প্রোডাকশন-রেডি কোড তৈরি করতে গাইড করে।

লিখেছেন:
পড়া চালিয়ে যান