wcomdex
wcomdex
  • 发布:2021-07-20 16:36
  • 更新:2021-07-20 17:36
  • 阅读:1420

【报Bug】uni.scanCode无法识别字数较多的二维码

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win10

HBuilderX类型: 正式

HBuilderX版本号: 3.1.22

手机系统: Android

手机系统版本号: Android 10

手机厂商: vivo

手机机型: vivo nex s 和 华为

页面类型: vue

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:

调用uni.scanCode扫码

预期结果:

能识别含有较多字符的二维码(如500字)

实际结果:

不能识别

bug描述:

在使用vivo和华为的真机调试时发现使用uni.scanCode调起的扫码不能识别含有较多字符串的二维码(如500字左右), 一般长度的就没问题,含有500字左右的二维码使用微信扫码识别是正常的,官方能不能优化下uni.scanCode?

2021-07-20 16:36 负责人:无 分享
已邀请:

最佳回复

DCloud_Android_DQQ

DCloud_Android_DQQ

回答一下类似的问题吧。

首先:

根据 QRCode最新标准 : ISO/IEC 18004-2015

最大容量的版本为40 容错率最低的二维码,理论上可以容纳 2900个汉字字符

实际上超出大约20汉字之外的QR Code 就会使用嵌套模式,来增加图形的复杂度实现的,类似下图这样。

下面的链接是我以前对ISO 18004-2015相关章节的翻译,你可以参考一下。

https://www.jianshu.com/p/bd83e9c6ce61

这是这个问题出现的根源所在。

其次:

类似这种 复杂的嵌套结构的 像素图形识别,就变成了一个复杂的图形学问题,
而对于摄像头扫描的这种场景来说,又增加了光学识别像素识别的过程。

其实你贴上来的这个二维码,在我的手机摄像头,在我所处的光照、显示器条件下是可以识别的。如下图。

但我承认,其他的光照条件,摄像头条件下,可能识别不出来。

这是一个很复杂的数学问题。

目前uni-app android端的二维码扫描功能是基于 zxing的开源版本,在工程层面上做了很多优化,来尽可能提高识别率。
比如:逐行识别参数,灰度值检索算法,字符集码字识别等方面

解决了类似下面的问题:
https://ask.dcloud.net.cn/question/66886
https://ask.dcloud.net.cn/question/88500
https://ask.dcloud.net.cn/question/102047

但是对于更基础 的上的光学像素矩阵识别为逻辑上的黑白逻辑模点矩阵的算法层面。
我暂时无法做更深层次的优化。这需要很丰富的光学,数学,图形学基础知识积累。

我不否认,这方面微信的基础积累更深厚。

最后。

针对你的具体问题,你可以观察一下,
类似在互联网应用场景中,很少会有人把这么多字符储存到二维码当中的。

因为qrcode 并不适合大容量文本储存。 包括微信,华为等有技术积累的大公司,他们在业务系统中也不会这样做。虽然他们的扫码程序 可以拥有更好的识别正确率和效率。但是他们也不能保证,一定能识别出这种二维码图像。

这是物理上限决定的。

二维码中应该尽量储存 id,英文字符这样的唯一标识。

以上

  • wcomdex (作者)

    感谢回复,的确是识别精度的问题

    2021-07-20 18:44

  • DCloud_Android_DQQ

    回复 wcomdex: OK,建议还是仅用二维码来存放类似 id这样的关键数据

    2021-07-20 18:59

DCloud_Android_DQQ

DCloud_Android_DQQ

你发个500字的二维码 我看看

  • wcomdex (作者)

    已上传二维码到附件中,字数约550左右,是一个长json字符串

    2021-07-20 17:04

该问题目前已经被锁定, 无法添加新回复