IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

[ZXing] Scanner un QRCode sans dépendance de BarCode Reader


Sujet :

Android

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Par défaut [ZXing] Scanner un QRCode sans dépendance de BarCode Reader
    Bonjour à tous,

    Je lutte depuis deux jours pour essayer d'inclure un système de flash de QRCode dans mon application Android. J'ai réussi sans soucis, en passant par des intents, à faire fonctionner ZXing, mais il faut pour cela avoir l'application BarCode Reader installée.

    Mon objectif est d'être complétement indépendant.

    Tout les sites et forums que je visite utilisent les intents et obligent donc leur utilisateurs à passer par l'installation de Bar Code Reader. Je ne vois pas bien comment faire. J'ai bien vu cette page mais elle ne traite pas la capture de l'image via la caméra, et certaines classes utilisées n’existent pas sous Android.

    A noter que je débute sous Android, pas en Java.

    Je vous remercie par avance des réponses que vous pourrez m'apporter :=)

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2005
    Messages : 103
    Par défaut
    Bonjour,

    Pour l'Activité de capture d'image je pense que le mieux c'est de regarder comment c'est fait dans BarcodeScanner (http://code.google.com/p/zxing/sourc...eActivity.java), après tout dépend de ce que vous voulez faire, détection en live ou à partir d'une photo.

    J'utilise BarcodeScanner mais j'avais envisagé de faire en standalone sans vraiment m'y plonger dedans, je vais suivre avec attention ce sujet.

  3. #3
    Membre confirmé
    Développeur Web
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Par défaut
    bonjour
    1- vous devez installer Ant appache binary distrubutions
    2- vidéo de l'installation (très important de l'installer correctement) [ame="http://www.youtube.com/watch?v=XJmndRfb1TU"]ici[/ame]
    3-a l'aide de l'invite de commande vous devez aller dans le dossier de zxing\core et exécuter la commande 'ant -f core/build.xml'
    appache va générer un fichier core.jar sous le répertoire eg.c:\\ zxing\core\core.jar
    4-a l'aide d'eclipse :
    file-->import -->existing project into workspace | Brows
    vous devez importer le projet nommé android ensuit vous validez
    5- click droit sur le projet android build path-->configure build path--> add external jars choisissez le fichier core.jar
    il vous reste qu'a confirmer et corriger quelque erreur dans le fichier Androidmanifest.xml et corriger/supprimer quelque lange dans le fichier strings.xml dans le dossier ressource.
    fini avec les problèmes d'importation de zxing
    cordialement
    Echap

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Par défaut
    Bonjour,

    Quand je dis :

    Citation Envoyé par vivelapsp Voir le message
    J'ai bien vu cette page mais elle ne traite pas la capture de l'image via la caméra, et certaines classes utilisées n’existent pas sous Android.
    Il faut bien comprendre que je n'ai aucun problème pour l'importation de ZXing (suffisamment de tuto grouille sur le net pour que j'ose intervenir à ce sujet). Mon soucis est bel et bien d'utiliser l'API sans obliger l'utilisateur à installer QR Code Reader.

    Merci quand même pour vos interventions

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2005
    Messages : 103
    Par défaut
    Tout dépend de ce que tu veux faire mais pour utiliser l'Api une méthode simple et d'utiliser MultiFormatReader que l'on peut paramétré par la méthode setHints qui prend une Map avec en clé DecodeHintType (la classe détailles les types d'objets) et en valeur un objet (par exemple un vecteur de format possible, un chaine pour le charset etc.).

    Ensuite utiliser la méthode decodeWithState qui prend un BinaryBitmap en paramètre et retourne un objet Result. Pour convertir une image en BinaryBitamp il y a la classe dans le projet BufferedImageLuminanceSource J2SE.

    Pour récupérer l'image on peut utiliser un PreviewCallBack ou CameraCallback et convertir les byte en image.

    C'est un peu en vrac mais c'est le résultat de mes recherches, j'en suis encore au tâtonnement.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Par défaut
    Merci pour ces infos. Pour la partie décodage, ce que tu dis semble plus ou moins correspondre au lien que j'ai donné dans mon premier post.

    Par contre, quand tu parles du BufferedImageLuminanceSource, il est compatible android ? Car il ne se trouve pas dans la librairy pour Android, je pourrais l'ajouter, mais apparemment c'est du J2SE et c'est pas ça qui est utilisé pour Android.

    Pour la partie capture, je suis encore dans le flou, je vais voir si je peux exploiter tes pistes.

    EDIT : J'oubliais, pour répondre à tes questions, mon souhait est de faire une détection à partir de la vidéo, seulement sur un QRCode (j'utiliserais donc QRCodeReader plutot que MultiFormatReader).

  7. #7
    Membre confirmé
    Développeur Web
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Par défaut
    Citation Envoyé par vivelapsp Voir le message
    Bonjour à tous,

    Je lutte depuis deux jours pour essayer d'inclure un système de flash de QRCode dans mon application Android. J'ai réussi sans soucis, en passant par des intents, à faire fonctionner ZXing, mais il faut pour cela avoir l'application BarCode Reader installée.

    Mon objectif est d'être complétement indépendant.

    Tout les sites et forums que je visite utilisent les intents et obligent donc leur utilisateurs à passer par l'installation de Bar Code Reader. Je ne vois pas bien comment faire. J'ai bien vu cette page mais elle ne traite pas la capture de l'image via la caméra, et certaines classes utilisées n’existent pas sous Android.
    A noter que je débute sous Android, pas en Java.
    Je vous remercie par avance des réponses que vous pourrez m'apporter :=)
    voila pour quoi j'ai répondu avec la solution de l'importation
    quant tu importe le projet correctement tu peux rajouter des Activty autant que veux (dans le manifest aussi) et tu peux éliminer des fonctionnalité comme tu veux aussi ensuite compiler le tout bye

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Par défaut
    Si j'ai bien compris ta solution, tu lancerais directement l'activity de l'application contenue dans ton projet, et donc la nécessité d'avoir BarCode Reader disparaîtrait ?

    Cette solution est loin d'être la plus propre à mon gout, mais bon, elle me conviendrait tout de même.

    Pourrais tu développer / illustrer stp ? Pour rappel, je suis débutant sur Android, et je n'en connais pas encore bien tout les mécanismes.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Par défaut
    Je suis actuellement entrain de faire comme tu l'a proposé, Echap. J'ai viré tout les packages inutiles pour mon cas et je n'ai gardé que le package parent (com.google.zxing.client.android), le package camera, et le package encode.


    Le problème est que je n'ai absolument pas touché a la classe ViewFinderView ou au package camera, et que pourtant, mon affichage bug. Le rectangle blanc n'est pas centré au milieu, il semble d'ailleurs que ma vue n'apparaisse qu'au quart de l'écran.

    Je ne vois donc pas ce qui perturbe l'affichage. As tu déjà eu ce problème ? Ou quelqu'un d'autre l'a t-il déjà eu ?

  10. #10
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2005
    Messages : 103
    Par défaut
    Dans le manifest il faut forcer l'orientation à 'landscape'. Par défaut c'est paramétré pour du landscape, j'ai fais des tests en mode portrait, mais je trouve que la reconnaissance est plus lente, faut que je creuse un peu plus.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Par défaut
    Je viens de tester, en landscape j'ai le même probleme...

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Par défaut
    Bonjour à tous, j'ai trouvé comment faire fonctionner zxing correctement en landscape, pour ceux qui auraient le même problème, il faut bien penser à ajouter ça dans le manifest :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <supports-screens
    	android:xlargeScreens="true"
    	android:largeScreens="true"
            android:normalScreens="true"
            android:smallScreens="true"
            android:anyDensity="true"
    />
    Cependant, je tente toujours d'avoir un résultat aussi satisfaisant tant en landscape qu'en portrait.

    Si quelqu'un a des idées, n'hésitez pas !

  13. #13
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2005
    Messages : 103
    Par défaut
    Pour le mode portrait je vais poster ce que j'ai trouvé, sachant que c'est pas parfait (j'ai un bug sur la preview quand je viens de certaines Activité (pas toute)).

    Donc dans :
    CameraConfigurationManager dans la méthode setDesiredCameraParameters il faut dire qu'on est en mode portrait.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                camera.setDisplayOrientation(90);
                parameters.set("orientation", "portrait");
    Ensuite dans CameraManager il faut modifier la gestion du rectangle de preview dans la méthode getFramingRectInPreview.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                    rect.left = rect.left * cameraResolution.y / screenResolution.x;
                    rect.right = rect.right * cameraResolution.y / screenResolution.x;
                    rect.top = rect.top * cameraResolution.x / screenResolution.y;
                    rect.bottom = rect.bottom * cameraResolution.x / screenResolution.y;
    Pour gérer la taille du rectangle c'est dans la méthode getFramingRect, moi j'ai fais un peu bourrin mais il faut recalculer les positions pour pas afficher le rectangle plus haut que large (car on est en mode portrait).

    Ensuite dans la partie de décodage il faut penser à retourner l'image donc dans DecodeHandler dans la méthode decode on retourne l'image et on inverse les tailles passé à buildLuminanceSource :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    byte[] rotatedData = new byte[data.length];        
                for (int y = 0; y < height; y++) {
                    for (int x = 0; x < width; x++)
                        rotatedData[x * height + height - y - 1] = data[x + y * width];
                }
                int tmp = width;
                width = height;
                height = tmp;
    Sinon dans le Manifest on spécifie normalement l'orientation, mais ici on pourra le gérer dans CaptureActivity avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    Je précise que ce que je viens d'écrire c'est dans le cas d'un lancement de l'activité directement en mode portrait (ou en gérant avec les préférences de l'application), ça ne gère pas la rotation de l'écran en direct (les tests que j'ai fait n'étais pas concluant).


    Sinon si quelqu'un a une idée pour le bug que j'ai décris en haut, donc si je lance en mode landscape et de n'importe où MainActivity ou ActivitySecondaire tout marche. Par contre si je lance pour la première fois en mode portrait depuis ActivitySecondaire ça ne marche pas la preview de CaptureActivity , semble afficher un élément du layout de ActivitySecondaire, d'ailleurs si je suis dans CaptureActivity en mode portrait et que je lance ActivitySecondaire, certains éléments du layout ne s'affiche pas (invisible, j'arrive à cliquer sur les boutons sans les voir).

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 22
    Par défaut
    merci pour cette aide sur le mode portrait, je cherchais comment faire et je ne trouvais pas. Par contre, j'ai un souci.
    Mon application doit tourner sur android 2.1 minimum or, cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    camera.setDisplayOrientation(90);
    n'apparaît que dans la 2.2 et donc, la rotation ne marche pas. J'ai bien essayé de la remplacer par celle ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    parameters.setRotation(90);
    ça marche mais que sur les téléphones en 2.1 ceux en 2.2 et supérieur, bah ça marche pas

  15. #15
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 322
    Par défaut
    Bonjour,
    Il faut simplement que tu testes ta version du sdk

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (android.os.Build.VERSION.SDK_INT <= 7 )	{
     //code en 2.1 ou inférieur
    }

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 22
    Par défaut
    ok donc va faloir que je change la library android utilisée de base. J'utilise la 2.1 donc je devrai la passer en 2.2

    Merci pour cette réponse rapide

    Par contre, je n'arrive pas à trouver où régler la taille du rectangle de décodage.

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 64
    Par défaut Problème intégration zxing
    Bonjour,

    Je développe actuellement une application Android et je souhaiterais intégrer la bibliothèque ZXing sans passer par barcode scanner.

    J'ai suivi toutes les indications du topic ainsi que ce tuto.

    Seulement j'ai un problème. Lorsque j'intègre ZXing dans mon projet, des erreurs apparaissent, toutes en rapport avec le fichier R. Celui-ci n'est pas généré dans mon projet.

    Je précise que je n'ai rien modifié du code ZXing fourni, je l'ai directement intégré à mon projet comme c'est dit dans le tuto.

    Avez-vous une idée ? Merci d'avance

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/10/2014, 11h52
  2. Réponses: 9
    Dernier message: 01/04/2012, 04h44
  3. [WD14] Scanner un document sans passer par les fonctions TWAIN
    Par devalender dans le forum WinDev
    Réponses: 3
    Dernier message: 22/09/2009, 15h53
  4. gestion barcode scanner
    Par minsh dans le forum ASP.NET
    Réponses: 2
    Dernier message: 16/04/2007, 16h05
  5. [VB6]Compilation sans dépendance
    Par belfaigore dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 07/08/2006, 03h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo