Lire les codes QR à l’aide de l’API Mobile Vision

introduction

Les codes QR sont devenus omniprésents ces dernières années. Je suis sûr que vous en avez vu un dans une publicité dans un journal ou sur un panneau d’affichage. En termes simples, les codes QR, comme tous les autres codes à barres, sont des images conçues pour être lues par des machines. Habituellement, ils représentent une petite chaîne, telle qu’une URL raccourcie ou un numéro de téléphone. Voici un exemple de code QR contenant l’URL de la page d’accueil de Tuts +:

Tuts + URL sous forme de code QR

Contrairement aux codes-barres traditionnels, qui nécessitent un matériel spécialisé, les codes QR peuvent être lus avec précision par n’importe quel smartphone doté d’un appareil photo décent.

La dernière version du SDK des services Google Play comprend l’API de vision mobile qui, entre autres, permet aux développeurs Android de créer très facilement des applications capables de détecter et de lire les codes QR en temps réel. Dans ce tutoriel, je vais vous aider à démarrer.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de:

  • la dernière version de Studio Android
  • un appareil Android avec une caméra

1. Installation du SDK des services Google Play

Avant d’utiliser l’API de vision mobile dans votre application, vous devez ajouter le SDK 7.8 des services Google Play en tant que compile dépendance dans votre app modules build.gradle.

Lorsque vous appuyez sur le Synchroniser maintenant bouton, vous verrez une erreur qui ressemble à ceci:

Erreur d'installation du référentiel

Clique le Installer le référentiel et synchroniser le projet lien pour installer le SDK.

2. Modification du manifeste de l’application

Ajoutez la ligne suivante à votre application AndroidManifest.xml pour installer automatiquement les bibliothèques de détection de codes-barres sur les appareils qui tentent d’exécuter votre application:

De plus, comme vous utiliserez l’appareil photo de l’appareil pour capturer les codes QR, vous devez demander le android.permission.CAMERA autorisation.

3. Lire un code QR à partir d’une photo

Écrivons maintenant un code qui peut lire un code QR à partir d’une photo stockée dans votre application les atouts dossier. Je vais nommer la photo myqrcode.jpg. Si vous n’avez pas de photos contenant des codes QR à portée de main, vous pouvez en obtenir de Flickr.

Étape 1: Convertissez la photo en Bitmap

Parce que l’API de vision mobile a besoin d’un Bitmap comme entrée, vous devez d’abord convertir votre photo en un Bitmap. Pour ce faire, ouvrez la photo à l’aide du open méthode de la AssetManager classe et passer le InputStream retourné au decodeStream méthode de BitmapFactory. Pour faire simple, faites-le dans le onCreate méthode de votre Activity.

Étape 2: créer un détecteur de code-barres

Pour détecter les codes QR (et d’autres types de codes-barres), vous devez utiliser une instance du BarcodeDetector classe. Le code suivant vous montre comment en créer un en utilisant BarcodeDetector.Builder:

En relation :  Comment enregistrer l'audio du système sur n'importe quelle plate-forme

Notez que le détecteur détectera par défaut les codes-barres de tous les formats pris en charge. J’ai utilisé le setBarcodeFormats méthode pour spécifier explicitement que le détecteur ne doit détecter que les codes QR.

Étape 3: Lisez le code QR

Utilisation Frame.Builder créer un Frame en utilisant le Bitmap vous avez créé plus tôt.

Appeler le detect méthode de la BarcodeDetector pour générer un SparseArray contenant tous les codes QR le BarcodeDetector détecté sur votre photo.

Chaque élément du SparseArray contient un Barcode objet. Pour récupérer le contenu brut du code QR, vous pouvez utiliser le Barcode objets rawValue champ. Cependant, je vous suggère d’utiliser le plus facile à lire displayValue champ à la place. Voici un code qui imprime le contenu du premier code QR détecté par l’API:

Si vous exécutez votre Activity maintenant, vous devriez pouvoir voir le message contenu dans le code QR de votre photo.

4. Lecture d’un code QR à l’aide de l’appareil photo

