Studia przypadków

Jak firma SmileID przeskalowała weryfikację tożsamości na ponad 18 tys. typów urządzeń z Androidem za pomocą CameraX

Czas czytania: 4 min
Wyświetl profil Donovana McMurraya
Donovan McMurray Inżynier ds. relacji z deweloperami

Aplikacje do weryfikacji tożsamości na potrzeby bankowości i rejestracji karty SIM wymagają wyraźnych zdjęć twarzy w wysokiej rozdzielczości, aby wykrywać próby podszywania się i deepfake. Przechwytywanie klatek o wystarczającej ostrości do weryfikacji aktywności i ochrony przed oszustwami bez powodowania awarii urządzeń z małą ilością pamięci to częste wyzwanie dla deweloperów aplikacji do obsługi aparatu na Androida.

W przypadku SmileID, wiodącego pakietu SDK do weryfikacji tożsamości w Afryce, to wyzwanie jest jeszcze większe ze względu na zróżnicowany ekosystem sprzętowy. Android stanowi 85% udziału w rynku urządzeń docelowych SmileID, w tym smartfonów klasy podstawowej z bardzo ograniczonymi procesorami, mało znanych modeli regionalnych i wytrzymałych niestandardowych terminali POS.

harun_quote_card_green.png

Przed wdrożeniem CameraX firma SmileID musiała zmierzyć się ze standardowymi, ale trudnymi wyzwaniami związanymi z inżynierią aparatów: rozciągniętym podglądem, obróconą orientacją czujnika, awariami związanymi z brakiem pamięci i niestandardowymi błędami producenta oryginalnego sprzętu (OEM). Dzięki przeniesieniu podstawowych pakietów Android SDK do CameraX firma SmileID przekształciła te wyzwania w istotną przewagę biznesową.

Według SmileID przejście na pakiety SDK na Androida z CameraX przyniosło następujące rezultaty:

WskaźnikWpływ migracji na CameraX
Wzrost wykorzystania pakietu SDK20-krotny wzrost w drugim roku (wcześniej, przed CameraX, był to wzrost 2–3-krotny).
Współczynniki zaliczeń weryfikacjiWzrost o 20% w przypadku aplikacji korzystających z pakietów SDK SmileID
Rozdzielczość przechwytywania4-krotny wzrost liczby pikseli selfie/testu na żywotność przy zerowym obciążeniu sieci
Zgodność z modelem urządzeniaObsługa ponad 18 000 typów urządzeń z Androidem
Łączna liczba przeskalowanych weryfikacjiPrzetworzono ponad 160 milionów weryfikacji tożsamości

Wyzwanie: rozdrobniony sprzęt i problemy ze starszymi interfejsami API

Aby potwierdzić, że użytkownik jest tym, za kogo się podaje, pakiet SDK SmileID musi przechwytywać klatki selfie w wysokiej rozdzielczości na potrzeby sprawdzania aktywności na urządzeniu i wykrywania deepfake'ów działającego w chmurze. 

W przypadku starszych implementacji Camera1 i niskopoziomowych implementacji interfejsu API Camera2 osiągnięcie tego celu było trudne z kilku powodów: 

  • Dostosowania i specyfika OEM: urządzenia różnych producentów zgłaszały fizyczną orientację czujnika aparatu w różny sposób, co powodowało obracanie podglądu lub nieprawidłową orientację zdjęć twarzy.
  • Zniekształcenia formatu obrazu: żądanie określonego rozmiaru klatki na urządzeniach budżetowych często powodowało rozciągnięcie podglądu z aparatu w pionie lub poziomie, co zniekształcało twarz użytkownika i uniemożliwiało weryfikację biometryczną.
  • Awarie spowodowane brakiem pamięci (OOM): przetwarzanie nieprzetworzonych obrazów o wysokiej rozdzielczości na urządzeniach z małą ilością pamięci RAM (często 1 GB lub mniej) często prowadziło do krytycznych awarii alokacji pamięci.

Z powodu tych problemów wzrost wdrażania pakietu SDK SmileID rok do roku był ograniczony do 2–3 razy, a wiele weryfikacji musiało polegać na przesyłaniu statycznych zdjęć przez interfejs REST API o dużym opóźnieniu zamiast na sprawdzaniu autentyczności na urządzeniu w czasie rzeczywistym.

Rozwiązanie: spójne potoki dzięki CameraX

Firma SmileID od podstaw przebudowała swoje pakiety SDK na urządzenia mobilne, wykorzystując CameraX, który został stworzony specjalnie po to, aby uprościć złożoność ekosystemu urządzeń i zapewnić spójny interfejs programisty z natywną obsługą cyklu życia.

Korzystając z podstawowych przypadków użycia CameraX (w szczególności Preview i ImageAnalysis), firma SmileID stworzyła solidny, dwufunkcyjny proces przetwarzania obrazu z aparatu:

  • Podgląd: renderuje podgląd przekazu z kamery w czasie rzeczywistym i z zachowaniem odpowiednich proporcji, aby ułatwić użytkownikowi korzystanie z funkcji.
  • ImageAnalysis: stale przetwarza klatki lokalnie w czasie rzeczywistym, aby automatycznie wykrywać aktywność i twarz w kadrze oraz wyodrębniać zweryfikowaną klatkę selfie.

