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
Detector
s 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 :
COORDINATE_SYSTEM_VIEW_REFERENCED
: coordonnéesPreviewView
transforméesCOORDINATE_SYSTEM_ORIGINAL
: coordonnées du fluxImageAnalysis
d'origine
Un
Executor
appelant le rappel Consumer et envoyant à l'application leMlKitAnalyzer.Result
ou le résultat ML Kit agrégé d'une image issue de l'appareil photoUn
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.