L’API de vision mobile vous permet également de détecter et de lire très facilement les codes-barres à l’aide de la caméra de votre appareil en temps réel. Créons un nouveau Activity cela fait exactement cela.

Étape 1: définir la disposition

Créez un nouveau fichier XML de mise en page appelé activity_main.xml. La mise en page doit avoir un SurfaceView afin d’afficher les cadres de prévisualisation capturés par l’appareil photo. Si vous le souhaitez, vous pouvez également ajouter un TextView pour afficher le contenu des codes QR détectés par l’API.

Après avoir utilisé un RelativeLayout pour positionner les deux widgets, le fichier XML de mise en page doit ressembler à ceci:

Étape 2: Créez le Activity

Créez une nouvelle classe Java appelée MainActivity.java. Faites-en une sous-classe de Activity et remplacer son onCreate méthode. À l’intérieur de onCreate méthode, appel setContentView pour appliquer la mise en page que vous avez créée à l’étape précédente. Ensuite, utilisez findViewById pour obtenir des références aux widgets définis dans la mise en page.

Pour récupérer un flux d’images de l’appareil photo de l’appareil et les afficher dans le SurfaceView, créez une nouvelle instance du CameraSource classe utilisant CameraSource.Builder. Parce que le CameraSource a besoin d’une BarcodeDetector, créez-en un en utilisant le BarcodeDetector.Builder classe. Si vous le souhaitez, vous pouvez ajuster les dimensions de l’aperçu de la caméra à l’aide du setRequestedPreviewSize méthode.

Ensuite, ajoutez un rappel au SurfaceHolder du SurfaceView afin que vous sachiez quand vous pouvez commencer à dessiner les cadres d’aperçu. Le rappel doit implémenter le SurfaceHolder.Callback interface.

À l’intérieur de surfaceCreated méthode, appelez la start méthode de la CameraSource pour commencer à dessiner les cadres d’aperçu. Parce que le start attend que vous gériez un IOException, vous devriez l’appeler de l’intérieur d’un try...catch bloquer.

De même, à l’intérieur du surfaceDestroyed méthode, appelez la stop méthode de la CameraSource pour arrêter de dessiner les cadres d’aperçu.

Votre Activity est presque prêt. Cependant, vous devez toujours dire au BarcodeDetector ce qu’il doit faire lorsqu’il détecte un code QR. Créez une instance d’une classe qui implémente le Detector.Processor et transmettez-le au setProcessor méthode de la BarcodeDetector. Android Studio générera automatiquement des stubs pour les méthodes de l’interface.

À l’intérieur de receiveDetections méthode, obtenez la SparseArray de Barcode objets en appelant le getDetectedItems méthode de la Detector.Detections classe. Vous pouvez maintenant écrire le code pour faire quelque chose avec les codes QR détectés, car je vous ai déjà montré comment travailler avec SpareArray objets plus tôt dans ce didacticiel.

Voici comment afficher les codes QR displayValue dans le TextView:

Notez que vous devez intégrer l’appel au setText méthode dans un appel à la post méthode de la TextView, car receiveDetections ne s’exécute pas sur le thread d’interface utilisateur. Le non-respect de cette consigne entraînera une erreur d’exécution.

Vous pouvez maintenant compiler et exécuter votre application. Pointez l’appareil photo de votre appareil vers un code QR et vous devriez être en mesure de voir immédiatement le contenu du code QR.

Détection en temps réel

Conclusion

Dans ce didacticiel, vous avez appris à utiliser l’API de vision mobile pour lire les codes QR à partir d’images statiques ainsi que de flux de caméras en direct. Même si nous n’avons travaillé qu’avec les codes QR dans ce didacticiel, vous pouvez également utiliser l’API pour lire d’autres formats de codes à barres populaires tels que UPC-A et EAN-13.

Pour en savoir plus sur l’API de vision mobile, je vous recommande de visiter l’API Documentation.

Moyens Staff
Moyens I/O Staff vous a motivé, donner des conseils sur la technologie, le développement personnel, le style de vie et des stratégies qui vous aider.