web-dev-qa-db-fra.com

Android Bibliothèque de scanner QRCode

Qu'avons-nous à notre disposition (le cas échéant) que nous pouvons appeler pour la découverte et l'extraction de données QR sur une image?

Bien qu'il y ait eu à ce jour de nombreux articles faisant référence à la bibliothèque ZXing pour l'analyse QRCode, je n'ai pas trouvé que c'était une solution qui fonctionne pour moi. Plusieurs autres ont demandé des alternatives de scan QRCode et je n'ai pas vu de commentaires utiles. J'ai pensé que je pourrais demander à la communauté une fois de plus quelles pourraient être les autres options pour une bibliothèque de code QR qui ne lance pas d'activité et appelle en dehors de nos propres applications. Il devrait numériser les images de l'API Camera2 d'une manière très simpliste. Ce ne devrait pas être une bibliothèque compliquée. Je n'avais pas vu d'exemples ou d'individus en parler de cette manière.

En fait, cela me demande pourquoi il n'y a pas eu d'implémentations natives de la fonctionnalité QRCode ajoutées peut-être à la bibliothèque de l'appareil photo ou à un endroit similaire dans le SDK Google nativement dans le système d'exploitation.

Appeler et exiger une autre application (ou même demander un téléchargement) n'est pas une solution élégante et aucun utilisateur ne devrait succomber à une telle chose. En tant que développeurs, nous devons avoir accès à une bibliothèque capable d'extraire un QRCode d'une image ou d'un cadre dont nous pouvons ensuite supprimer les données encodées.

30
Jay Snayder

Alors que Sean Owen et d'autres qui ont travaillé sur la bibliothèque Zxing d'origine avaient fourni une approche pour travailler avec les bibliothèques de codes-barres au cours des dernières années, Google a finalement publié une version officielle avec Google Play Services pour la gestion du qr et des codes-barres.

La bibliothèque de détection de codes-barres est décrite ici. L'inclusion de ces bibliothèques permettra une intégration en douceur. Je republierai avec un exemple de code pour obtenir ces résultats à partir d'une image capturée. Pour le moment, je voulais mettre à jour ma réponse pour cette version officielle. Si cela fournit en effet un bon moyen d'obtenir ces informations (sans sauter à travers les cerceaux et les complications), alors je mettrai à jour avec la source et cocherai cela comme une réponse acceptée.

La bibliothèque de détection que Google a fournie au cours de l'année écoulée a été une bibliothèque beaucoup plus facile à utiliser. Il permet une intégration rapide avec les API de la caméra et extrait les informations avec simplicité. Ce serait l'élément que je suggérerais d'aller de l'avant avec la reconnaissance. Un extrait rapide est illustré ci-dessous pour la gestion d'un Qr-code. Une poignée de pseudocodes y est également conservée.

public final void analyzeFrameForQrCode(byte[] qrCodePictureF, int imageFormatF, XriteSize previewWindowSizeF)
{
    if(!qrCodeDetectionPossible() || qrCodePictureF == null || mIsAnalyzingQrCodeFrame)
    {
        return;
    }

    ... //Bitmap conversion code

    Frame frame = new Frame.Builder().setBitmap(pictureTaken).build();
    SparseArray<Barcode> barcodes = mBarcodeDetector.detect(frame);
    if(barcodes != null && barcodes.size() != 0)
    {
        Barcode qrCode = barcodes.valueAt(0);//barcodes.get(Barcode.QR_CODE);
        if(qrCode != null)
        {
             if(extractInformationFromQrCode(qrCode.rawValue)) {
                    mIsRequestingBarcodeDetection = false;
                    vibrateForQrCodeDiscovery();
                    ((Activity)mContext).runOnUiThread(new Runnable() {
                        @Override
                        public void run()
                        {
                            hideBarcodeDetection(true);
                        }
                    });
                }
            }
        }

     ... //Cleanup and code beyond Qr related material

   } 
}

