师:同学们,今天这节课我们一起学习初二信息技术第二章第七节,用Python实现人脸检测。首先回顾上节课内容,上节课我们学习了安装第三方库,利用signkidlearn库进行数据分析,判断水果类型,还学习了KNN算法的使用,感受到Python第三方库的便捷与强大。今天老师带大家认识另一个程序库。老师编写了个人脸检测小程序,先来看一看。老师想识别这张名为photo的照片,双击运行人脸识别小程序,看看效果。

  根据程序运行结果,能看到程序识别出两张人脸位置,并在相应地方画出框线,同时在左上角用文字输出找到几张人脸的说明。这里用到另一个第三方库叫Opencv,利用Opencv可实现人脸识别、动作识别、人机互动、机器人视觉等。这节课我们了解Opencv库,学会用Opencv读取和显示图像,在图像上画矩形和绘制文字,以刚才的人脸识别小程序为例,分析程序如何实现。

  首先要导入人脸识别的工具——人脸检测分类器,然后启动函数进行人脸检测,检测完成后逐个框出人脸位置,并标注人脸数量。那如何用代码实现呢?下面进入代码分析。

  第一步,导入人脸检测分类器。首先用import语句导入Opencv库,这里库的名称为CVR。利用Cascade classifier导入Haar特征检测分类器,创建检测对象face,然后用imread函数导入图片,创建绘图对象IMG,注意双引号里填写图片文件名。这里要了解,HAR特征检测分类器是个XML文件,我们可在相关网站下载得到Opencv master到zip文件,文件解压缩后有多个XML文件,这些就是已训练好的Har特征检测分类器,文件中描述人体各个部位的哈尔特征值,包括人脸、眼睛、嘴唇等,根据命名能很快知道各检测分类器用途。

  以上是第一部分完整代码,导入人脸检测分类器后,我们要启动函数进行人脸检测。

  第二步,启动函数进行人脸检测。首先用检测对象face启动detectmultiscale函数进行人脸检测,将检测到的人脸目标序列存储到变量facerex当中。为成功检测人脸,需对函数中参数进行设置。首先确定要检测的图像,这里用在上一步创建的绘图对象IMG。接着设置特征比对中图片的缩小比例scale factor,可这样理解,距离相机不同距离物体大小不一样,大小不一致时检测东西不方便,所以需多次缩放。然后设置miniblocks的数量,计算机会对每个目标区域的特征进行比对,我们需设定达到多少个特征数才算比对成功,这里设置为5。接着设置min size、max size,确定允许得到目标区域的最小范围和最大范围,单位是像素。如果检测出人脸,函数将返回相关数据存储在变量faces当中。

  有些同学可能好奇返回的数据具体是什么,这里我们可用print函数查看返回数据的值和数据类型。利用print函数输出struct的值和数据类型,运行程序后,能看到程序输出一组数据,前部分显示数据值,后部分显示数据类型。可以看出facestrack的值是个二维数组,行数是检测出人脸的个数,这里有两行意味着检测出两张人脸。每行有4组数字,分别代表检测出人脸位置的左上角x坐标、y坐标、脸部宽度w和脸部高度h。例如第二行数据92、60、144,代表人脸位置的左上角坐标为92、60,脸部宽度为144像素,脸部高度为144像素。

  以上是第二部分完整代码,获取人脸数据后,就可利用数据绘制矩形,具体如何实现,看下一段代码。

  第三步,循环框出人脸。这里我们用Opencv库中的rectangle函数编译绘图命令,rectangle函数包含图像对象、矩形左上角坐标、矩形右下角坐标、颜色以及线宽5个参数。我们将图像对象设置为IMG,计算机根据获得的人脸坐标x、y以及脸部宽度w和脸部高度h确定矩形左上角坐标为x、y,矩形右下角坐标为x + w,y + h。接着在函数中设置矩形的颜色值为0、0、255,矩形的线宽为1,单位为像素,这样计算机就能在图像中画出矩形。这里要注意,因可能检测到多张人脸,所以需用for循环语句循环获取每张人脸的数据。

  完成这一步,计算机已能找到人脸位置并框出人脸。为更直观看到有多少张人脸,还要在左上角画出一个实心矩形,并输出文字说明。

  第四步,标注找到多少张人脸。我们用Opencv库中的rectangle函数编写绘图命令,画出矩形。这里要注意,当线宽的参数为 - 1时,代表画出实心矩形。再用protest语句设置输出的文字内容和格式,利用Straval Facex获取人脸的个数作为输出的文字内容,并设置文字的左下角坐标、字体、字号、颜色和文字宽度。

>> 点击阅读全文
《8年级下册信息技术 第7节 用Python实现图像的人脸检测 逐字稿-3,547字 第5版》.docx
将本文下载保存,方便收藏和打印
导出文档