Başarılı Örnekler

SmileID,CameraX ile Kimlik Doğrulamayı 18.000'den Fazla Android Cihaz Türüne Nasıl Ölçeklendirdi?

Okuma süresi: 4 dk.
Donovan McMurray adlı kullanıcının profilini görüntüle
Donovan McMurray Geliştirici İlişkileri Mühendisi

Bankacılık ve SIM kaydı için kimlik doğrulama uygulamaları, sahtekarlığı ve deepfake'leri tespit etmek amacıyla net, yüksek çözünürlüklü yüz fotoğrafları gerektirir. Canlılık ve sahtekarlık önleme kontrolleri için yeterince net kareler yakalamak ve bunu yaparken düşük bellekli cihazların kilitlenmesini önlemek, Android kamera geliştiricilerinin sıkça karşılaştığı bir zorluktur.

Afrika'nın önde gelen kimlik doğrulama SDK'larından biri olan SmileID için bu zorluk, çeşitli donanım ekosistemleri nedeniyle iki katına çıkıyor. Android, SmileID'nin hedef cihaz pazar payının %85'ini temsil ediyor. Bu paya, işlemcileri son derece kısıtlı olan giriş seviyesi akıllı telefonlar, bilinmeyen bölgesel modeller ve dayanıklı özel satış noktası (POS) terminalleri de dahil.

harun_quote_card_green.png

SmileID, CameraX'i kullanmaya başlamadan önce standart ancak zorlu kamera mühendisliği engelleriyle karşılaştı: uzatılmış önizleme feed'leri, döndürülmüş sensör yönleri, bellek yetersizliği (OOM) kilitlenmeleri ve özel özgün donanım üreticisi (OEM) hataları. SmileID, temel Android SDK'larını CameraX'e taşıyarak bu zorlukları önemli bir iş avantajına dönüştürdü.

SmileID'ye göre, Android SDK'larını CameraX'e taşımak aşağıdaki sonuçları sağladı:

