4

我想使用 AVFoundation 设置我自己的摄像头供稿并处理实时供稿以检测微笑。

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

这段代码是很久以前写的,所以我需要做一些修改才能在外观方面按照我想要的方式使用它。

我所做的更改如下:

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

现在,当我运行应用程序时,会检测到人脸,但绘制矩形的坐标似乎有错误

看起来y在风景中有点偏离

看起来 x 在纵向上有点偏离

当我将视频重力更改为 AVLayerVideoGravityResizeAspect 时,一切似乎又可以正常工作了。

面部被捕获,实际上两者都被捕获,只是截图的时机不好

在肖像中

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

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

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

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

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

我看过一些相关的问题,例如CIDetector 在面部特征上给出错误的位置似乎有类似的问题,但它没有帮助

提前致谢。

4

0 回答 0