Декодировать QR из изображения (или как запустить Exec в цикле)


1

Мне нужно декодировать папку, полную QR-кода из файлов изображений. После МНОГО исследований я наконец нашел библиотеку, которая работает на Windows. Не мой идеальный выбор (Zbar не будет устанавливаться на Strawberry PERL как "... не может включать zbar и zbar.h" ... или на мою учетную запись онлайн, где он говорит, что ему нужен работающий компилятор C :. не обновлялся годами или требует, чтобы другие библиотеки, такие как DecodeQR, требуют OpenCV / компиляторы и т. д., или libdecodeqr, который, я думаю, нуждается в компиляторе, а не в Windows / Perl)

Не волнуйтесь: вопрос скоро появится.

По крайней мере, Zbar для Windows, кажется, содержится в одной папке (portable: путь зависит), хотя я не знаю, поместил ли установщик файлы в реестр. Я должен добавить в этот момент, что - если на основе Windows - программа должна быть передана для использования другими. Если я могу заставить версию работать на сервере, не имеет значения, какие файлы мне нужно установить ... при условии, что они работают!)

Тем не мение ...

Это выполняется из VBScript. Мне удалось поместить файлы изображений в объект папки, который я затем повторяю. Это мой код:

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

На языке Zbar флаги означают (-D: не отображать декодированное изображение штрих-кода) и (-q: отображать только декодированный вывод в окно консоли)

В настоящее время это расположение означает, что окно консоли мигает открытым и снова быстро закрывается в каждом цикле. (Оболочка не возвращает значение в Stdout, пока не закроется) Это может быть «довольно раздражающим» при просмотре более 200 файлов изображений!

Я попробовал «Выполнить», а не «Exec», но, конечно, это не возвращает никакого значения Stdout или переменной!

Я попытался добавить ", 0" после "& amp; f" в попытке создать скрытое окно ... но потом а) либо обрабатывает его как часть имени файла и не может отобразить -или- б) поскольку он скрыт, в StdOut не сообщается ни о каком значении в любом случае строка tmp пуста.

Вот что я пытаюсь достичь:

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 

** У меня нет проблем с открытием / записью файлов. Проблема в мигающем окне - если нет совершенно другой опции

Ответы:


0

Мне удалось разобраться. Мне не нужно было использовать цикл «для следующего»; Я просто сделал файл ref подстановочным знаком, и он сканирует все jpg-изображения в папке. Затем я беру данные XML и читаю, чтобы найти имя файла кода pic / QR, который я записываю в файл.

Один проб. Благодаря exec, вы не можете скрыть окно консоли.

Вот используемый код Zbarimg:

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)

-D останавливает отображение изображения штрих-кода, -q выводит информацию bacic и -xml экспортирует данные XML в STDOUT, который передается в «xml_data», который затем разделяется на массив, и я пролистываю его построчно найти QR-код ref / имя файла изображения, которые записываются в файл.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.