如何使用PIL根据人脸检测裁剪选定区域?
嗨,我想用Python的图像处理库来把图片裁剪成网站需要的特定大小。我遇到一个问题,这些图片是用来展示人脸的,所以我需要自动根据人脸来裁剪。
我知道人脸识别是个比较复杂的概念,所以我打算使用face.com的API,http://developers.face.com/tools/#faces/detect,这对我想做的事情来说是合适的。
不过,我有点困惑,不知道该怎么利用这些数据来裁剪出大多数人脸所在的区域。
有人能帮帮我吗?
乔
2 个回答
2
如果你想从一张图片中剪切出一个矩形区域,这里有一些我可能会先尝试的方法:
- (可选) 如果图片很大,可以先做一个粗略的正方形裁剪,中心对准脸部,尺寸比最长边大
sqrt(2)
。即使在最糟糕的情况下(比如图片旋转了45度),也能确保抓住所有重要的部分。 - 根据脸部的方向进行旋转(可以用类似
rough_crop.rotate(math.degrees(math.atan(ydiff/xdiff))
的方法,三角函数挺有趣的)。 - 最后进行裁剪。如果你做了初步裁剪,脸部应该已经在中心位置,否则你需要把之前的所有坐标转换(旋转)到新图片上去(这又要用到三角函数了!)。
4
有一个Python的库,它有一个叫做智能裁剪的功能。这个功能可以通过人脸识别来进行更聪明的裁剪,除了这个还有其他选项。这个库的背后使用了一个叫做OpenCV的工具,但你在使用的时候并不需要直接接触它。
你可以在这里找到这个库的详细信息:https://github.com/globocom/thumbor