GITHUB今日最佳:HivisionIDPhoto——乍看平淡,细看惊叹(2024-09-06)

公众号|IT武库

HivisionIDPhoto是一个开源的轻量级的证件照生成系统。

由于个人认为该项目的应用场景有限,且类似的项目应该不少,故在本系列文章——GITHUB每日最佳的创作过程中,笔者原本不打算写这个项目。然而,在第三次看到这个项目霸榜Github Trending后,笔者还是打算深入地学习下这个项目以探寻其过人之处。

HivisionIDPhoto的功能非常简单,就是将照片转化成证件照。官方案例如下图:

虽然似乎效果平平无奇,但是笔者已经发现了两个值得关注的地方:

  1. 预设尺寸设置了非常多的模板,并对大小进行了标注,能适配各种证件照场景。

  1. 响应速度非常快,和HuggingFace Space跑大模型动辄几十上百秒的响应时间不同,这个项目大概在1秒左右就能出图。

第一点可以说明项目作者对这个项目确实费心,值得点赞。但是连续霸榜的秘密肯定不是这么简单,于是笔者下载了源码进行阅读。关于源码,笔者有几个发现:

1、和大多数机器学习项目比起来,该项目的依赖少得可怜:requirements.txt中仅包含提供模型运行环境的onnx,处理图像的opencv,处理数组的numpy,本项目不再使用其他的依赖库;

2、目前发现引入的机器学习模型仅有两个轻量级的模型:modnet和mtcnn。前者用来进行人像抠图,而后者用来进行人脸识别。

ModNet 是一种轻量级的目标分解网络,用于视频人像抠图等任务。它由三个相互依赖的分支构成,分别是用于预测人类语义的低分辨率分支、聚焦纵向边界细节的高分辨率分支以及融合语义和细节来预测 alpha matte 的融合分支。原始的 ModNet 参数量约为 6.45MB。

MTCNN的三个网络都是基于卷积神经网络(CNNs)的设计,它们的结构相对较小,以适应不同尺度的人脸检测任务。以下是各网络的一些典型配置:P-Net:通常是一个较小的网络,用来生成人脸的候选区域(Bounding boxes);它的输入是一个小尺寸的图像(如12x12像素),并输出一系列可能包含人脸的区域;R-Net:比P-Net更复杂一些,用于进一步精炼人脸候选框。它的输入是P-Net挑选出的较大尺寸的图像块(例如24x24像素);O-Net:这是最复杂的网络,用于最终确定人脸的位置。它的输入是更大尺寸的图像块(如48x48像素),并且输出更加精确的人脸边界框。

和现在动辄以Billion来计算参数的大模型相比,这两个模型的单次推理显然无需占用太多时间。

  1. 代码中有非常多的基于openCV和numpy实现的图像处理细节!

美白

磨皮

对左右脸进行区分的瘦脸

透视变换脖子,这个函数中甚至要检测下巴有没有截到,截到了有特殊操作。老实说,看着这样的代码,能想象到作者一点点改像素计算的逻辑,一次次地对着图片尝试。光凭对着代码想象已经很难明白一些操作的目的了。没错,笔者已经看醉了……

       看到了这么多的手动优化代码,笔者已经明白这个项目本质上其实不完全是一个AI项目了。作者对照片处理有深厚的理解。

这些优化的效果如何呢?回到案例展示的环节,由于官方的案例输入图片已经很正式了,所以这些案例似乎并不能体现这些图像优化代码的厉害之处。因此笔者打算找些更特殊的照片测测效果。

笔者直接找了一个街拍网图进行实验(图片素材取自网络,侵权请告知删除)

这张图片触发了多个人脸的异常,于是笔者进行了裁剪,结果令笔者震惊的效果出现了:

这个效果,要什么自行车,不是,要什么大模型……谁说大模型能取代优秀程序员的……

到这里,笔者算是明白为什么这个项目能霸榜了:HivisionIDPhoto是一个开源的轻量级轻量级轻量级的证件照生成系统,且生成证件照的效果非常不错。这个项目完全可以在移动设备上本地运行,以帮助用户使用随手拍摄的照片来快速地生成证件照,这么一想,这个项目的商业前景对于很多业务是非常有想象空间的。

我是char,IT武库公众号作者,曾任职于多个大型互联网公司,并担任过研究员、CTO等职位。以后的GITHUB每日最佳系列会坚持全手写,请各位大佬多多关注!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值