我使用com.google.mlkit:barcode-scanning:17.0.2
来检测图片中的QR码。
从库中获得URI后,我创建InputImage
,然后使用BarcodeScanner
处理这个图像,以查找QR代码。当我在纸上选择QR码的照片时,会发现它的代码。但是当我在监视器上拍摄QR代码的时候,屏幕上的代码是永远找不到的。我应该怎么做才能在监视器屏幕的照片中检测到QR代码?
(当我使用与CameraX
相同的扫描仪进行实时QR代码检测时,它会在监视器屏幕上找到代码)
val image = InputImage.fromFilePath(context, uri)
val scanOptions =
BarcodeScannerOptions.Builder()
.setBarcodeFormats(
Barcode.FORMAT_QR_CODE,
)
.build()
val scanner = BarcodeScanning.getClient(scanOptions)
scanner.process(image)
.addOnSuccessListener {
val code = it.getOrNull(0)?.rawValue
if (code == null) {
// code NOT found
} else {
// code was found
}
}
纸上的QR码实例
在监视器屏幕上找不到的QR代码示例
发布于 2022-04-09 15:52:22
很有可能你在和莫尔效应做斗争。根据QR检测算法的不同,由Moiré效应引入的高频会使探测器偏离轨道。令人沮丧的是,通常是更好的QRcode探测器被莫尔模式击败。
一个好的解决办法是:
执行大致相同操作的另一种方法是
第二种方法结果较差,但通常可以用设备原语来实现。
监视器出现问题的另一个原因(据我所见,在您的图片中没有)是刷新速度。有时,您会发现QR代码实际上是图片上半部分的过度暴露的QRcode,而在图片的下半部分是未公开的QRcode。两者都不被认出来。这种影响是由于监视器的刷新速度和策略,而且不容易解决--您可以尝试降低监视器的亮度以增加曝光时间,直到超过1/50或1/25秒,或者从更远的地方拍摄照片并使用数字缩放。现代监视器具有更高的刷新速率,并且实际上刷新的时间超过了它们自己的驻留时间,因此不应该发生这种情况;但是,对于旧的模拟监视器,每次都会发生这种情况。
https://stackoverflow.com/questions/71694206
复制相似问题