MetrikCameraX'e Geçişin Etkisi
SDK Kullanımındaki Artış2. yılda 20 kat (CameraX'ten önce 2-3 kat)
Doğrulama Başarı OranlarıSmileID'nin SDK'larını kullanan uygulamalarda %20 artış
Yakalama ÇözünürlüğüSıfır ağ ek yüküyle selfie/canlılık piksellerinde 4 kat artış
Cihaz Modeli Uyumluluğu18.000'den fazla Android cihaz türü desteklenir
Ölçeklendirilmiş Toplam Doğrulama Sayısı160 milyondan fazla kimlik doğrulama işlemi gerçekleştirildi

Zorluk: Parçalı Donanım ve Eski API Sorunları

SmileID'nin SDK'sı, kullanıcının kimliğini doğrulamak için cihaz üzerinde canlılık kontrolleri ve bulut tabanlı deepfake algılama için yüksek çözünürlüklü selfie kareleri yakalamalıdır. 

Eski Camera1 ve alt düzey Camera2 API uygulamalarında bunu tutarlı bir şekilde yapmak birkaç nedenden dolayı zordu: 

  • OEM Özelleştirmeleri ve Tuhaflıkları: Farklı üreticilerin cihazları, fiziksel kamera sensörü yönlerini farklı şekilde bildirerek döndürülmüş önizlemelere veya yanlış yönlendirilmiş yüz çekimlerine neden oluyordu.
  • En-boy oranı bozulmaları: Bütçe dostu cihazlarda belirli bir kare boyutu istendiğinde kamera önizlemesi genellikle dikey veya yatay olarak uzayarak kullanıcının yüzünü bozuyor ve biyometrik doğrulamayı kullanılamaz hale getiriyordu.
  • Yetersiz Bellek (OOM) Kilitlenmeleri: Düşük RAM'e (genellikle 1 GB veya daha az) sahip cihazlarda ham yüksek çözünürlüklü görüntülerin işlenmesi, genellikle önemli bellek ayırma kilitlenmelerine neden oluyordu.

Bu sorunlar nedeniyle SmileID'nin SDK kullanımındaki yıllık büyüme 2-3 kat ile sınırlı kaldı ve birçok doğrulama işlemi, cihaz üzerinde gerçek zamanlı canlılık kontrolleri yapmak yerine yüksek gecikmeli bir REST API üzerinden statik fotoğraflar yüklemeye geri dönmek zorunda kaldı.

Çözüm: CameraX ile Tutarlı Ardışık Düzenler 

SmileID, mobil SDK'larını CameraX'i kullanarak baştan tasarladı. CameraX, temel cihaz ekosisteminin karmaşıklığını ortadan kaldırmak ve tutarlı, yerel olarak yaşam döngüsüne duyarlı bir geliştirici arayüzü sağlamak için özel olarak tasarlanmıştır.

SmileID, CameraX'in temel kullanım alanlarını (özellikle Preview ve ImageAnalysis) kullanarak sağlam ve çift amaçlı bir kamera ardışık düzeni oluşturdu:

  • Önizleme: Kullanıcıya rehberlik etmek için kamera feed'inin mükemmel orantılı, gerçek zamanlı bir önizlemesini oluşturur.
  • ImageAnalysis: Otomatik canlılık ve kadrajda yüz algılama işlemlerini yürütmek ve doğrulanmış selfie karesini çıkarmak için kareleri yerel olarak gerçek zamanlı şekilde sürekli işler.

SmileID, bellek yetersizliği nedeniyle kilitlenmelere yol açmadan deepfake algılama için son derece net ayrıntılar yakalamak amacıyla CameraX'in modern ResolutionSelector API'sini doğrudan ImageAnalysis yapılandırmasına ekledi. Bu sayede geliştiriciler, hedef çözünürlük isteyebilir ve cihaz bu boyutu desteklemediğinde yedek kural seçebilir. Örneğin, aşağıdaki diyagram ve örnek yapılandırmada, ResolutionSelector'ın 1200x900 hedefi etrafındaki aday boyutları nasıl değerlendirdiği gösterilmektedir:

resolution_selector_diagram_vertical.png

Aşağıda, kendi uygulamanızda ResolutionSelector'ı STRATEGY_KEEP_ONLY_LATEST ile nasıl eşleyebileceğinizi gösteren örnek kod verilmiştir (netliğe öncelik vermek için FALLBACK_RULE_CLOSEST_HIGHER_THEN_LOWER, bellek kullanımını sınırlamak için FALLBACK_RULE_CLOSEST_LOWER_THEN_HIGHER kullanın):

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, yüksek yoğunluklu piksel kareleri isteyip bunları yerel olarak işleyerek çekilen selfie çözünürlüğünde 4 kat artış elde etti. SmileID, kırpılan yüz bölgesini cihazda sıkıştırarak ağ yükleme boyutunun önceki sistemleriyle aynı kalmasını da sağladı. Bu mimari, kullanıcıların hücresel veri maliyetlerini artırmadan makine öğrenimi modelleri için daha net veriler elde edilmesini sağladı.

CameraX, Donanım Farklılıklarını Nasıl Çözer?

SmileID, CameraX'i standartlaştırarak SDK'sını cihazlar arasında kararlı tutmak için iki katmanlı uyumluluk mühendisliğinden yararlanabildi:

1. Google'ın Kamera ve Medya Test Laboratuvarı

CameraX'in uyumluluğu, sürekli ve fiziksel donanım doğrulamasıyla desteklenir. Google'ın özel Kamera ve Medya Test Laboratuvarı'nda, her gün 190'dan fazla fiziksel Android cihaz modelinden oluşan devasa ve dönüşümlü bir matris üzerinde otomatik bir test paketi çalıştırılır. Farklı yonga setlerini, işletim sistemi sürümlerini ve donanım özelliklerini temsil eden cihazlar buna dahildir. 

Google'ın Kamera ve Medya Test Laboratuvarı, popüler cihazlarda daha tutarlı bir davranış elde etmek için kitaplık regresyonlarını üretim kodunuzu etkilemeden önce otomatik olarak yakalar.

2. Cihazlardaki Sorunlar İçin Otomatik Geçici Çözümler

Farklı Android cihazların farklı fiziksel sınırlamaları vardır. Bazıları özel pozlama ayarlarını yapamayabilir, bazıları ise belirli en boy oranlarını kullanırken ters çevrilmiş görüntü verileri bildirebilir. CameraX, geliştiricilerin kod tabanlarını cihaz üreticisine ve modeline göre karmaşık koşullu bloklarla kirletmesini önlemek için camera-camera2'de (DeviceQuirksLoader.kt) DeviceQuirks ve CameraQuirks gibi dahili cihaz özellikleri sınıflarını kullanır. CameraX, bilinen bir sorunu olan bir cihaz algıladığında otomatik olarak özel bir geçici çözüm uygular. SmileID, bu sayede SDK'sını kod tabanında cihaza özel yamalar kullanmadan 18.000'den fazla Android cihaz türünde güvenilir bir şekilde çalıştırabildi.

160 milyondan fazla doğrulama işlemi gerçekleştirildi

SmileID, CameraX'e geçerek harici uygulama geliştiricileri için SDK entegrasyonunu basitleştirdi. 

En boy oranı bozulmalarını, gecikmeli önizlemeleri ve ani OOM kilitlenmelerini ortadan kaldırmak, SDK'larını kullanan hizmetlerde doğrulama geçiş oranlarında %20 artış sağladı. Afrika'daki finans kurumları ve mobil para uygulamaları için geçiş oranlarında %20'lik bir artış, yüz binlerce meşru kullanıcının uygulamayı bırakmak yerine başarılı bir şekilde oryantasyon sürecini tamamlaması anlamına geliyor.

juma_quote_card_blue.png

Geliştiriciler bu durumu fark etti. CameraX tabanlı SDK'nın kolayca entegre edilebilmesi, ilk yıl kullanımda 15 kat artış sağladı ve bu oran ikinci yılda 20 kata ulaştı. SmileID, CameraX'i kullanarak bugüne kadar 160 milyondan fazla kimlik doğrulama işlemini başarıyla gerçekleştirdi.

CameraX becerisiyle uyumluluk hikayenizi oluşturma

Kameralar için geliştirme yapmak zor olmak zorunda değil. Android, ekibinizin SmileID'nin kullandığı CameraX kalıplarını benimsemesine yardımcı olmak için yapay zeka kodlama temsilcilerine yönelik CameraX becerisini kullanıma sundu. 

Geliştirme ortamınızda CameraX Skill'i kullandığınızda Gemini gibi yapay zeka kodlama asistanları; taşıma, yaşam döngüsü bağlama, ConcurrentCamera ve MlKitAnalyzer için mevcut CameraX kalıplarını uygular. İster çift kamera feed'i ayarlayın, ister PreviewView veya CameraXViewfinder ile önizleme yapılandırın ya da gerçek zamanlı makine öğrenimi (ML) analizini yönetin, CameraX becerisi temsilcinizi hassas ve üretime hazır kod oluşturmaya yönlendirir.

  • CameraX becerisini keşfedin: Android Developer Skills Directory'yi ziyaret edin veya Android KSA ile android skills add camerax komutunu çalıştırarak beceriyi yapay zeka kodlama aracınıza ekleyin.
  • CameraX'i kullanmaya başlama: Resmi CameraX belgelerine göz atın ve kamera deneyiminizi her yerde çalışır hale getirin.
Yazan:
Okumaya devam et