Décoder le code QR de l'image (ou comment exécuter Exec en boucle)

1

J'ai besoin de décoder un dossier complet de code QR à partir de fichiers image. Après beaucoup de recherches, j'ai finalement trouvé une bibliothèque qui fonctionne sous Windows. Ce n’est pas mon choix idéal (Zbar ne s’installera pas sur Strawberry PERL car "... ne peut pas inclure zbar et zbar.h" ... ni sur mon compte en ligne où il est indiqué qu’il a besoin d’un compilateur C: en état de marche. Autres options n'a pas été mis à jour depuis des années, ou nécessite d'autres bibliothèques telles que DecodeQR nécessite OpenCV / compilateurs, etc., ou libdecodeqr qui, à mon avis, nécessite un compilateur plutôt que Windows / Perl)

Ne vous inquiétez pas: la question arrive dans un instant.

Au moins, Zbar pour Windows semble être contenu dans un seul dossier (portable: dépendant du chemin), bien que je ne sache pas si le programme d'installation a placé les fichiers dans la base de registres. Je devrais ajouter à ce stade que - si Windows est basé - le programme doit être transmis à d’autres utilisateurs. Si je peux obtenir une version pour fonctionner sur le serveur, peu importe les fichiers que je dois installer ... à condition qu'ils fonctionnent!)

En tous cas ...

Ceci est exécuté à partir de VBScript. J'ai réussi à obtenir les fichiers image dans un objet de dossier que je répète ensuite. Ceci est mon code:

For Each f in PicFiles
   Set out=objShell.Exec("C:\EventProc\Zbar\bin\zbarimg -D -q " &f)
   tmp=out.StdOut.ReadAll
   MsgBox(tmp)
Next  

En langage Zbar, les indicateurs signifient (-D: ne pas afficher l'image de code à barres décodée) et (-q: affiche uniquement la sortie décodée dans la fenêtre de la console).

À l’heure actuelle, cette disposition signifie que la fenêtre de la console s’ouvre et se referme rapidement à chaque boucle. (Le shell ne libère pas la valeur de Stdout avant sa fermeture) Cela peut être "plutôt ennuyeux" lorsque vous parcourez plus de 200 fichiers image !!

J'ai essayé "Run" plutôt que "Exec", mais bien sûr cela ne renvoie aucune valeur à Stdout ou à une variable!

J'ai essayé d'ajouter ", 0" après "& amp; f" dans le but de créer une fenêtre cachée ... mais ensuite a) soit il le considère comme faisant partie du nom de fichier et ne peut pas rendre -ou-- b) parce que c'est caché, aucune valeur n'est rapportée à StdOut Dans tous les cas, la chaîne tmp est vide.

Voici ce que j'essaie de réaliser:

Open a file, and get DetailsA
   Read folder of images
        For
        "decodeQR" is code within image (ideally silently)
        Next
 Append "decodedQR |DetailsA" to an external file 

** Je n'ai aucun problème à ouvrir / écrire des fichiers. Le problème est la fenêtre clignotante - à moins qu'il y ait une option complètement différente

Chris Brown
la source

Réponses:

0

J'ai réussi à le faire trier. Je n'avais pas besoin d'utiliser une boucle "pour la prochaine"; J'ai simplement transformé le fichier en un joker, et il scanne toutes les images jpg du dossier. Je prends ensuite les données XML et parcoure pour trouver le nom de fichier du code pic / QR que j'écris dans un fichier.

Un prob. En raison de exec, vous ne pouvez pas masquer la fenêtre de la console.

Voici le code Zbarimg utilisé:

xml_data=createobject("wscript.Shell").exec("C:\MobiEvent\Zbar\bin\zbarimg -D -q --xml C:\MobiEvent\AllPics\*.jpg").stdout.readall
test=Split(xml_data,vbLf)

Le -D arrête d'afficher l'image du code-barres, le -q génère les informations de base et -xml exporte les données XML vers le STDOUT qui est introduit dans "xml_data" qui est ensuite divisé en un tableau, que je parcoure ligne par ligne pour trouvez le code QR nom / fichier image qui est écrit dans un fichier.

Chris Brown
la source