0
자습서를 둘러싼 "표준"에 따라 바코드 스캐닝을 구현했습니다. 그러나 나는 그 공연이 끔찍하다고 생각한다. 초점을 맞추고 눈부심이없는 바코드에 카메라를 대고 코드가 바코드를 감지하지 못합니다.스위프트에서 바코드 스캐너 개선
그리고 저는 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()
}