Cách SmileID mở rộng quy mô xác minh danh tính cho hơn 18.000 loại thiết bị Android bằng CameraX
4 phút đọc
Các ứng dụng xác minh danh tính cho hoạt động ngân hàng và đăng ký SIM yêu cầu ảnh chụp khuôn mặt rõ ràng, có độ phân giải cao để phát hiện hành vi giả mạo và deepfake. Việc chụp khung hình đủ sắc nét để kiểm tra độ chân thực và chống giả mạo mà không làm hỏng thiết bị có bộ nhớ thấp là một thách thức phổ biến đối với các nhà phát triển camera Android.
Đối với SmileID, một SDK xác minh danh tính hàng đầu ở Châu Phi, thách thức này còn tăng gấp đôi do hệ sinh thái phần cứng đa dạng. Android chiếm 85% thị phần thiết bị mục tiêu của SmileID, bao gồm cả điện thoại thông minh cấp thấp có bộ xử lý bị hạn chế nghiêm ngặt, các mẫu điện thoại ít phổ biến theo khu vực và thiết bị đầu cuối Điểm bán hàng (POS) tuỳ chỉnh, bền bỉ.
Trước khi áp dụng CameraX, SmileID đã phải đối mặt với những rào cản kỹ thuật tiêu chuẩn nhưng khó khăn về camera: nguồn cấp dữ liệu xem trước bị kéo giãn, hướng cảm biến bị xoay, sự cố hết bộ nhớ (OOM) và lỗi tuỳ chỉnh của nhà sản xuất thiết bị gốc (OEM). Bằng cách di chuyển SDK Android cốt lõi sang CameraX, SmileID đã biến những thách thức này thành một lợi thế kinh doanh lớn.
Theo SmileID, việc di chuyển SDK Android sang CameraX đã mang lại những kết quả sau:
| Chỉ số | Tác động của việc di chuyển sang CameraX |
|---|---|
| Mức tăng trưởng về số lượng ứng dụng sử dụng SDK | Tăng gấp 20 lần vào năm thứ 2 (tăng từ 2-3 lần trước khi dùng CameraX) |
| Tỷ lệ vượt qua quy trình xác minh | Tăng 20% cho các ứng dụng sử dụng SDK của SmileID |
| Độ phân giải khi chụp | Tăng gấp 4 lần số pixel của ảnh chân dung tự chụp/ảnh động mà không làm tăng mức hao tổn mạng |
| Khả năng tương thích với mẫu thiết bị | Hỗ trợ hơn 18.000 loại thiết bị Android |
| Tổng số lượt xác minh được mở rộng | Xử lý hơn 160 triệu yêu cầu xác minh danh tính |
Thách thức: Phần cứng phân mảnh và API cũ gây khó khăn
Để xác nhận danh tính của người dùng, SDK của SmileID phải chụp được ảnh chân dung tự chụp có độ phân giải cao để kiểm tra hoạt động thực tế trên thiết bị và phát hiện deepfake dựa trên đám mây.
Trong các cách triển khai API Camera1 cũ và Camera2 cấp thấp, việc đạt được điều này một cách nhất quán là rất khó vì một số lý do:
- Tuỳ chỉnh và đặc điểm riêng của OEM: Thiết bị của các nhà sản xuất khác nhau báo cáo hướng cảm biến máy ảnh vật lý khác nhau, dẫn đến việc bản xem trước bị xoay hoặc ảnh chụp khuôn mặt bị sai hướng.
- Méo tỷ lệ khung hình: Việc yêu cầu một kích thước khung hình cụ thể trên các thiết bị giá rẻ thường khiến bản xem trước của camera bị kéo giãn theo chiều dọc hoặc chiều ngang, làm méo khuôn mặt của người dùng và khiến quy trình xác thực sinh trắc học không hiệu quả.
- Sự cố hết bộ nhớ (OOM): Việc xử lý hình ảnh thô có độ phân giải cao trên các thiết bị có RAM thấp (thường là 1 GB trở xuống) thường dẫn đến sự cố nghiêm trọng về việc phân bổ bộ nhớ.
Do những điểm bất tiện này, mức tăng trưởng hằng năm về số lượt sử dụng SDK của SmileID chỉ giới hạn ở mức 2-3 lần và nhiều quy trình xác minh phải quay lại phương thức tải ảnh tĩnh lên thông qua một API REST có độ trễ cao, thay vì chạy quy trình kiểm tra hoạt động theo thời gian thực trên thiết bị.
Giải pháp: Quy trình nhất quán với CameraX
SmileID đã thiết kế lại SDK di động từ đầu bằng CameraX, được xây dựng riêng để loại bỏ sự phức tạp của hệ sinh thái thiết bị cơ bản và cung cấp giao diện nhà phát triển nhất quán, nhận biết vòng đời gốc.
Bằng cách sử dụng các trường hợp sử dụng chính của CameraX (cụ thể là Preview và ImageAnalysis), SmileID đã xây dựng một quy trình camera mạnh mẽ, có hai mục đích:
- Xem trước: Hiển thị bản xem trước theo thời gian thực, có tỷ lệ hoàn hảo của nguồn cấp dữ liệu từ camera để hướng dẫn người dùng.
- ImageAnalysis: Liên tục xử lý các khung hình cục bộ theo thời gian thực để tự động phát hiện người thật và khuôn mặt trong khung hình, đồng thời trích xuất khung hình selfie đã xác minh.
Để ghi lại các chi tiết cực kỳ sắc nét nhằm phát hiện deepfake mà không gây ra sự cố OOM, SmileID đã thêm API ResolutionSelector hiện đại của CameraX trực tiếp vào cấu hình ImageAnalysis của họ. Tính năng này cho phép nhà phát triển yêu cầu độ phân giải mục tiêu và chọn quy tắc dự phòng khi thiết bị không hỗ trợ kích thước chính xác đó. Ví dụ: biểu đồ và cấu hình mẫu sau đây minh hoạ cách ResolutionSelector đánh giá các kích thước đề xuất xung quanh mục tiêu 1200x900:
Dưới đây là mã mẫu tương ứng cho thấy cách bạn có thể ghép nối ResolutionSelector với STRATEGY_KEEP_ONLY_LATEST trong ứng dụng của riêng mình (sử dụng FALLBACK_RULE_CLOSEST_HIGHER_THEN_LOWER để ưu tiên độ sắc nét hoặc FALLBACK_RULE_CLOSEST_LOWER_THEN_HIGHER để giới hạn mức sử dụng bộ nhớ):
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 } }
Bằng cách yêu cầu khung hình có mật độ điểm ảnh cao và xử lý cục bộ, SmileID đã tăng gấp 4 lần độ phân giải của ảnh chân dung tự chụp. SmileID cũng nén vùng khuôn mặt được cắt trên thiết bị để kích thước tải lên mạng không thay đổi so với hệ thống trước đó. Kiến trúc này đảm bảo dữ liệu sắc nét hơn cho các mô hình học máy mà không làm tăng chi phí dữ liệu di động cho người dùng.
Cách CameraX giải quyết sự khác biệt về phần cứng
Việc chuẩn hoá trên CameraX giúp SmileID có thể dựa vào hai lớp kỹ thuật tương thích để giữ cho SDK của họ ổn định trên các thiết bị:
1. Phòng thí nghiệm kiểm thử máy ảnh và nội dung nghe nhìn của Google
Khả năng tương thích của CameraX được hỗ trợ bằng quy trình xác minh phần cứng vật lý liên tục. Trong Phòng thử nghiệm máy ảnh và nội dung nghe nhìn chuyên dụng của Google, một bộ kiểm thử tự động chạy hằng ngày trên một ma trận luân phiên khổng lồ gồm hơn 190 mẫu thiết bị Android thực tế. Trong đó có các thiết bị đại diện cho nhiều loại chipset, phiên bản hệ điều hành và chức năng phần cứng.
Để hướng đến hành vi nhất quán hơn trên các thiết bị phổ biến, Phòng thí nghiệm kiểm thử nội dung nghe nhìn và máy ảnh của Google sẽ tự động phát hiện các lỗi hồi quy của thư viện trước khi chúng có thể ảnh hưởng đến mã phát hành chính thức của bạn.
2. Tự động giải quyết các lỗi của thiết bị
Mỗi thiết bị Android có những giới hạn vật lý riêng. Một số thiết bị có thể không đặt được chế độ cài đặt độ phơi sáng tuỳ chỉnh, trong khi một số thiết bị khác có thể báo cáo dữ liệu hình ảnh bị đảo ngược khi sử dụng một số tỷ lệ khung hình nhất định. Để ngăn nhà phát triển làm lộn xộn toàn bộ mã nguồn bằng các khối điều kiện phức tạp dựa trên nhà sản xuất và kiểu thiết bị, CameraX duy trì các lớp đặc điểm thiết bị nội bộ như DeviceQuirks và CameraQuirks trong camera-camera2 (DeviceQuirksLoader.kt). Khi CameraX phát hiện một thiết bị có vấn đề đã biết, thư viện này sẽ tự động đưa vào một giải pháp phù hợp. Đối với SmileID, điều này có nghĩa là SDK của họ có thể hoạt động ổn định trên hơn 18.000 loại thiết bị Android mà không cần các bản vá dành riêng cho thiết bị trong cơ sở mã.
Mở rộng quy mô lên hơn 160 triệu lượt xác minh
Bằng cách chuyển sang CameraX, SmileID đã đơn giản hoá quy trình tích hợp SDK cho các nhà phát triển ứng dụng bên ngoài.
Việc loại bỏ tình trạng méo tỷ lệ khung hình, bản xem trước bị giật và sự cố đột ngột do hết bộ nhớ đã giúp tăng 20% tỷ lệ xác minh thành công cho các dịch vụ sử dụng SDK của họ. Đối với các tổ chức tài chính và ứng dụng tiền di động trên khắp Châu Phi, tỷ lệ vượt qua tăng 20% đồng nghĩa với việc hàng trăm nghìn người dùng hợp pháp đã hoàn tất quy trình đăng ký thành công thay vì rời bỏ.
Các nhà phát triển đã chú ý đến điều này. Nhờ dễ dàng tích hợp SDK dựa trên CameraX, tỷ lệ sử dụng đã tăng gấp 15 lần trong năm đầu tiên và tăng lên gấp 20 lần vào năm thứ hai. Tính đến nay, SmileID đã xử lý thành công hơn 160 triệu lượt xác minh danh tính bằng CameraX.
Xây dựng câu chuyện về khả năng tương thích bằng kỹ năng CameraX
Việc phát triển cho máy ảnh không nhất thiết phải khó khăn. Để giúp nhóm của bạn áp dụng các mẫu CameraX giống như SmileID, Android đã ra mắt Kỹ năng CameraX cho các tác nhân lập trình AI.
Khi bạn sử dụng Kỹ năng CameraX trong môi trường phát triển, các tác nhân lập trình AI như Gemini sẽ áp dụng các mẫu CameraX hiện tại cho việc di chuyển, liên kết vòng đời, ConcurrentCamera và MlKitAnalyzer. Cho dù bạn đang thiết lập nguồn cấp dữ liệu từ camera kép, định cấu hình bản xem trước bằng PreviewView hoặc CameraXViewfinder hay quản lý quy trình phân tích bằng công nghệ học máy (ML) theo thời gian thực, thì Kỹ năng CameraX đều hướng dẫn tác nhân của bạn tạo mã chính xác, sẵn sàng cho môi trường thực tế.
- Khám phá Kỹ năng CameraX: Truy cập vào Thư mục kỹ năng của nhà phát triển Android hoặc chạy
android skills add cameraxbằng Android CLI để thêm kỹ năng này vào công cụ lập trình AI của bạn. - Bắt đầu sử dụng CameraX: Tham khảo Tài liệu chính thức về CameraX và giúp trải nghiệm máy ảnh của bạn hoạt động ở mọi nơi.
-
Nghiên cứu điển hìnhGrab là siêu ứng dụng hàng đầu Đông Nam Á, cung cấp dịch vụ giao hàng, di chuyển và dịch vụ tài chính cho hàng triệu người dùng tại 8 quốc gia thông qua một ứng dụng duy nhất.
Ajesh Pai, Nguyen Van Minh, Tracy Agyemang • Thời gian đọc: 5 phút -
Nghiên cứu điển hìnhNhóm đã xây dựng toàn bộ mã nguồn giao diện người dùng dựa trên AI, nhỏ hơn 50% so với phiên bản nguyên bản, đồng thời giảm 35% thời gian thực thi của tác nhân AI, giảm 32% số lần trao đổi giữa kỹ sư và tác nhân, và giảm 33% chi phí token.
Pavlo Stavytskyi, Rebecca Franks • Thời gian đọc: 11 phút -
Nghiên cứu điển hìnhWhatsApp là nền tảng nhắn tin lớn nhất thế giới, phục vụ hàng tỷ người dùng trên toàn cầu. Đây là công cụ giao tiếp mặc định cho mọi người ở nhiều khu vực, giúp kết nối người dùng thông qua dịch vụ nhắn tin riêng tư, đáng tin cậy và bảo mật.
Niharika Arora, Tracy Agyemang, Mayank Jain • Đọc trong 8 phút
Nhận thông tin chi tiết mới nhất về hoạt động phát triển Android trong hộp thư đến của bạn hằng tuần.