ถอดรหัส QR จากรูปภาพ (หรือวิธีรัน Exec ในการวนซ้ำ)


1

ฉันต้องถอดรหัสโฟลเดอร์ที่เต็มไปด้วยรหัส QR จากไฟล์ภาพ หลังจากการวิจัยจำนวนมากในที่สุดฉันก็พบว่ามี libary ที่ใช้งานได้บน Windows ไม่ใช่ตัวเลือกในอุดมคติของฉัน (Zbar จะไม่ติดตั้งบน Strawberry PERL เนื่องจาก "... ไม่สามารถรวม zbar และ zbar.h" ... หรือในบัญชีออนไลน์ของฉันซึ่งมันบอกว่ามันต้องใช้ C: คอมไพเลอร์ตัวเลือกอื่น ๆ ไม่ได้รับการอัปเดตในปีที่ผ่านมาหรือต้องการไลบรารีอื่น ๆ เช่น DecodeQR ต้องการ OpenCV / คอมไพเลอร์ ฯลฯ หรือ libdecodeqr ซึ่งฉันคิดว่าต้องการคอมไพเลอร์มากกว่า Windows / Perl)

ไม่ต้องกังวล: คำถามจะมาในอีกสักครู่

อย่างน้อยดูเหมือนว่า Zbar สำหรับ Windows จะอยู่ในโฟลเดอร์เดียว (พกพา: ขึ้นอยู่กับพา ธ ) แต่ฉันไม่รู้ว่าตัวติดตั้งวางไฟล์ไว้ในรีจิสตรีหรือไม่ ฉันควรเพิ่ม ณ จุดนี้ว่า - ถ้าใช้ 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 parlance ค่าสถานะหมายถึง (-D: อย่าแสดงอิมเมจบาร์โค้ดที่ถอดรหัส) และ (-q: แสดงเฉพาะการถอดรหัสเอาต์พุตไปยังหน้าต่างคอนโซล)

ในปัจจุบันข้อตกลงนี้หมายความว่าหน้าต่างคอนโซลจะกะพริบเปิดและปิดอย่างรวดเร็วอีกครั้งในแต่ละลูป (เปลือกไม่ปล่อยค่าให้ Stdout จนกว่าจะปิด) ซึ่งอาจเป็น "ค่อนข้างน่ารำคาญ" เมื่อผ่านไฟล์ภาพ 200+ !!

ฉันลอง "Run" แทน "Exec" แต่แน่นอนว่าไม่ได้คืนค่าใด ๆ ให้กับ Stdout หรือตัวแปร!

ฉันพยายามเพิ่ม ", 0" หลังจาก "& 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

ฉันจัดการเพื่อให้มันเรียง ฉันไม่จำเป็นต้องใช้ลูป "for" ถัดไป ฉันสร้างไฟล์ไวด์การ์ดแทนและสแกนหาภาพ jpg ทั้งหมดในโฟลเดอร์ จากนั้นฉันก็ใช้ข้อมูล XML และอ่านเพื่อค้นหาชื่อไฟล์ของ pic / QR code ที่ฉันเขียนลงไฟล์

หนึ่งปัญหา เนื่องจาก 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.