本软件包基于 https://github.com/BeauNouvelle/FaceAware,该项目已不再维护。现在,它使用 Apple 的 Vision Framework 代替 Core Image。基于 比较结果,其性能更快,并且从机器学习的趋势来看,它在每个新的 CPU 迭代中都会变得更好。
有时,我们需要使用的图像的宽高比与 UIImageView 的边界不太匹配。
在大多数情况下,我们可以使用 AspectFill 将图像调整到 UIImageView 的边界,而不会拉伸或留下空白。但是,对于人物照片,如果人脸没有完全居中,经常会出现人脸被裁剪掉的情况。
这就是 VisionFaceAware 的用武之地。它将分析图像,无论是通过 UIImageView
的 image
属性,还是通过使用内置函数设置的图像,并将焦点放在其中可以找到的任何人脸上。
最常见的用途是头像。
File
-> Add Packages...
https://github.com/gentique/VisionFaceAware
。Dependency Rule
“Up to Next Major Version”,版本选择 “1.0.0”。有几种方法可以让您的图像视图聚焦于图像中的人脸。
这是最简单的方法,不需要编写任何代码。该扩展使用了 @IBDesignable
和 @IBInspectable
,因此您可以从 IB 中启用 focusOnFaces。但是,您实际上在运行项目之前看不到扩展的工作效果。
您可以将 focusOnFaces
设置为 true
。
someImageView.focusOnFaces = true
请务必在设置图像之后再设置此项。 如果在调用此函数时没有图像,则将无法聚焦人脸。
或者,您可以使用
someImageView.set(image: myImage, focusOnFaces: true)
这样可以消除之前没有设置图像的担忧。
您还可以通过将闭包传递给 didFocusOnFaces
属性来接收人脸检测和任何图像调整完成后的回调。
someImageView.didFocusOnFaces = {
print("Did finish focussing")
}
它具有调试模式,可以在图像中检测到的任何人脸周围绘制红色方块。要启用此功能,您可以将 debug
属性设置为 true。
someImageView.debug = true
您也可以在界面构建器中设置此标志。
欢迎提交 pull requests。 对于重大更改,请先提出一个 issue,讨论您想要更改的内容。