首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ML Kit条形码扫描不能检测屏幕照片中的QR码

ML Kit条形码扫描不能检测屏幕照片中的QR码
EN

Stack Overflow用户
提问于 2022-03-31 14:20:30
回答 1查看 1.8K关注 0票数 3

我使用com.google.mlkit:barcode-scanning:17.0.2来检测图片中的QR码。

从库中获得URI后,我创建InputImage,然后使用BarcodeScanner处理这个图像,以查找QR代码。当我在纸上选择QR码的照片时,会发现它的代码。但是当我在监视器上拍摄QR代码的时候,屏幕上的代码是永远找不到的。我应该怎么做才能在监视器屏幕的照片中检测到QR代码?

(当我使用与CameraX相同的扫描仪进行实时QR代码检测时,它会在监视器屏幕上找到代码)

代码语言:javascript
运行
复制
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代码示例

EN

回答 1

Stack Overflow用户

发布于 2022-04-09 15:52:22

很有可能你在和莫尔效应做斗争。根据QR检测算法的不同,由Moiré效应引入的高频会使探测器偏离轨道。令人沮丧的是,通常是更好的QRcode探测器被莫尔模式击败。

一个好的解决办法是:

  • 以尽可能高的分辨率拍下这张照片。
  • 对图片进行模糊处理
  • 如果可能的话,增加与最大值的对比
  • (可选)运行西格玛阈值,或仅重写所有像素,其luma分量低于32到0,所有高于224到255的像素都重写。

执行大致相同操作的另一种方法是

  • 以尽可能高的分辨率拍下这张照片。
  • 如果可能的话,增加与最大值的对比
  • 将图片降到低得多的分辨率

第二种方法结果较差,但通常可以用设备原语来实现。

监视器出现问题的另一个原因(据我所见,在您的图片中没有)是刷新速度。有时,您会发现QR代码实际上是图片上半部分的过度暴露的QRcode,而在图片的下半部分是未公开的QRcode。两者都不被认出来。这种影响是由于监视器的刷新速度和策略,而且不容易解决--您可以尝试降低监视器的亮度以增加曝光时间,直到超过1/50或1/25秒,或者从更远的地方拍摄照片并使用数字缩放。现代监视器具有更高的刷新速率,并且实际上刷新的时间超过了它们自己的驻留时间,因此不应该发生这种情况;但是,对于旧的模拟监视器,每次都会发生这种情况。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71694206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档