c - ZBar - 尝试读取 PDF417 代码
问题描述
我正在尝试使用 Web Assembly 为 Web 制作PDF417条码阅读器(那里有一些,但唯一可靠的是获得许可的)。这个想法很简单,只需使用可以通过 JavaScript 调用的 C 代码构建一个二进制文件。
我按照这个指南让我几乎到了那里!我必须添加--enable-codes=pdf417
一个参数来configure
启用 PDF417 符号并禁用我不感兴趣的所有其他符号。
该代码实际上适用于任何其他类型的符号(参见演示)但如果我编译 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]=
您可以在我之前提到的指南中看到我使用的所有代码(唯一的区别是我在编译之前启用了 PDF417)¿有什么想法吗?
解决方案
zbar 的默认行为是尝试解码所有符号类型。
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 解码器将不会运行。您可以使用符号参数来执行此操作,例如,如果您的图像仅包含 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])
推荐阅读
- python - 从 Python 2.7 升级到 Python 3.8 后的 MemoryError
- python - 有没有一种有效的方法来查找 numpy 数组中框的平均值?
- mysql - php artisan migrate 没有在 laravel 7 中制作表格
- java - 特定主题的预训练向量、nlp、word2vec、词嵌入?
- r - 从 shinyWidgets 更改下拉按钮的 css 参数
- angular - 未找到模块:错误:无法解析 FaunaDB JavaScript 驱动程序中的“http”
- c# - Gmail 像这样创建 mail+12321@gmail.com
- c++ - 在 Visual Studio for C++ 中使用通过 VCPKG 安装的 Qt5
- angular - Angular 服务无法使用外部 API
- javascript - 如何配置 `direflow-webpack.js` 以支持 `sass` 文件