swift - 如何获得更快的数据矩阵代码读取?
问题描述
所以我一直在玩这个: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])
如果你们看到任何东西可以使这与更小的数据矩阵条形码在物理上更加一致,那就太棒了!
解决方案
推荐阅读
- nativescript - 为什么 Nativescript 静态绑定生成器会无缘无故、没有信息地失败?
- javascript - HTML - 如何滚动整个部分而不在两者之间停下来?
- javascript - React app:仅在生产中从箭头函数调用箭头函数会导致错误
- android - 覆盖片段中的 setOnClickListener 停止工作
- c# - 如何从 Xamarin 中的当前页面引用另一个页面
- c++ - opencv:wasm 中的匹配错误
- java - JSONPath:提取数组的子集会产生奇怪的结果
- xml - SVG删除保持原始形状的变换矩阵
- c# - 如何将 appsettings 数组转换为 readonlycollection
- vb.net - 删除数据表中的一行