2017-11-11 2 views
0

안녕하세요, Affectiva Affdex ios SDK를 사용하고 있습니다. 이제 조회수는 2입니다.카메라가 감정 감지기가 작동하지 않습니다.

  1. UIView -> 어디에서 카메라 스트림을 실행합니까? 동일한에 대한 코드는 여기에 있습니다 :

    func allConfig(withCamView cams:UIView) { 
    
    let captureDevice = AVCaptureDeviceDiscoverySession(deviceTypes: [.builtInDualCamera, .builtInWideAngleCamera], mediaType: AVMediaTypeVideo, position: .unspecified) 
    
    for device in (captureDevice?.devices)! { 
    
        if device.position == .front{ 
    
         do { 
          let input = try AVCaptureDeviceInput(device: device) 
    
          if session.canAddInput(input) { 
           session.addInput(input) 
          } 
    
          if session.canAddOutput(previewOutput) { 
           session.addOutput(previewOutput) 
          } 
    
          previewLayer = AVCaptureVideoPreviewLayer(session: session) 
          previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill 
          previewLayer.connection.videoOrientation = .portrait 
    
          cams.layer.addSublayer(previewLayer) 
    
          previewLayer.position = CGPoint(x: cams.frame.width/2, y: cams.frame.height/2) 
          previewLayer.bounds = cams.frame 
    
    
          session.startRunning() 
    
    
         } catch let avError { 
          print(avError) 
         } 
        } 
    } 
    
    } 
    
  2. 다른 UICollectionView 셀 내가 검출기를 시작하고있다 곳. 그에 대한 코드는 여기에 있습니다 :

    func createDetector() { 
    destroyDetector() 
    let captureDevice = AVCaptureDeviceDiscoverySession(deviceTypes: [.builtInDualCamera, .builtInWideAngleCamera], mediaType: AVMediaTypeVideo, position: .unspecified) 
    for device in (captureDevice?.devices)! { 
    
        if device.position == .front{ 
         EMDetector = AFDXDetector(delegate: self, using: device, maximumFaces: 2, face: LARGE_FACES) 
         EMDetector.maxProcessRate = 5 
    
         // turn on all classifiers (emotions, expressions, and emojis) 
         EMDetector.setDetectAllExpressions(true) 
         EMDetector.setDetectAllEmotions(true) 
         EMDetector.setDetectAllAppearances(true) 
         EMDetector.setDetectEmojis(true) 
    
         // turn on gender and glasses 
         EMDetector.gender = true 
         EMDetector.glasses = true 
    
    
    
         // start the detector and check for failure 
         let error: Error? = EMDetector.start() 
         if nil != error { 
          print("Some Faliure in detector") 
          print("root cause of error ------------------------- > \(error.debugDescription)") 
         } 
        } 
    } 
    
    } 
    

이보기 50 대 50 화면 공간을.

문제 : 나는 시도하고 응용 프로그램을 실행 할 때마다

이 카메라 스트림 1 초 후 정지. 그리고 그것은 감지기가 시작하기 때문입니다. github 샘플 앱 (https://github.com/Affectiva/affdexme-ios/tree/master/apps/AffdexMe)을 확인하면 앱 스토어에서도 사용할 수 있습니다. 감정을 감지하더라도 카메라보기는 계속 켜져 있습니다.

나는 2 개의 함수를 병합하고 함수를 호출하기까지했지만, 어떻게 든 하나의 함수가 다른 함수를 취소했다.

어떻게해야할까요?

감사

답변

1

문제는 당신이 첫 번째 뷰 캡처 세션을 만들와 SDK는 카메라 입력을 처리하기 위해 다른 세션을 생성하는 것입니다. 동시에 여러 세션을 실행할 수 없습니다.

이 문제를 해결하는 한 가지 방법은 두보기 모두에서 대리자 메서드 func detector(_ detector: AFDXDetector!, hasResults faces: NSMutableDictionary!, for image: UIImage!, atTime time: TimeInterval)에서 반환 된 이미지를 사용하는 것입니다.

또 다른 방법은 카메라 세션을 생성 한 다음 이미지를 직접 감지기로 전달하는 것입니다.

  1. EMDetector = AFDXDetector(delegate: self, discreteImages: false, maximumFaces: 2, face: LARGE_FACES)

  2. 처럼 검출기가 그 다음에

    EMDetector.processImage(UIImage!, atTime: TimeInterval)

+0

헤이 많은 많은 감사를 사용하여 검출기에 캡처 세션의 이미지를 전달 초기화 대답. 나는 정말로 해결책이 필요했다. 질문이 있습니다. 첫 번째 방법으로 간다면 두 뷰에서 대리자 메서드 및 다른 처리 된 이미지 메서드를 정의해야합니다. –

+1

두 뷰에서 대리자 메서드를 정의하면 무엇을 의미합니까? 당신의 탐지기는 오직 하나의 대의원을 가지고 있어야하고, 두보기 모두에 이미지를 전달하십시오. –

+0

안녕하세요! 내 캠 세션을 통해 이미지를 감지기로 전달하는 다른 방법을 사용하고 있습니다. 이미지에서 얼굴을 찾을 수 없습니다. 여기서 문제가 될 수있는 것은 무엇입니까? –

관련 문제