最近写了一个 Go 的二维码读取库,叫 qore,已经开源: https://github.com/firesh/qcore
它解决的问题很简单:识别二维码又快又准!
特点
- 只用 Go 标准库,零第三方依赖,交叉编译很方便
- 一张图里能同时定位并识别多个二维码,返回内容和四个角的坐标
- 自带 CLI,支持 PNG / JPEG / GIF,可以递归扫描目录,也可以通过
--batch-stdin --json批量处理 - 提供 Android / iOS 移动端 SDK: https://github.com/firesh/qcore-mobile
用法
res, err := qore.Decode(img, nil) // 识别单个码
all, err := qore.DecodeAll(img, nil) // 识别多个码
r, err := qore.DecodeFile("a.jpg", nil) // 读文件,自动处理 EXIF 方向
Benchmark
测试环境是 Apple M3 Max,计时不含读文件和图片解压:
| 引擎 | 合成集(780 张) | ms/张 | BoofCV 定位召回(1232 个码) | ms/张 |
|---|---|---|---|---|
| qore | 96.67% | 7.95 | 91.2% | 19.18 |
| zxing-cpp | 93.85% | 19.61 | 79.9% | 44.17 |
| wechat-qr | 87.44% | 16.93 | 41.6% | 88.84 |
| opencv-qr | 52.18% | 64.38 | 59.9% | 171.91 |
多码场景下,qore 和 zxing-cpp 都是 100%,wechat-qr 是 55%。完整的分场景结果和失败样本在这里: https://firesh.github.io/qcore/benchmark/ ,复测脚本也在仓库里。
库本身是 MIT 协议,欢迎试用、提 issue,尤其欢迎扔一些识别不出来的图过来 🙏