首页 > 解决方案 > 如何获得更快的数据矩阵代码读取?

问题描述

所以我一直在玩这个:https ://apps.apple.com/us/app/qr-code-barcode-scanner/id1048473097

条形码应用程序。我注意到它几乎可以对焦,同时仍保持自动对焦。此外,相机前面的物体几乎没有运动模糊(当四处移动时)。

所以我继续对我的条形码/二维码/数据矩阵代码进行了一些更改,使其与应用程序相似。我这样做的原因是他们的应用程序能够捕获一个非常小的数据矩阵代码(无法在此处显示),而我的应用程序却没有。调整后,我现在能够读取 SMALL 数据矩阵代码,但速度不如它们快。如果将其放置在正确的区域中,我的可以做到这一点(如果不是更快),但它们的区域更加一致,并且不需要太多的“finagel-ing”来找到要提取的数据矩阵代码的位置。

下面是我的 AVFoundation 代码。

    view.backgroundColor = UIColor.black
    captureSession = AVCaptureSession()
    captureSession.sessionPreset = AVCaptureSession.Preset.hd1920x1080;

    guard let videoCaptureDevice = AVCaptureDevice.default(for: .video) else { return }
    do {
        try videoCaptureDevice.lockForConfiguration()
    } catch {
        return
    }
//        videoCaptureDevice.focusMode = AVCaptureDevice.FocusMode.autoFocus
    videoCaptureDevice.autoFocusRangeRestriction = .near

//        videoCaptureDevice.activeVideoMaxFrameDuration = CMTimeMake(value: 1, timescale: 30)
//        videoCaptureDevice.activeVideoMinFrameDuration = CMTimeMake(value: 1, timescale: 30)
//        videoCaptureDevice.focusMode = AVCaptureDevice.FocusMode.continuousAutoFocus
//        videoCaptureDevice.setFocusModeLocked(lensPosition: 0.45) { (hi) in
//            print(hi)
//        }

    videoCaptureDevice.focusMode = .continuousAutoFocus
    videoCaptureDevice.unlockForConfiguration()

    let videoInput: AVCaptureDeviceInput

    do {
        videoInput = try AVCaptureDeviceInput(device: videoCaptureDevice)
    } catch {
        return
    }

    if (captureSession.canAddInput(videoInput)) {
        captureSession.addInput(videoInput)
    } else {
        failed()
        return
    }

    let metadataOutput = AVCaptureMetadataOutput()

    if (captureSession.canAddOutput(metadataOutput)) {
        captureSession.addOutput(metadataOutput)

        metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
        metadataOutput.metadataObjectTypes = types
    } else {
        failed()
        return
    }

types 只保存 ObjectType(例如:[.qr, .dataMatrix, .etc])

如果你们看到任何东西可以使这与更小的数据矩阵条形码在物理上更加一致,那就太棒了!

标签: swiftavfoundation

解决方案


推荐阅读