Analyseur ML Kit

Le SDK ML Kit de Google fournit des API Vision de machine learning sur l'appareil permettant par exemple de détecter les visages, de scanner des codes-barres ou d'attribuer des libellés aux images. L'analyseur ML Kit vous permet d'intégrer plus facilement ML Kit à votre appli CameraX.

Cet analyseur est une implémentation de l'interface ImageAnalysis.Analyzer. Il ignore la résolution cible par défaut (si nécessaire) pour optimiser l'utilisation de ML Kit, gère les transformations de coordonnées et transmet les images à ML Kit, qui renvoie alors les résultats d'analyse agrégés.

Implémenter l'analyseur ML Kit

Pour implémenter l'analyseur ML Kit, nous vous recommandons d'utiliser la classe CameraController, qui fonctionne avec PreviewView pour afficher les éléments d'interface utilisateur. Lorsqu'il est implémenté avec CameraController, l'analyseur ML Kit gère à votre place les transformations de coordonnées entre le flux ImageAnalysis d'origine et PreviewView. Il reçoit le système de coordonnées cible de CameraX, calcule la transformation des coordonnées et la transmet à la classe Detector de ML Kit pour analyse.

Pour utiliser l'analyseur ML Kit avec CameraController, appelez setImageAnalysisAnalyzer() et transmettez-lui un nouvel objet d'analyseur ML Kit en ajoutant les éléments suivants à son constructeur :

  • Liste des Detectors ML Kit, que CameraX appelle de manière séquentielle
  • Système de coordonnées cible déterminant les coordonnées de la sortie de ML Kit :

  • Un Executor appelant le rappel Consumer et envoyant à l'application le MlKitAnalyzer.Result ou le résultat ML Kit agrégé d'une image issue de l'appareil photo

  • Un Consumer que CameraX appelle à chaque nouvelle sortie ML Kit

Le code suivant implémente l'analyseur ML Kit avec CameraController pour configurer un BarcodeScanner chargé de détecter les codes QR :

Kotlin

// create BarcodeScanner object
val options = BarcodeScannerOptions.Builder()
  .setBarcodeFormats(Barcode.FORMAT_QR_CODE)
  .build()
val barcodeScanner = BarcodeScanning.getClient(options)

cameraController.setImageAnalysisAnalyzer(
            ContextCompat.getMainExecutor(this),
            MlKitAnalyzer(
                listOf(barcodeScanner),
                COORDINATE_SYSTEM_VIEW_REFERENCED,
                ContextCompat.getMainExecutor(this)
            ) { result: MlKitAnalyzer.Result? ->
    // The value of result.getResult(barcodeScanner) can be used directly for drawing UI overlay.
    }
)

Java

// create BarcodeScanner object
BarcodeScannerOptions options = new BarcodeScannerOptions.Builder()
   .setBarcodeFormats(Barcode.FORMAT_QR_CODE)
   .build();
BarcodeScanner barcodeScanner = BarcodeScanning.getClient(options);

cameraController.setImageAnalysisAnalyzer(executor,
    new MlKitAnalyzer(List.of(barcodeScanner), COORDINATE_SYSTEM_VIEW_REFERENCED,
    executor, result -> {
   // The value of result.getResult(barcodeScanner) can be used directly for drawing UI overlay.
 });

Dans l'exemple de code ci-dessus, l'analyseur ML Kit transmet les éléments suivants à la classe Detector de BarcodeScanner :

  • Matrice de transformation basée sur COORDINATE_SYSTEM_VIEW_REFERENCED et représentant le système de coordonnées cible
  • Images issues de l'appareil photo

Si BarcodeScanner rencontre des problèmes, son Detector génère une erreur et l'analyseur ML Kit la répercute dans votre application. Si l'opération réussit, l'analyseur ML Kit renvoie MLKitAnalyzer.Result#getValue(), qui correspond dans ce cas à l'objet Barcode.

Vous pouvez également implémenter l'analyseur ML Kit à l'aide de la classe ImageAnalysis, qui fait partie de camera-core. Toutefois, comme ImageAnalysis n'est pas intégré à PreviewView, vous devez gérer manuellement les transformations de coordonnées. Pour en savoir plus, consultez la documentation de référence de l'analyseur ML Kit.

Ressources supplémentaires

Pour découvrir une appli d'appareil photo fonctionnelle intégrant les fonctionnalités de l'analyseur ML Kit, consultez l'exemple CameraX-MLKit.