VisionFaceAware

license spm platform stars issues release

前言

本软件包基于 https://github.com/BeauNouvelle/FaceAware,该项目已不再维护。现在,它使用 Apple 的 Vision Framework 代替 Core Image。基于 比较结果,其性能更快,并且从机器学习的趋势来看,它在每个新的 CPU 迭代中都会变得更好。

avatar_example

用例

有时,我们需要使用的图像的宽高比与 UIImageView 的边界不太匹配。

avatar_example

在大多数情况下,我们可以使用 AspectFill 将图像调整到 UIImageView 的边界,而不会拉伸或留下空白。但是,对于人物照片,如果人脸没有完全居中,经常会出现人脸被裁剪掉的情况。

这就是 VisionFaceAware 的用武之地。它将分析图像,无论是通过 UIImageViewimage 属性,还是通过使用内置函数设置的图像,并将焦点放在其中可以找到的任何人脸上。

最常见的用途是头像。

有了这个库,用户无需再裁剪和调整他们的个人资料图片。example

安装

Swift Package Manager

用法

有几种方法可以让您的图像视图聚焦于图像中的人脸。

Interface Builder

这是最简单的方法,不需要编写任何代码。该扩展使用了 @IBDesignable@IBInspectable,因此您可以从 IB 中启用 focusOnFaces。但是,您实际上在运行项目之前看不到扩展的工作效果。

inspectable

代码

您可以将 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,讨论您想要更改的内容。