Il existe bien sûr d'autres appels disponibles dont vous pouvez profiter. Mais il n'y a vraiment que quelques lignes là-dedans. Le service d'analyse des trames avec la bibliothèque n'est cependant pas là par défaut sur les appareils. Vous devez donc vérifier si la bibliothèque est disponible ou non (par exemple, lorsque Internet n'est pas disponible) avant de calculer également. C'est une légère nuisance de celui-ci. J'avais supposé qu'il serait disponible en tant que mises à jour pour les appareils à l'avenir dans le cadre de la bibliothèque de support ou des services Google sur tous les appareils. Mais il faut d'abord la communication avec un service externe pour utiliser ces appels de bibliothèque. Une fois qu'il fait cela une fois, cet appareil est bon à partir de ce moment.

Dans mon petit exemple, je porte un toast après une vérification, puis je quitte l'activité et je laisse l'utilisateur vérifier sa connexion. Cela peut également être fait avec un petit exemple de code.

if(!mBarcodeDetector.isOperational())
{
    updateUserInstructions("The barcode library cannot be downloaded");
    return false;
}

Modifier (mettre à jour):

Un temps considérable s'est écoulé depuis l'utilisation des dernières bibliothèques Google Play Services Vision disponibles pour la détection de codes-barres. Bien que la limitation de la nécessité de télécharger la bibliothèque via le wifi soit en effet une limitation, il s'agit d'un processus unique. Et soyons honnêtes ...

... nos appareils auront une connexion. La bibliothèque elle-même est téléchargée en arrière-plan afin que vous ne remarquiez même pas qu'elle se produit à moins qu'il y ait du mal à la télécharger et que vous deviez alors signaler une mesure corrective appropriée telle que l'activation d'une connexion à Internet.

Un autre bémol est qu'il est parfois un peu délicat avec la façon dont vous intégrez la bibliothèque dans votre application. L'utiliser comme projet de bibliothèque a fonctionné sur certains appareils, puis a échoué sur d'autres. L'ajout du bocal au chemin de génération a fonctionné sur un plus grand nombre d'appareils (cela pourrait être tout, mais cela a résolu un problème). Donc, en tant que tel, je le ferais en utilisant la méthode secondaire lors de son inclusion dans vos projets pour l'instant.

9
Jay Snayder

Bibliothèque de scanner Android QRCode

Cela peut vous aider, cette bibliothèque ne nécessite aucun téléchargement ni utilisation d'aucune application externe. Nous pouvons directement l'intégrer dans votre application et l'utiliser pour scanner un code QR.

https://github.com/dm77/barcodescanner

Ce wiki vous aidera à vous intégrer à votre application,

https://github.com/dm77/barcodescanner/blob/master/README.md

7
VivekTamilarasan

Vous pouvez également vérifier MobileVisionBarcodeScanner (notez que je suis l'auteur de ce package). Il est alimenté par l'API de vision mobile de Google. Voir également l'aperçu ici .

4
Nosakhare Belvi

J'ai utilisé cette bibliothèque dans mon application. Il fonctionne également avec xing mais vous n'avez pas besoin d'applications tierces. De plus, il est vraiment facile à utiliser.

https://github.com/journeyapps/zxing-Android-embedded

Peut-être que vous avez cherché quelque chose comme ça.

3
Daniel S.

Vous avez déjà trouvé la bibliothèque que vous cherchez, je pense. Voir le core/ module:

https://github.com/zxing/zxing/tree/master/core

Vous regardez simplement l'intégration basée sur Intent, mais, en fait, l'analyse principale est sa propre bibliothèque autonome que vous pouvez intégrer dans votre propre application.

Je pense que l'intégration basée sur Intent est la meilleure dans la plupart des cas, simplement parce qu'elle est si simple, et, la plupart des gens n'ont pas le temps de réimplémenter leur propre interface utilisateur de numérisation et autres sur le noyau. La plupart des appareils ont déjà Barcode Scanner installé, il n'a donc généralement pas besoin d'être téléchargé.

Faites votre choix. C'est pourquoi il existe au moins deux façons de l'utiliser.

1
Sean Owen