1理论知识的解读
![0fa467e5a697f08cd5fdeeff6cf271ba.png](https://i-blog.csdnimg.cn/blog_migrate/49b2d086675e5b0500d07d57188669f0.png)
OpenCV是计算机视觉(Computer Vision)领域最受欢迎的库之一,该库最初使用C和C++实现,如今也已提供了对应的Python包——opencv-python。
OpenCV使用机器学习算法来实现对图片中人脸的搜索,但人脸搜索是一个十分复杂的事情,如正脸、侧脸、化妆、口罩等等因素让图片中的人脸呈现出的模式十分复杂,难以依靠单一的人脸检测算法识别人脸。实际上,OpenCV将面部识别任务拆分成成千上万个易于解决的小任务,每一个小任务也被称为一个分类器(Classfier)。
面对一张图片,我们该如何进行面部识别?最易想到的是从图片的左上方开始划定一小块区域,用算法检测人脸,不断移动块直至图片检测完成。通常在一个人脸识别任务中需要6000或更多的分类器,加上一个高分辨率图片块的不断迭代,每一张图片的检测需要进行数百万次计算。
OpenCV使用层级(cascade)的方式解决此类问题,即将面部识别分为多个阶段,对每个块先进行粗略快速的检测,通过后再进行详细检测,进而实现实时的面部识别,而不是耗费数小时的数百万次计算。层级本身只是一堆XML文件,其中包含用于检测对象的