Aby rejestrować bardzo ostre szczegóły na potrzeby wykrywania deepfake'ów bez powodowania awarii związanych z brakiem pamięci, firma SmileID dodała nowoczesny interfejs API ResolutionSelector CameraX bezpośrednio do konfiguracji ImageAnalysis. Dzięki temu deweloperzy mogą poprosić o docelową rozdzielczość i wybrać regułę zastępczą, gdy urządzenie nie obsługuje danego rozmiaru. Na przykład ten diagram i przykładowa konfiguracja pokazują, jak ResolutionSelector ocenia rozmiary kandydujące wokół celu 1200 x 900:

resolution_selector_diagram_vertical.png

Oto przykładowy kod pokazujący, jak możesz sparować ResolutionSelector z STRATEGY_KEEP_ONLY_LATEST we własnej aplikacji (użyj FALLBACK_RULE_CLOSEST_HIGHER_THEN_LOWER, aby nadać priorytet ostrości, lub FALLBACK_RULE_CLOSEST_LOWER_THEN_HIGHER, aby ograniczyć wykorzystanie pamięci):

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
    }
}

Dzięki żądaniu klatek o wysokiej gęstości pikseli i przetwarzaniu ich lokalnie firma SmileID osiągnęła 4-krotny wzrost rozdzielczości zdjęć selfie. SmileID skompresował też przycięty obszar twarzy na urządzeniu, dzięki czemu rozmiar przesyłanych plików pozostał taki sam jak w poprzednim systemie. Taka architektura zapewniała dokładniejsze dane dla modeli uczenia maszynowego bez zwiększania kosztów komórkowej transmisji danych dla użytkowników.

Jak CameraX rozwiązuje problem różnic sprzętowych

Standaryzacja na CameraX oznaczała, że SmileID może polegać na 2 warstwach inżynierii zgodności, aby zapewnić stabilność pakietu SDK na różnych urządzeniach:

1. Laboratorium testowe Google ds. aparatów i multimediów

Zgodność CameraX jest potwierdzana przez ciągłą, fizyczną weryfikację sprzętu. W dedykowanym laboratorium Google do testowania aparatów i multimediów codziennie uruchamiany jest automatyczny zestaw testów na ogromnej, rotacyjnej matrycy obejmującej ponad 190 fizycznych modeli urządzeń z Androidem. Obejmuje to urządzenia z różnymi chipsetami, wersjami systemu operacyjnego i możliwościami sprzętowymi. 

Aby zapewnić bardziej spójne działanie na popularnych urządzeniach, Laboratorium testowe aparatu i multimediów Google automatycznie wykrywa regresje bibliotek, zanim wpłyną one na kod produkcyjny.

2. Automatyczne obejścia problemów z urządzeniami

Różne urządzenia z Androidem mają różne ograniczenia fizyczne. Niektóre mogą nie ustawiać niestandardowych ustawień ekspozycji, a inne mogą zgłaszać odwrócone dane obrazu przy użyciu określonych formatów obrazu. Aby uniemożliwić deweloperom zaśmiecanie baz kodu złożonymi blokami warunkowymi opartymi na producencie i modelu urządzenia, CameraX utrzymuje wewnętrzne klasy anomalii urządzeń, takie jak DeviceQuirks i CameraQuirks, w camera-camera2 (DeviceQuirksLoader.kt). Gdy CameraX wykryje urządzenie ze znanym problemem, automatycznie stosuje odpowiednie obejście. W przypadku SmileID oznaczało to, że pakiet SDK mógł działać niezawodnie na ponad 18 tys. typów urządzeń z Androidem bez konieczności stosowania poprawek dla konkretnych urządzeń w bazie kodu.

Skalowanie do ponad 160 mln weryfikacji

Dzięki przejściu na CameraX firma SmileID uprościła integrację pakietu SDK dla zewnętrznych deweloperów aplikacji. 

Wyeliminowanie zniekształceń formatu obrazu, opóźnień podglądu i nagłych awarii spowodowanych brakiem pamięci doprowadziło do 20-procentowego wzrostu liczby pozytywnych weryfikacji w przypadku usług korzystających z pakietów SDK firmy. W przypadku instytucji finansowych i aplikacji do płatności mobilnych w Afryce wzrost odsetka pozytywnych wyników o 20% oznacza, że setki tysięcy uprawnionych użytkowników pomyślnie przechodzą proces rejestracji, zamiast rezygnować.

juma_quote_card_blue.png

Deweloperzy zwrócili na to uwagę. Łatwość integracji pakietu SDK opartego na CameraX spowodowała 15-krotny wzrost liczby użytkowników w pierwszym roku i 20-krotny w drugim. Do tej pory firma SmileID przeprowadziła ponad 160 milionów weryfikacji tożsamości za pomocą CameraX.

Tworzenie historii zgodności za pomocą umiejętności CameraX

Tworzenie aplikacji na aparaty nie musi być trudne. Aby pomóc Twojemu zespołowi we wdrożeniu tych samych wzorców CameraX, których używa SmileID, Android udostępnił umiejętność CameraX dla agentów kodowania AI. 

Gdy używasz umiejętności CameraX w środowisku programistycznym, agenty kodowania AI, takie jak Gemini, stosują aktualne wzorce CameraX do migracji, wiązania cyklu życia, ConcurrentCamera i MlKitAnalyzer. Niezależnie od tego, czy konfigurujesz przekazy z obu aparatów, podgląd za pomocą PreviewView lub CameraXViewfinder, czy zarządzasz analizą uczenia maszynowego w czasie rzeczywistym, umiejętność CameraX pomaga agentowi generować precyzyjny kod gotowy do wykorzystania w środowisku produkcyjnym.

Autor:
Czytaj dalej