调用uni.scanCode扫码
- 发布:2021-07-20 16:36
- 更新:2021-07-20 17:36
- 阅读:1420
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: win10
HBuilderX类型: 正式
HBuilderX版本号: 3.1.22
手机系统: Android
手机系统版本号: Android 10
手机厂商: vivo
手机机型: vivo nex s 和 华为
页面类型: vue
打包方式: 云端
项目创建方式: HBuilderX
操作步骤:
预期结果:
能识别含有较多字符的二维码(如500字)
能识别含有较多字符的二维码(如500字)
实际结果:
不能识别
不能识别
bug描述:
在使用vivo和华为的真机调试时发现使用uni.scanCode调起的扫码不能识别含有较多字符串的二维码(如500字左右), 一般长度的就没问题,含有500字左右的二维码使用微信扫码识别是正常的,官方能不能优化下uni.scanCode?
最佳回复
回答一下类似的问题吧。
首先:
根据 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