2016-10-13 5 views
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() 
    } 

답변

0

설명서를 말한다 또한 같이

rectOfInterest를 지정하면 특정 유형의 메타 데이터에 대한 검색 성능이 향상 될 수 있습니다.

metadataOutput.rectOfInterest = focusView.frame 
focusView 미리보기 층의 맨 위에 표시 한 도면이다

을 알리기 위해

코드가 될 수