ZBar-尝试读取PDF417代码

时间:2019-02-01 20:59:05

标签: c webassembly zbar pdf417

我正在尝试使用Web Assembly来为网络制作PDF417条形码阅读器(那里有少数,但只有一个可靠的许可)。这个想法很简单,只需使用可以通过JavaScript调用的C代码构建一个二进制文件即可。

我跟随this guide,这使我快到了!我必须将--enable-codes=pdf417作为参数添加到configure中,以启用PDF417符号并禁用所有我不感兴趣的其他符号。

对于任何其他类型的符号(see demo),该代码实际上都非常有效,但是如果我将ZBar编译为接受PDF417,它会检测到它,但会发出警告:

WARNING: zbar/decoder/pdf417.c:73: pdf417_decode8: Assertion "clst >= 0 && clst < 9" failed.
dir=0 sig=5a44 k=9 buf[0000]=

WARNING: zbar/decoder/pdf417.c:89: pdf417_decode8: Assertion "g[0] >= 0 && g[1] >= 0 && g[2] >= 0" failed.
dir=1 sig=ca03 k=6 g0=ffffffff g1=e71 g2=585 buf[0000]=

这些断言在ZBar的7186行上。

您可以在前面提到的指南中看到我正在使用的所有代码(唯一的区别是在编译之前启用了PDF417)。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

zbar的默认行为是尝试解码所有symbol types

if(sym == ZBAR_NONE) {
    static const zbar_symbol_type_t all[] = {
    ZBAR_EAN13, ZBAR_EAN2, ZBAR_EAN5, ZBAR_EAN8,
        ZBAR_UPCA, ZBAR_UPCE, ZBAR_ISBN10, ZBAR_ISBN13,
        ZBAR_I25, ZBAR_DATABAR, ZBAR_DATABAR_EXP, ZBAR_CODABAR,
    ZBAR_CODE39, ZBAR_CODE93, ZBAR_CODE128, ZBAR_QRCODE, 
    ZBAR_PDF417, 0
    };
    const zbar_symbol_type_t *symp;
    for(symp = all; *symp; symp++)
        zbar_decoder_set_config(dcode, *symp, cfg, val);
    return(0);
}

您的图像是否包含PDF417条码?如果不是,您可以指示zbar仅解码您感兴趣的符号类型,因此不会运行PF417解码器。您可以使用symbol参数进行此操作,例如,如果您的图像仅包含QR码,

// disable all
scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 0);

// enable qr
scanner.set_config(ZBAR_QRCODE, ZBAR_CFG_ENABLE, 1);

在pyzbar中

from pyzbar.pyzbar import ZBarSymbol
decode(Image.open('pyzbar/tests/qrcode.png'), symbols=[ZBarSymbol.QRCODE])

答案 1 :(得分:0)

对于尝试使用 ZBar 阅读 PDF417 的任何人,PDF417 decoding is incomplete。不起作用。您最好的开源选择是 ZXing。