嘿我正在使用Affectiva Affdex ios SDK。现在我有2个观点。
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)
}
}
}
}
另一个UICollectionView Cell,我正在启动一个探测器。代码就在这里:
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个屏幕空间。
问题:
每当我尝试运行应用程序时,相机流会在一秒钟后冻结。那是因为探测器启动了。 现在,如果您在那里检查github示例应用程序(https://github.com/Affectiva/affdexme-ios/tree/master/apps/AffdexMe),也可以在应用程序商店中找到。即使他们正在检测情绪,相机视图仍然打开。
我甚至尝试合并2个函数然后调用函数,但不知何故,一个函数取消了另一个函数。
这是怎么回事?
由于
答案 0 :(得分:1)
问题是您正在为第一个视图创建捕获会话,而SDK会创建另一个会话来处理相机输入。您不能同时运行多个会话。
解决此问题的一种方法是在两个视图中使用从委托方法func detector(_ detector: AFDXDetector!, hasResults faces: NSMutableDictionary!, for image: UIImage!, atTime time: TimeInterval)
返回的图像。
另一种方法是创建相机会话,然后自己将图像传递给检测器。
像这样初始化你的探测器
EMDetector = AFDXDetector(delegate: self, discreteImages: false, maximumFaces: 2, face: LARGE_FACES)
然后使用
将捕获会话中的图像传递给检测器 EMDetector.processImage(UIImage!, atTime: TimeInterval)