AI漫画:Z.A.I.N的面部识别之旅

目标是帮助数百万孩子和AI爱好者理解人工智能和机器学习的奇妙世界,梦想之旅已经起步——被积极的反馈深深打动。因此,很高兴地宣布,将继续定期创作、设计和发布新的AI漫画问题!本周的问题是关于面部识别的广阔而复杂的世界,使用计算机视觉技术。

这个AI漫画系列成功地将技术和复杂的人工智能实现与阅读漫画书的乐趣结合起来。学习从未如此有趣!在AI漫画首期中,介绍了Z.A.I.N,主角和人工智能奇才。他使用Python构建了一个计算机视觉系统,解决了他学校出勤跟踪的问题。相信Z.A.I.N不仅仅是一个角色——他是一种思维方式,一种可以利用它使这个世界变得更美好的新方式。

但是Z.A.I.N构建的模型有一个问题。模型确实能够计算班级中学生的数量。但它不能识别面孔。如果一个学生派了一个替身呢?Z.A.I.N的原始模型还不能检测到这一点。

这就是Z.A.I.N和将发现面部识别的惊人概念的地方。甚至将在看到Z.A.I.N在这一期中做了什么之后,用Python构建一个面部识别模型!建议先阅读AI漫画的前一期——第1期:没有出勤,没有问题。这将帮助理解为什么在这一问题中依赖面部识别的概念,并且建立计算机视觉基础。

了解这个AI漫画的主角Z.A.I.N

谁是Z.A.I.N?这个AI漫画的第2期的剧情是什么?这里有一个需要知道的插图摘要,然后再深入本周的问题:

注意:使用右和左箭头键浏览下面的滑块(或者如果使用的是触摸屏,简单地滑动!)

可以在这里下载完整的漫画!

Z.A.I.N面部识别模型背后的Python代码和解释

喜欢阅读第2期吗?现在让看看ZAIN是如何完成那个非凡的壮举的!没错——将深入了解ZAIN面部识别模型背后的Python代码。

首先,需要数据来训练自己的模型。这有一个警告——不会使用预定义的数据集。这个模型必须在自己的定制数据上进行训练。否则,面部识别将如何适用于情况?

使用以下工具来策划数据集:

OpenCV库 HarrCascadeClassifier: Frontal-face-default(正面脸部检测器)

需要首先初始化相机以捕获视频。然后,将使用正面脸部分类器在脸部周围制作边界框。请注意,由于特别使用了‘frontal-face-default’,它将只检测特定的面孔。

在这里查看代码:

https://gist.github.com/your-username/gist-id

所以,可以根据需求选择使用哪个分类器。在创建了边界框之后,:

检测这些面孔

将它们转换为灰度,

并用标签保存图像。在例子中,这些标签是1或2。

在这里,将灰度版本的图片存储在变量‘gray’中。然后变量faces包含detectMultiScale函数检测到的面孔。接下来,有一个for循环,参数是检测到的面孔的左上角和右下角的四个坐标。进入for循环后,通过1增加sampleNum变量。然后将图像保存到文件夹中,名称格式为:(“str”+标签+sampleNum)

在这里查看代码:

https://gist.github.com/your-username/gist-id

更喜欢通过视频示例学习吗?为创建了下面的视频,以帮助理解上述代码的作用:

https://cdn.analyticsvidhya.com/wp-content/uploads/2019/06/dataset.mp4

就是这样——数据集已经准备好了!那么接下来呢?好吧,现在将构建并训练模型在这些图像上!

将特别使用两个工具来做到这一点:

LBPHFaceRecognizer Pillow

在这里,将图像转换为NumPy数组并训练模型。然后将训练好的模型保存为Recogniser.yml:

变量detector存储分类器(harrcascade_frontal_face_default),recognizer存储LBPHFaceRecognizer。

在这里查看代码:

https://gist.github.com/your-username/gist-id

在这里,定义了一个函数:getImagesAndLables,它就像它的名字一样。它获取带有相应标签的图像,但是怎么做呢?在下面:

首先,声明一个变量:imagePaths,它有存储图像/数据集的文件夹/目录的路径。接下来,有两个空列表:faceSamples,IDs。然后再次有一个for循环,它基本上使用导入的Pillow库来读取数据集中的图像,并同时将其转换为灰度。现在,有图像,但是计算机应该怎么读取它们呢?为此,将图像转换为numpy数组。

可能意识到图像以“str”+label+“sampleNum”的格式存储。所以只需要将图像分配给两个标签/类别中的一个。但是,挑战在于如何分割文件名,以便只留下标签。这正是ID变量包含的内容。

在这里查看代码:

https://gist.github.com/your-username/gist-id

基本的分割和分配图像与它们各自的标签的过程已经完成。下面的代码块只是使用recognizer.train训练模型在图像和标签上,一个经典的监督学习的例子。然后将训练好的模型保存为Recogniser.yml。

在这里查看代码:

https://gist.github.com/your-username/gist-id

下面的代码基本上为做了三件事:

它开始捕获视频,

在帧中的脸部周围制作边界框,

将面孔分类为训练的两个标签之一。如果它不匹配它们中的任何一个,那么它就显示‘unknown’。

模型已经训练好了,所以只需要使用recognizer.read()导入训练好的模型。然后一个简单的if-else代码块就完成了它的工作,并将网络摄像头提供的脸部输入分类为两个类别之一,如果脸部不属于它们中的任何一个,它就分类为未知。

在这里查看代码:

https://gist.github.com/your-username/gist-id https://cdn.analyticsvidhya.com/wp-content/uploads/2019/06/implementation.mp4
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485