Fermer

janvier 3, 2022

CameraX : une approche plus simple du développement d'applications pour caméras


CameraX est un autre ajout à la suite de bibliothèques Jetpack de Google pour aider les développeurs à incorporer des capacités de caméra dans leurs applications. Bien que l'API Camera2, le prédécesseur de CameraX, soit connue pour être une API puissante, il est un peu problématique d'en tirer pleinement parti, en particulier avec un grand nombre de fabricants disposant d'un ensemble diversifié de capacités de caméra pour leurs appareils. Camera2 est également complexe et incohérent.

La bibliothèque CameraX résout ces problèmes en ayant une approche beaucoup plus simple prenant en compte le cycle de vie qui est principalement basée sur les cas d'utilisation tout en tirant le meilleur parti des fonctionnalités fournies par l'API Camera2. CameraX résout également les problèmes de compatibilité des appareils, ce qui réduit la peine d'écrire du code spécifique à l'appareil dans votre code source. Cela permet également aux développeurs de fournir une expérience et des fonctionnalités similaires à celles que les applications de caméra préinstallées offrent aux utilisateurs avec un minimum de lignes de code.

Afin de permettre aux développeurs d'ajouter plus facilement la compatibilité de la caméra à leurs applications, le CameraX se concentre sur les attributs essentiels suivants :

  • Plus de fonctionnalités telles que la mise au point, le pincement pour zoomer et la rotation de l'appareil sont désormais facilement activées avec l'ajout de nouvelles fonctionnalités et API dans CameraX
  • Prise en charge de fonctionnalités de caméra supplémentaires telles que , mode nuit ou HDR en élargissant la gamme d'appareils offrant des fonctions d'extension
  • Testabilité, avec un laboratoire de 52 appareils différents qui se concentre principalement sur la stabilité et la cohérence de l'API

Principaux avantages[19659002] L'objectif principal de CameraX est d'améliorer l'expérience de développement, et il le fait en abordant les scénarios de caméra les plus familiers avec les 3 cas d'utilisation :

  1. Aperçu : vous permet d'inclure un PreviewView simplifiant grandement la visualisation du flux de caméra en direct dans votre application lorsque la caméra devient active
  2. Image Analysis : vous permet d'acquérir des données de trame de caméra pour les transmettre au traitement d'image, à la vision par ordinateur ou autre algorithmes d'apprentissage automatique
  3. Capture d'images : vous permet de capturer facilement des photos avec des commandes manuelles simples de l'appareil photo

CameraX offre également une cohérence sur un grand nombre d'appareils. Cela se fait en prenant en compte un certain nombre de comportements tels que le rapport hauteur/largeur, l'orientation, la rotation, la taille de l'aperçu et la taille de l'image haute résolution.

Google a également investi dans un laboratoire de test CameraX automatisé avec un grand nombre d'appareils différents de divers fabricants et toutes les saveurs du système d'exploitation Android depuis le niveau API 21 (Android 5.0). Ce laboratoire automatisé teste en continu divers comportements de caméra sur tous ces appareils afin de détecter et de résoudre tout problème avec la bibliothèque CameraX, réduisant ainsi la charge de test des développeurs.

CameraX est également fourni avec des modules complémentaires optionnels pour les appareils pris en charge, vous permettant d'activer des fonctionnalités et des capacités similaires à celles d'une application de caméra native sur les nouveaux appareils fournis avec les objectifs de caméra améliorés avec juste une ligne de code minimale. Ces modules complémentaires sont appelés Extensions et incluent le mode Portrait (Bokeh), HDR, Mode nuit et Retouche du visage.

Un autre avantage clé de l'utilisation de CameraX est la taille réduite des APK avec des performances hautement optimisées et moins de maintenance du code de l'appareil photo. .

Implémentation de CameraX

L'ajout de la fonctionnalité CameraX dans notre application est assez simple et ne nécessite que trois étapes de base : la configuration, la liaison et l'action, pour implémenter l'une des 3 cas d'utilisation mentionnés ci-dessus.

L'extrait de code suivant montre comment implémenter facilement le cas d'utilisation de capture d'image dans votre application :

// Configurer le cas d'utilisation

// Étape 1. Config
val imageCapture = ImageCapture.Builder().setTargetResolution(Size(600, 800)).build()
var cameraSelector : CameraSelector = CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
.build()

// Étape 2. Bind
CameraX.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture)

// Étape 3. Act
imageCapture.takePicture(...)

