【NodeJS】有什么识别率高的【二维码识别】方案吗?

可以是自己写代码,也可以是调接口,都行

目前我用 jsQR 写的,有的二维码识别不了

求有经验的大佬帮助~~~

阅读 4.1k
3 个回答

根据题主给出的二维码来看,应该是并非整个版面都是二维码导致解析失败

我也使用 jsqr 进行解析

const jsqr = require('jsqr');
const fs = require('fs')
const Jimp = require('jimp');

const buffer = fs.readFileSync('h2.png');

Jimp.read(buffer).then(function(blockimg) {
    let width = blockimg.bitmap.width,
        height = blockimg.bitmap.height,
        imgData = blockimg.bitmap.data;
        
    const code = jsqr(imgData, width, height);
    if (code) {
        console.log(code.data); //内容
    } else {
        console.log('未识别成功')
    }
}).catch(function(err2) {
    if (err2) {
        console.log(err2);
    }
});

直接解析无法实现,将图片裁剪后成功识别:

裁剪后
识别结果

裁剪图片可以手动裁剪,也可以用框架裁剪(但我感觉反正没有通用方案,还不如直接手动裁剪快,除非能自动识别二维码区块并裁剪,不然意义不大)

我的操作和二楼差不多,不过我用的是 qrcode-reader ,也是整个版面都是二维码导致解析会失败,自己裁剪以后能读取到

const QrCode = require('qrcode-reader');
const fs = require('fs');
(async () => {
  try {
    const imgData = await fs.promises.readFile('h-2.png');
    const image = await Jimp.read(imgData);
    const qr = new QrCode();
    qr.callback = function (err, value) {
      if (err) {
        console.error('err->', err);
        throw err;
      }
      console.log('-->value', value);
      console.log('-->value.result', value.result); // http://weixin.qq.com/q/02JHbHB00t8MP10000M03N
    };
    const result = qr.decode(image.bitmap);
  } catch (error) {
    console.log('--->', error);
  }
})();

1楼楼主提到的 @zxing/library ,我个人研究过一段时间,着实是有点复杂,readme里的说明已经过时了,最新的代码里的API都已经变了,直接照着readme来是报错的, 在chatgpt的帮助下我还是没有把最基本的png二维码的识别给完成,也许我的姿势不对,也欢迎有实现的大佬指点一下。

推荐问题
logo
Microsoft
子站问答
访问
宣传栏