איך SmileID הרחיבה את אימות הזהות ליותר מ-18,000 סוגי מכשירי Android באמצעות CameraX
משך הקריאה: 4 דקות
אפליקציות לאימות זהות לצורך בנקאות ורישום כרטיסי SIM דורשות צילום פנים ברור וברזולוציה גבוהה כדי לזהות זיופים וזיופי פנים (deepfakes). אחד האתגרים הנפוצים של מפתחי מצלמות ל-Android הוא לצלם פריימים חדים מספיק לבדיקות של חיות וזיוף, בלי לגרום לקריסה של מכשירים עם נפח זיכרון נמוך.
ב-SmileID, ערכת SDK מובילה לאימות זהות באפריקה, האתגר הזה כפול בגלל סביבת חומרה מגוונת. מערכת Android מייצגת 85% מנתח השוק של מכשירי היעד של SmileID, כולל סמארטפונים בסיסיים עם מעבדים מוגבלים מאוד, דגמים אזוריים לא מוכרים ומסופי נקודת מכירה (POS) מותאמים אישית ומוקשחים.
לפני שהתחילו להשתמש ב-CameraX, ב-SmileID נתקלו בקשיים רגילים אבל מרתיעים בפיתוח המצלמה: פידים מתוחים של תצוגה מקדימה, כיווני חיישנים מסובבים, קריסות בגלל מחסור בזיכרון (OOM) ובאגים בהתאמה אישית של יצרן הציוד המקורי (OEM). העברת ערכות ה-Android SDK העיקריות ל-CameraX הפכה את האתגרים האלה ליתרון עסקי משמעותי עבור SmileID.
לפי SmileID, המעבר של ערכות ה-SDK ל-Android ל-CameraX הניב את התוצאות הבאות:
| מדד | ההשפעה של המעבר ל-CameraX |
|---|---|
| היקף השימוש ב-SDK | פי 20 עד השנה השנייה (עלייה מפי 2-3 לפני CameraX) |
| שיעורי המעבר של האימות | עלייה של 20% באפליקציות שמשתמשות בערכות ה-SDK של SmileID |
| רזולוציית הצילום | פי 4 יותר פיקסלים בתמונות סלפי ובבדיקות חיוּת, בלי להעמיס על הרשת |
| תאימות לדגמי מכשירים | תמיכה ביותר מ-18,000 סוגים של מכשירי Android |
| מספר האימותים הכולל שבוצעו | יותר מ-160 מיליון אימותי זהות בוצעו |
האתגר: חומרה מפוצלת ובעיות ב-API מדור קודם
כדי לאמת את זהות המשתמשים, ערכת ה-SDK של SmileID צריכה לצלם תמונות סלפי ברזולוציה גבוהה לצורך בדיקות חיות במכשיר וזיהוי דיפ-פייק מבוסס-ענן.
בממשקי API מדור קודם, כמו Camera1 ו-Camera2 ברמה נמוכה, היה קשה להשיג את זה באופן עקבי מכמה סיבות:
- התאמות אישיות ומוזרויות של יצרני ציוד מקורי (OEM): מכשירים של יצרנים שונים דיווחו על כיוונים שונים של חיישני המצלמה הפיזיים, וכתוצאה מכך התצוגות המקדימות סובבו או שצילומי הפנים היו בכיוון שגוי.
- עיוותים ביחס הגובה-רוחב: בקשה של גודל פריים ספציפי במכשירים זולים גרמה לעיתים קרובות לתצוגה המקדימה של המצלמה להימתח אנכית או אופקית, לעוות את פני המשתמש ולהפוך את האימות הביומטרי לחסר תועלת.
- קריסות בגלל מחסור בזיכרון (OOM): עיבוד תמונות גולמיות ברזולוציה גבוהה במכשירים עם זיכרון RAM נמוך (בדרך כלל 1GB או פחות) גרם לעיתים קרובות לקריסות קריטיות בהקצאת הזיכרון.
בגלל נקודות החיכוך האלה, הצמיחה של SmileID בהטמעת ה-SDK בהשוואה לשנה הקודמת הייתה מוגבלת לפי 2-3, ובמקרים רבים האימותים נאלצו לחזור להעלאת תמונות סטטיות דרך API בארכיטקטורת REST עם זמן אחזור גבוה, במקום להריץ בדיקות חיות בזמן אמת במכשיר.
הפתרון: צינורות עיבוד נתונים עקביים עם CameraX
ב-SmileID תכננו מחדש את ערכות ה-SDK לנייד מהיסוד באמצעות CameraX, שנוצרה במיוחד כדי להפחית את המורכבות של סביבת המכשירים הבסיסית ולספק ממשק מפתחים עקבי, שמותאם באופן מובנה למחזור החיים.
באמצעות תרחישי השימוש העיקריים של CameraX (במיוחד Preview ו-ImageAnalysis), חברת SmileID בנתה צינור עיבוד נתונים חזק למצלמה, שמיועד לשתי מטרות:
- תצוגה מקדימה: עיבוד של תצוגה מקדימה בזמן אמת של פיד המצלמה בפרופורציות מושלמות כדי להנחות את המשתמש.
- ImageAnalysis: עיבוד רציף של פריימים באופן מקומי ובזמן אמת כדי לבצע זיהוי אוטומטי של חיות ושל פנים בפריים, ולחלץ את פריים הסלפי המאומת.
כדי לצלם פרטים חדים במיוחד לזיהוי זיוף עמוק בלי לגרום לקריסות OOM, צוות SmileID הוסיף את ה-API המודרני ResolutionSelector של CameraX ישירות להגדרות של ImageAnalysis. היא מאפשרת למפתחים לבקש רזולוציית יעד ולבחור כלל חלופי למקרה שהמכשיר לא תומך בגודל המדויק הזה. לדוגמה, התרשים הבא וההגדרה לדוגמה ממחישים איך ResolutionSelector מעריך את הגדלים האפשריים סביב יעד של 1200x900:
הנה קוד לדוגמה שמתאים לזה, שמראה איך אפשר להתאים את 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 להגדיל פי 4 את הרזולוציה של תמונות הסלפי שצולמו. בנוסף, ב-SmileID דחסו את אזור הפנים החתוך במכשיר, כך שגודל ההעלאה לרשת נשאר זהה לזה של המערכת הקודמת. הארכיטקטורה הזו הבטיחה נתונים מדויקים יותר למודלים של למידת המכונה, בלי להגדיל את עלויות חבילת הגלישה של המשתמשים.
איך CameraX פותרת הבדלים בחומרה
המעבר ל-CameraX אפשר ל-SmileID להסתמך על שתי שכבות של הנדסת תאימות כדי לשמור על היציבות של ה-SDK במכשירים שונים:
1. מעבדת הבדיקות של Google למצלמה ולמדיה
התאימות של CameraX נתמכת על ידי אימות פיזי רציף של החומרה. במעבדת הבדיקות הייעודית של Google למצלמות ולמדיה, חבילת מקרים לבדיקה אוטומטית פועלת מדי יום על מטריצה עצומה ומשתנה של יותר מ-190 דגמים פיזיים של מכשירי Android. זה כולל מכשירים שמייצגים ערכות שבבים, גרסאות של מערכת ההפעלה ויכולות חומרה שונות.
כדי להשיג התנהגות עקבית יותר במכשירים פופולריים, מעבדת הבדיקה של Google למצלמה ולמדיה מזהה באופן אוטומטי רגרסיות בספרייה לפני שהן יכולות להשפיע על קוד הייצור.
2. פתרונות עקיפה אוטומטיים לבעיות במכשירים
למכשירי Android שונים יש מגבלות פיזיות שונות. בחלק מהמכשירים, יכול להיות שלא תצליחו להגדיר חשיפה בהתאמה אישית, ובמכשירים אחרים יכול להיות שנתוני התמונה ידווחו בצורה הפוכה כשמשתמשים ביחסי גובה-רוחב מסוימים. כדי למנוע ממפתחים להעמיס על בסיסי הקוד שלהם בלוקים מורכבים של תנאים שמבוססים על היצרן והדגם של המכשיר, CameraX שומרת מחלקות פנימיות של מאפיינים ייחודיים של מכשירים, כמו DeviceQuirks ו-CameraQuirks ב-camera-camera2 (DeviceQuirksLoader.kt). כש-CameraX מזהה מכשיר עם בעיה ידועה, היא מפעילה באופן אוטומטי פתרון עקיף מותאם אישית. ב-SmileID, זה אומר שערכת ה-SDK שלהם יכולה לפעול באופן מהימן ביותר מ-18,000 סוגים של מכשירי Android, בלי צורך בתיקונים ספציפיים למכשיר בבסיס הקוד.
הרחבת הפעילות ליותר מ-160 מיליון אימותים
המעבר ל-CameraX אפשר ל-SmileID לפשט את השילוב של ה-SDK למפתחי אפליקציות חיצוניים.
הסרת עיוותים ביחס הגובה-רוחב, תצוגות מקדימות איטיות וקריסות פתאומיות של OOM הובילה לעלייה של 20% בשיעורי המעבר של האימות בשירותים שמשתמשים בערכות ה-SDK שלהם. במוסדות פיננסיים ובאפליקציות להעברת כספים בנייד ברחבי אפריקה, עלייה של 20% בשיעורי המעבר פירושה שמאות אלפי משתמשים לגיטימיים מצטרפים בהצלחה במקום לנטוש.
המפתחים שמו לב לזה. הקלות של שילוב ה-SDK שמבוסס על CameraX הובילה לעלייה של פי 15 בשימוש בשנה הראשונה, ולעלייה של פי 20 בשימוש בשנה השנייה. עד היום, SmileID עיבדה בהצלחה יותר מ-160 מיליון אימותי זהות באמצעות CameraX.
איך יוצרים סיפור תאימות באמצעות המיומנות CameraX
פיתוח למצלמות לא חייב להיות קשה. כדי לעזור לצוות שלכם לאמץ את אותן תבניות של CameraX שבהן השתמשו ב-SmileID, השקנו ב-Android את מיומנות CameraX לסוכני AI לתכנות.
כשמשתמשים ב-CameraX Skill בסביבת הפיתוח, סוכני תכנות מבוססי-AI כמו Gemini מיישמים דפוסים עדכניים של CameraX להעברה, קישור למחזור החיים, ConcurrentCamera ו-MlKitAnalyzer. בין אם אתם מגדירים פידים של שתי מצלמות במקביל, מגדירים תצוגה מקדימה באמצעות PreviewView או CameraXViewfinder, או מנהלים ניתוח של למידת מכונה (ML) בזמן אמת, המיומנות של CameraX מנחה את הנציג ליצור קוד מדויק ומוכן לייצור.
- היכרות עם המיומנות של CameraX: נכנסים אל מדריך המיומנויות למפתחים של Android או מריצים את
android skills add cameraxעם Android CLI כדי להוסיף את המיומנות לכלי התכנות מבוסס ה-AI. - תחילת העבודה עם CameraX: קראו את המסמכים הרשמיים של CameraX כדי ללמוד איך להפעיל את המצלמה בכל מקום.
-
מקרים לדוגמהGrab היא אפליקציית-על מובילה בדרום-מזרח אסיה, שמציעה משלוחים, ניידות ושירותים פיננסיים למיליוני משתמשים בשמונה מדינות דרך אפליקציה אחת.
Ajesh Pai, Nguyen Van Minh, Tracy Agyemang • משך הקריאה: 5 דקות -
מקרים לדוגמההצוות בנה בסיס קוד לממשק משתמש מבוסס-AI שקטן ב-50% מההטמעה המקורית, ובו-זמנית השיג הפחתה של 35% בזמן הביצוע של סוכן ה-AI, הפחתה של 32% בחילופי המידע בין המהנדסים לסוכן והפחתה של 33% בעלות הטוקנים.
Pavlo Stavytskyi, Rebecca Franks • משך הקריאה: 11 דקות -
מקרים לדוגמהוואטסאפ היא פלטפורמת ההודעות הגדולה בעולם, עם מיליארדי משתמשים ברחבי העולם. זהו כלי התקשורת שמשמש כברירת מחדל אנשים באזורים שונים, ומחבר בין משתמשים באמצעות הודעות פרטיות, אמינות ומאובטחות.
Niharika Arora, Tracy Agyemang, Mayank Jain • משך הקריאה: 8 דקות
רוצים לקבל טיפים עדכניים לפיתוח Android ישירות לאימייל כל שבוע?