人工智能实验:图像的本地检测和云端识别

    孙丽君 于方军

    

    

    

    目前,中学阶段进行的人工智能教学采用的方式大多为采集数据,然后通过调用接口将数据上传到人工智能平台(如百度AI、讯飞等),再返回预测结果,或者调用已有的模型,进行结果预测。本实验将结合以上教学方式,运用Python代码进行中学人工智能教学的探索,进而引导学生体验人工智能的应用,了解人工智能基本原理,使用已有的人工智能平台和模型处理身边的问题。

    ● 设计思路

    尝试通过本实验活动,实现人脸检测和识别功能,解决生活中的实际问题。实验过程可以通过调用摄像头,借助训练好的已有模型检测人脸;将照片数据上传至云端人工智能平台(如百度AI),进行图像对比实现人脸识别。

    在此实验原理基础上,还可以进行应用拓展,如人脸识别门禁,可以加载硬件控制库Pinpong库来控制舵机实现。通过Pinpong库将开源硬件与Python联系起来,与人工智能算法相结合,将过去的“输入+编程+输出”模式,变为现在的“输入+AI+输出”模式。

    ● 活动准备

    带有摄像头的学生机、创建百度AI应用、Arduino板、舵机、Python源代码等文件。

    ● 程序实现

    1.使用训练好的模型验证人脸检测

    (1)查看OpenCV中训练好的Haar模型文件

    OpenCV是一款开源的计算机视觉和机器学习软件库,它提供了很多.xml格式的训练好的模型文件,在实验的素材包中,可以把这些模型文件放在FaceRecognition文件夹中,FaceFile文件夹中存放着允许进入的用户照片,并以人名命名。由于这些已经训练好的模型存放在本地文件夹中(如上页图1),不必联网,我们便可直接调用来实现人脸检测。

    (2)调用模型文件检测人脸

    在本实验中通过Python代码实现调用摄像头,采集人脸数据,再调用OpenCV模型库中的Haarcascade_frontalface_default.xml模型文件,进行人脸检测,代码如图2所示。在检测到的人脸上画出方框,当用户按下空格键,则将图像截图保存。

    (3)更换其他模型文件,观察检测结果

    还可以把模型文件替换为猫脸模型haarcascade_frontalcatface.xml,读入一张猫的图片,运行检测代码后,就能检测出猫脸,与此类似还可以选择其他模型尝试(如图3)。

    2.使用云端人工智能平台识别人脸

    (1)申请接口参数

    开放的人工智能平台会提供用户使用的API接口,API接口参数主要包含APP_ID、API_KEY、SECRET_KEY,做个简单的比喻,APP_ID就像身份证号,API_KEY就像银行卡号,SECRET_KEY就像银行卡密码,使用Python语言调用百度人脸识别接口服务,首先需要安装百度aip,然后在百度AI控制台的人脸识别服务中创建应用,获得APP_ID、API_KEY、SECRET_KEY,在Python代码中键入即可。

    (2)连接百度AI

    通过新建AipFace,将百度AI创建应用中获得的APP_ID、API_KEY、SECRET_KEY复制到代码中,以连接百度AI人脸识别接口,实现交互。通过Mactch函数参数的设置,可将两张图片数据上传到百度AI中,实现图像对比识别(如上页图4)。

    (3)读取本地用户照片与截图照片进行对比

    通过调用前面定义的Mactch函数,将逐一取出本地FaceFile文件夹中的用户照片与保存的截图数据,上传到百度AI平台,进行人脸数据的比对、识别,并返回两两比对人脸相似值(如上页图5)。

    (4)显示返回的预测结果

    对于人脸识别返回结果中相似度小于等于50的,则在截图照片上显示为陌生人“Name:Stranger”;相似度大于50的,则将FaceFile中对应照片的文件名,也就是人名印到截图照片上。

    (5)小组讨论

    讨论不同用户申请的APP_ID、API_KEY、SECRET_KEY三个值是否相同?

    3.效果改进

    在上述代码基础上,利用Pinpong库控制旋转舵机,仿真人脸识别门禁,體验人工智能在生活中的应用。

    (1)安装Pinpong库

    Pinpong库是一套控制开源硬件主控板的Python库,安装完成后,通过在Python程序中加载Pinpong库并初始化后,即可连接硬件,直接用代码就能给常见的开源硬件编程,使它们执行各种命令。这里笔者借助Pinpong库,通过Arduino板控制舵机,实现门禁的效果。

    (2)连接硬件

    连接Arduino主控板到计算机,将舵机与Arduino板各引脚相连(如图6)。在程序中,加载Pinpong库的主板、引脚、舵机,并进行初始化。

    (3)利用Pinpong库,编写代码控制舵机(如图7)

    这里对于返回预测结果中相似度大于50的,除了将人名显示在截图照片上外,还可控制舵机转动一定角度,打开门禁,停留几秒后,舵机再次转动复位,以此实现自动控制门禁的效果。

    总之,通过本次实验活动,利用摄像头截图和收集用户照片来采集数据,调用原有已训练好的Haar模型进行人脸检测,连接云端的百度AI来进行人脸识别,得到预测结果,体验人工智能在生活中的应用。那么,可否自己来收集数据、搭建模型、训练模型、检测模型,完成一个完整的智能系统,脱离网络和现有模型的限制,实现本实验同样效果,这将是笔者进一步探索的方向。