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
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.
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źnik | Wpływ migracji na CameraX |
|---|---|
| Wzrost wykorzystania pakietu SDK | 20-krotny wzrost w drugim roku (wcześniej, przed CameraX, był to wzrost 2–3-krotny). |
| Współczynniki zaliczeń weryfikacji | Wzrost o 20% w przypadku aplikacji korzystających z pakietów SDK SmileID |
| Rozdzielczość przechwytywania | 4-krotny wzrost liczby pikseli selfie/testu na żywotność przy zerowym obciążeniu sieci |
| Zgodność z modelem urządzenia | Obsługa ponad 18 000 typów urządzeń z Androidem |
| Łączna liczba przeskalowanych weryfikacji | Przetworzono 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:
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ć.
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.
- Poznaj umiejętność CameraX: odwiedź katalog umiejętności dla deweloperów aplikacji na Androida lub uruchom
android skills add cameraxw interfejsie wiersza poleceń Androida, aby dodać tę umiejętność do narzędzia do kodowania opartego na AI. - Pierwsze kroki z CameraX: zapoznaj się z oficjalną dokumentacją CameraX i zapewnij działanie aparatu na dowolnym urządzeniu.
-
Studia przypadkówGrab to wiodąca superaplikacja w Azji Południowo-Wschodniej, która oferuje dostawy, mobilność i usługi finansowe milionom użytkowników w 8 krajach.
Ajesh Pai, Nguyen Van Minh, Tracy Agyemang • Czas czytania: 5 min -
Studia przypadkówZespół utworzył bazę kodu interfejsu opartego na AI, która jest o 50% mniejsza niż pierwotna implementacja, a jednocześnie skrócił czas wykonywania agenta AI o 35%, zmniejszył liczbę wymian między inżynierem a agentem o 32% i obniżył koszt tokenów o 33%.
Pavlo Stavytskyi, Rebecca Franks • Czas czytania: 11 min -
Studia przypadkówWhatsApp to największa na świecie platforma do obsługi wiadomości, z której korzystają miliardy użytkowników na całym świecie. Jest to domyślne narzędzie do komunikacji dla osób z różnych regionów, które umożliwia użytkownikom wysyłanie prywatnych, niezawodnych i bezpiecznych wiadomości.
Niharika Arora, Tracy Agyemang, Mayank Jain • Czas czytania: 8 min
Otrzymuj co tydzień najnowsze informacje o tworzeniu aplikacji na Androida na swoją skrzynkę odbiorczą.