CIF人脸特征边界

CIFaceFeature Bounds

在使用 CIFaceFeature 进行面部检测时,我 运行 遇到了边界问题。当试图在识别出的人脸周围放置一个方框时,框架总是放错地方。 Stack Overflow 上的其他问题指出 Core Image 和 UIKit 坐标系是倒置的。

CoreImage 坐标系

UIKit 坐标系

(这些图片来自https://nacho4d-nacho4d.blogspot.com/2012/03/coreimage-and-uikit-coordinates.html

很明显,这个坐标系的差异是导致框错位的原因。现在,x 轴、宽度和高度保持不变。唯一的区别是 y。 Stack Overflow 上的其他答案建议 (image height - face y) / 2 作为解决方案。这通常有效,但对于某些面孔,您会发现这是非常错误的。

首先,删除除以 2。通过 image.size.height - face.bounds.origin.y 设置 origin.y。您会注意到镜框的顶部刚好碰到下巴。我们需要做的就是考虑到脸的高度:

image.size.height - face.bounds.height - face.bounds.origin.y

这让您每次都能完美对齐帧。

问题仍然存在 – 为什么那 / 2 个答案是错误的?这个坐标问题在 2012-2013 年左右在 Stack Overflow 上很流行。人们会用这个代码回答:image.size.height - face.bounds.origin.y。正如我们之前所讨论的,这个框架的顶部接触到下巴。沿线的某个地方,有人建议将整个值除以 2。这似乎使框架很好地集中在脸上。这最终成为许多问题的公认答案。

在我的测试中,我发现这有时会奏效。然而,其他时候,框架会疯狂地关闭。经过一番思考,我得出了正确的答案。希望这能解决问题并帮助遇到同样问题的其他人。