AVCaptureVideoPreviewLayer问题视频重力和人脸检测准确度

时间:2016-05-19 06:31:14

标签: ios avfoundation avcapturesession face-recognition cifacefeature

我想使用AVFoundation设置我自己的相机Feed并处理实时Feed以检测微笑。

我需要的很多东西都在这里完成:https://developer.apple.com/library/ios/samplecode/SquareCam/Introduction/Intro.html

这段代码写得很久了,所以我需要做一些修改,以便按照我想要的方式使用它。

我所做的更改如下:

  • 我启用了自动布局和尺寸类,因此我想支持不同的屏幕尺寸。我还将预览图层的尺寸更改为全屏。
  • 会话Preset设置为适用于iPhone和iPad的AVCaptureSessionPresetPhoto
  • 最后,我将视频重力设置为AVLayerVideoGravityResizeAspectFill(这似乎是关键点)

现在,当我运行应用程序时,会检测到面部但是绘制矩形的坐标中似乎存在错误

seems like the y is a bit off here in landscape

seems like the x is a bit off in portrait

当我将视频重力更改为AVLayerVideoGravityResizeAspect时,一切似乎再次正常工作。

face gets captured, both actually do, just bad timing for the screenshot

in portrait as well

唯一的问题是,相机预览不是全屏所需的尺寸。

所以现在我想知道为什么会这样。我注意到方形凸轮中的一个函数:videoPreviewBoxForGravity,它处理重力类型并且似乎进行调整。 - (CGRect)videoPreviewBoxForGravity:(NSString *)gravity frameSize:(CGSize)frameSize apertureSize:(CGSize)apertureSize

我注意到的一件事是,无论重力类型如何,框架尺寸都保持不变。

最后我在其他地方阅读,当将重力设置为AspectFill时,Feed的某些部分会被裁剪,这是可以理解的,类似于ImageView的scaletoFill。

我的问题是,如何进行正确的调整,使此应用适用于任何VideoGravity类型和任何大小的预览层。

我已经看了一些相关的问题,例如CIDetector give wrong position on facial features似乎有类似的问题,但它没有帮助

先谢谢。

0 个答案:

没有答案
相关问题