Итак, я играл с этим: https://apps.apple.com/us/app/qr-code-barcode-scanner/id1048473097
приложением со штрих-кодом. Я заметил, что он фокусируется почти на всех, сохраняя при этом автофокус. Кроме того, объект перед камерой почти не имеет размытия при движении (при перемещении).
Итак, я сделал некоторые изменения в своем коде штрих-кода / QR / матрицы данных, чтобы он был похож на приложение. Причина, по которой я это сделал, заключается в том, что их приложение смогло записать ДЕЙСТВИТЕЛЬНО маленький код матрицы данных (здесь не отображается), а мое приложение не было. После настройки я теперь могу читать код матрицы данных SMALL, но не так быстро, как они. Мой может сделать это так же быстро (если не быстрее), если он размещен в нужной области, но они более последовательны и не требуют такого большого количества "поиска", чтобы найти позицию для кода матрицы данных, который затем будет извлечен.
Ниже приведен мой код 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
}
Типы просто содержат тип объекта (например: [.qr, .dataMatrix, .etc])
Если есть что-то, что выребята понимают, что это сделало бы это более физически совместимым с меньшим штрих-кодом матрицы данных, что было бы здорово!