이미지에서 QR 디코딩 (또는 루프에서 Exec 실행 방법)


1

이미지 파일에서 QR 코드로 가득 찬 폴더를 디코딩해야합니다. 많은 연구 끝에 마침내 Windows에서 작동하는 라이브러리가 발견되었습니다. 나의 이상적인 선택은 아니다 (Zbar는 Strawberry PERL에 "... zbar와 zbar.h를 포함 할 수 없다"또는 C : 컴파일러가 필요하다는 온라인 계정에 설치되지 않는다. 다른 옵션들은 몇 년 동안 업데이트되지 않았거나 DecodeQR과 같은 다른 라이브러리가 필요합니다 .OpenCV / 컴파일러 등이 필요합니다. 또는 libdecodeqr은 Windows / Perl 대신 컴파일러가 필요하다고 생각합니다)

걱정하지 마십시오. 질문이 곧 올 것입니다.

설치 프로그램이 파일을 레지스트리에 넣었는지 여부는 알 수 없지만 Windows 용 Zbar 이상은 단일 (이동식 : 경로에 따라 다름) 폴더에 포함되어있는 것 같습니다. 이 시점에서 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"대신 "Run"을 시도했지만 물론 Stdout 또는 변수에 값을 반환하지 않습니다!

숨겨진 창을 만들려는 시도에서 "& f"뒤에 ", 0"을 추가하려고 시도했지만 a) 파일 이름의 일부로 처리하고 렌더링 할 수 없습니다. 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

나는 그것을 분류 할 수있었습니다. "for next"루프를 사용할 필요가 없었습니다. 파일 참조를 와일드 카드로 만들고 폴더의 모든 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 코드 참조 / 이미지 파일 이름을 찾으십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.