La deuxième étape consiste à lier le cas d'utilisation à un cycle de vie. Vous pouvez lier le cas d'utilisation à différents cycles de vie, que ce soit un cycle de vie d'activités, un cycle de vie de caméra ou une session de capture. Une fois qu'un cas d'utilisation est lié à un cycle de vie, CameraX gère automatiquement l'ouverture et la libération de la caméra en fonction du cycle de vie du propriétaire du cycle de vie auquel il est lié. La première étape consiste à configurer le cas d'utilisation, c'est-à-dire à créer un cas d'utilisation de capture d'image. pour l'exemple ci-dessus. Vous pouvez également spécifier divers paramètres tels que la résolution de l'image, le rapport hauteur/largeur, le mode flash, etc. tout en définissant le cas d'utilisation. Si vous avez spécifié un paramètre particulier tel que la résolution et que l'appareil exécutant votre application ne prend pas en charge la résolution donnée, CameraX passera automatiquement à la résolution la plus proche, prenant ainsi en charge chaque configuration.

La dernière étape consiste à agir sur le cas d'utilisation. . Dans l'exemple ci-dessus, l'appel de la méthode takePicture() prendra une photo. Et ici, vous avez un cas d'utilisation de capture d'image prêt avec seulement 4 lignes de code.

Extensions CameraX

L'une des fonctionnalités les plus utiles de la bibliothèque CameraX est CameraX Extensions de fournisseur. Ces extensions sont des modules complémentaires facultatifs fournis dans la bibliothèque avec les fonctionnalités de base et les commandes de l'appareil photo. Au cours des dernières années, le matériel de caméra mobile est passé des systèmes de caméras à objectif unique de base à des systèmes de caméras multi-objectifs de qualité professionnelle très avancés avec de nombreuses fonctionnalités telles que le mode portrait (Bokeh), le mode nuit, le mode beauté, le HDR et bien plus encore. Mais avec tout ce matériel haut de gamme et ces objectifs multiples, ces fonctionnalités n'étaient accessibles que via les applications de caméra natives intégrées de l'appareil, créant ainsi un énorme écart entre le matériel et le logiciel afin de rendre toutes ces fonctionnalités accessibles dans des applications tierces par les développeurs et tirer pleinement parti du matériel de la caméra.

CameraX réduit cet écart à l'aide de ses extensions en mettant 5 des fonctionnalités spécifiques au fabricant à la disposition des développeurs, notamment :

  • High Dynamic Range (HDR)  : les développeurs peuvent désormais utiliser la capacité de traitement multi-images pour capturer une image avec à la fois les hautes lumières et les basses lumières de la scène
  • Nuit : les développeurs peuvent utiliser les capacités de traitement multi-images en basse lumière pour fournir des images plus attrayantes dans des conditions de faible luminosité
  • Auto : détermine et fournit automatiquement une image HDR ou une image de nuit en fonction de la lumière ambiante actuelle conditions d'utilisation
  • Portrait(Bokeh) : fournit une image en mode portrait avec un arrière-plan flou.
  • Beauté : active les effets de beauté du visage dans l'image

Bien que les extensions soient disponible sur les appareils qui prennent en charge ces fonctionnalités de manière native, cela ne signifie pas que vous devez écrire des blocs de code spécifiques à l'appareil. Vous n'avez qu'à le coder une fois et ces extensions fonctionneront sur tous les appareils pris en charge. Vous pouvez configurer ces extensions pour les cas d'utilisation de l'aperçu et de la capture d'image dans votre application, ce qui améliorera la qualité de l'image et l'expérience utilisateur.

Conclusion

Tirer parti des avantages de l'API Camera2, CameraX fournit une approche rapide, simple et sensible au cycle de vie pour la mise en œuvre des capacités de caméra dans notre application. Avec Camera2 et ses prédécesseurs, les développeurs doivent commencer par des entrées spécifiques à l'appareil et au système d'exploitation pour recevoir la sortie souhaitée, ce qui entraîne à son tour de gros blocs if-else, ce qui rend très difficile la mise à l'échelle de la base de code avec l'entrée de nouveaux appareils sur le marché. CameraX transforme l'ensemble du modèle de programmation du cadre de la caméra et adopte une approche basée sur les cas d'utilisation. Avec cette nouvelle approche basée sur les cas d'utilisation dans CameraX, les développeurs doivent spécifier le cas d'utilisation qu'ils souhaitent mettre en œuvre, puis CameraX déterminera automatiquement la configuration requise pour l'appareil et le système d'exploitation. CameraX permet également aux développeurs de tirer parti du nouveau matériel de caméra de qualité professionnelle dans leurs applications à l'aide d'extensions.

CameraX aide également les développeurs en résolvant les difficultés qu'ils rencontrent pour étendre les tests de leurs applications à un grand nombre de périphériques et diverses configurations de caméra. Le laboratoire de test CameraX dédié garantit la couverture des tests pour plusieurs appareils de différents fabricants, différents niveaux de système d'exploitation, niveaux de prix et jeux de puces. Tous ces appareils exécutant des tests pour diverses configurations représentent en permanence environ 500 millions d'appareils Android, ce qui contribue à améliorer continuellement la bibliothèque CameraX. PARTAGEZ-LE




Source link