Decode QR da imagem (ou como executar o Exec em um loop)

1

Eu preciso decodificar uma pasta cheia de código QR de arquivos de imagem. Depois de muita pesquisa, finalmente encontrei uma biblioteca que funciona no Windows. Não é a minha escolha ideal (o Zbar não instala no Strawberry PERL como "... não posso incluir zbar e zbar.h" ... ou na minha conta on-line onde ele diz que precisa de um compilador C: funcional. Outras opções foi atualizado em anos, ou exigir outras bibliotecas, como DecodeQR requer OpenCV / compiladores etc, ou libdecodeqr que eu acho que precisa de um compilador em vez de Windows / Perl)

Não se preocupe: pergunta chegando em breve.

Pelo menos o Zbar para Windows parece estar contido em uma única pasta (portátil: dependente de caminho), embora eu não saiba se o instalador colocou arquivos no registro. Eu deveria adicionar neste ponto que - se baseado em Windows - o programa deve ser passado para outros usarem. Se eu conseguir uma versão para trabalhar no servidor, não importa quais arquivos eu tenho que instalar ... desde que funcionem!)

De qualquer forma ...

Isso está sendo executado a partir do VBScript. Eu consegui obter os arquivos de imagem em um objeto de pasta que eu reitero através de. Este é o meu código:

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

No jargão do Zbar, os flags significam (-D: Não exibe a imagem do código de barras decodificada) e (-q: mostra apenas a saída decodificada para a janela do console)

No momento, esse arranjo significa que a janela do console pisca e fecha rapidamente novamente em cada loop. (O shell não libera o valor para Stdout até que seja fechado) Isso pode ser "bastante irritante" ao passar por mais de 200 arquivos de imagem!

Eu tentei "Run" em vez de "Exec", mas é claro que não retorna nenhum valor para o Stdout ou para uma variável!

Eu tentei adicionar ", 0" depois de "& f" em uma tentativa de criar uma janela oculta ... mas depois a) ou trata-o como parte do nome do arquivo e não pode renderizar -ou- b) porque está oculto, nenhum valor é reportado ao StdOut De qualquer forma, a string tmp está em branco.

Aqui está o que estou tentando alcançar:

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 

** Não tenho problema para abrir / gravar arquivos. O problema é a janela piscando - a menos que haja uma opção completamente diferente

    
por Chris Brown 23.02.2015 / 10:07

1 resposta

0

Consegui resolvê-lo. Eu não precisei usar um loop "para o próximo"; Eu simplesmente fiz o arquivo ref um curinga, e ele verifica todas as imagens jpg na pasta. Eu, então, pego os dados XML, e leio para encontrar o nome do arquivo do código pic / QR que eu escrevo em um arquivo.

Um prob. Devido ao exec, você não pode ocultar a janela do console.

Aqui está o código do Zbarimg usado:

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)

O -D pára de exibir a imagem do código de barras, o -q produz a informação bacic e -xml exporta os dados XML para o STDOUT que é alimentado em "xml_data" Isso é então dividido em um array, e eu passo por ele por linha para encontrar o nome do arquivo de ref / image do código QR que é gravado em um arquivo.

    
por 02.03.2015 / 19:03