gpt4 book ai didi

swift - 改进 Swift 中的条码扫描器

转载 作者:可可西里 更新时间:2023-11-01 00:58:14 24 4
gpt4 key购买 nike

我已经按照教程中的“标准”实现了条形码扫描。但我认为表演有点糟糕。我可以将我的相机对准条码,对焦完美且无眩光,但代码仍然检测不到条码。

我有点嫉妒 ScanLife 应用程序 - 它速度惊人,甚至无需聚焦即可检测代码。

有什么改进扫描的想法吗?

这是我的代码片段(检测部分):

var captureSession: AVCaptureSession!
var previewLayer: AVCaptureVideoPreviewLayer!
let videoCaptureDevice = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo)

captureSession = AVCaptureSession()

let videoInput: AVCaptureDeviceInput

do {
videoInput = try AVCaptureDeviceInput(device: videoCaptureDevice)

if captureSession.canAddInput(videoInput) {
captureSession.addInput(videoInput)

let metadataOutput = AVCaptureMetadataOutput()

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

metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
metadataOutput.metadataObjectTypes = metadataOutput.availableMetadataObjectTypes // Use all metadata object types by default.
metadataOutput.rectOfInterest = CGRect.zero

} else {
failed()
return
}

if (videoCaptureDevice?.isFocusModeSupported(.continuousAutoFocus))! {
do {
if(try videoCaptureDevice?.lockForConfiguration()) != nil {
videoCaptureDevice?.exposureMode = .continuousAutoExposure
videoCaptureDevice?.focusMode = .continuousAutoFocus
videoCaptureDevice?.unlockForConfiguration()
}
} catch {

}
}

videoCaptureDevice?.addObserver(self, forKeyPath: "adjustingFocus", options: NSKeyValueObservingOptions.new, context: nil)
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(ScannerViewController.focus(_:)))
mainView.addGestureRecognizer(tapGesture)

previewLayer = AVCaptureVideoPreviewLayer(session: captureSession);
previewLayer.frame = view.layer.bounds;
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
mainView.layer.addSublayer(previewLayer);

/*
// Initialize code Frame to highlight the code
codeFrameView.layer.borderColor = UIColor.green.cgColor
codeFrameView.layer.borderWidth = 2
view.addSubview(codeFrameView)
view.bringSubview(toFront: codeFrameView)
*/

captureSession.startRunning()

} else {
failed()
}
} catch {
failed()
}

最佳答案

就其值(value)而言,定义要搜索的矩形似乎可以提高性能。另外如文档所述:

Specifying a rectOfInterest may improve detection performance for certain types of metadata.

代码可以是

metadataOutput.rectOfInterest = focusView.frame

其中focusView是显示在预览层之上的view,用来发信号

关于swift - 改进 Swift 中的条码扫描器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40030668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com