机器学习—USB摄像头变身人脸识别门禁

在12月16日举办的第十一届中小学STEAM教育大会,前沿专家学者们围绕走向“科创输出”的人工智能教育所进行的探索和实践进行了分享和交流。恰好按计划,这一期想跟大家分享的就是人工智能方面的实验,与大会主题契合。本次实验通过Mind+创建一个机器学习人脸识别的应用,同步上传识别结果到Easy Iot物联网平台。通过App Inventor 2创建手机安卓App应用,接收到识别结果后远程控制掌控板旋转舵机。整个过程模拟实现远程身份验证,远程开锁。通过实验,了解什么是人工智能,人工智能的简单分类,以及人工智能与物联网技术的整合应用,掌控板扩展板和舵机的使用等知识点。
本次实验较以往的实验多了一些硬件,但除了USB摄像头,其他并非必须,大家手上没有也没关系,如果你用的是笔记本电脑,可能本身就已经有摄像头。涉及到掌控板和舵机的响应部分,你可以用Mind+里的机器人角色执行相应动作或说话进行响应。大家通过文章掌握相关技术逻辑和原理即可。

在这里插入图片描述

1. 实验目标

(1) 初步了解人工智能的概念
(2) 了解人工智能的简单分类
(3) 了解Mind+在人工智能方面的能力
(4) 了解人工智能技术和物联网技术的整合应用

2. 实验所需资源

硬件:
(1) 电脑
(2) USB摄像头
(3) 手机
(4) 掌控板
(5) 掌控板扩展板
(6) 180度舵机
(7) 数据线
本文实验所用的台式电脑为Windows7操作系统,手机为安卓系统,掌控板为V2.0版本,扩展板为micro:bit掌控I/O扩展板,数据线为Type-C接口。
软件:
(1) 电脑安装Mind+软件
本文实验所用的Mind+软件版本为V1.8.0 RC1.0。
(2) App Inventor 2可视化编程平台
本次实验采用的是App Inventor 2平台的汉化增强版软件WxBit(网址为:https://www.wxbit.com/),本文下面所提到的AI2平台皆指WxBit。
(3) Easy Iot物联网平台
网址:https://iot.dfrobot.com.cn/index.html

3. 什么是人工智能

人工智能(Artificial Intelligence,缩写为 AI)是指使用算法和技术来模拟人脑,让计算机具备感知、理解、学习、推理、规划和决策的能力,以帮助人类完成某些复杂的任务。
当前,人工智能在机器视觉、语音识别、语义识别、图像识别、动作控制等众多领域实现重大突破,并开始广泛渗透到金融、客服、安防、医疗、无人驾驶、教育和家居等行业。人工智能已经成为信息技术领域的一个重要分支,正在影响着我们的生活和工作方式。
用简单直白的话来说,人工智能就是让计算机具备听得懂、看得懂、会思考、会决策的能力。结合本文的实验,一个普通常见的USB摄像头,通过人工智能的赋能,它就具备了识别人脸的能力,是不是很奇妙!

4. 人工智能的简单分类

人工智能的分类方式很多,有的按应用场景、有的按技术手段、还有的按智能程度等标准进行分类,并且随着人工智能技术的不断革新和应用场景的拓展,分类方法也在不断演进和增加。所以这里我不会从理论上来探讨人工智能到底有多少分类,仅打算从最直观的使用方式的不同来对人工智能进行简单分类:
(1) 在线式人工智能:
是指在云端或网络上运行的人工智能系统,通常采用客户端—服务器模式。客户端设备(如智能手机、电脑等)通过网络将需要处理的数据发送给服务器,服务器进行数据分析、智能处理,然后将结果返回给客户端。百度、腾讯、阿里等大厂提供的人工智能服务就属于在线式人工智能。再具体一点,微信语音转文字功能就是这种模式,断网环境是用不了的。所以在线式人工智能对网络有一定要求,在数据隐私和安全性方面也面临一些挑战。
(2) 离线式人工智能:
是指不需要依赖云端或网络连接,将人工智能算法、模型和数据存储在本地电脑上,实时进行数据处理和智能化任务的人工智能系统。本次实验使用的Mind+机器学习(ML5)功能就是一项离线式人工智能。离线式人工智能对数据安全和隐私有更好的保障,对电脑配置和计算能力也有更高的要求,并且需要耗费一定的时间来进行学习训练。
(3) 人工智能硬件模块:
是指可以脱离电脑和网络运行,集成了特定人工智能计算能力的硬件设备,特别适合在独立运行的创客作品中实现人工智能创意。比如Mind+支持的语音识别模块、语音合成模块、视觉识别摄像头就属于这类硬件。HUSKYLENS二哈识图AI摄像头是视觉识别摄像头的明星产品,内置6种功能:人脸识别、物体追踪、物体识别、巡线追踪、颜色识别、标签识别、物体分类、二维码识别、条形码识别。仅需一个按键即可完成AI训练,直接输出识别结果给控制器,无需折腾复杂的算法,就能制作非常有创意的项目。
上述的分类是我个人为便于学习和理解人工智能所做的一个简单分类,主要目的就是想告诉大家不必在眼花缭乱的各种语音识别、视觉识别中迷茫纠结,不知道怎么使用。比如就视觉识别来说,上述三种方式都能实现,你只需要考虑自己的项目特点就行,有没有网络支持?需不要电脑配合?或者是要独立运行?很容易就知道哪种方式的人工智能技术适合你的项目了。

5. Mind+在人工智能方面的能力

Mind+官方教程里面有一项“AI人工智能相关”,详细说明了Mind+当前所具备的人工智能能力和使用方法,对应前面的三种分类,它都有涉及,并且教程也很详细,建议初学者仔细阅读。本文实验使用到的仅是机器学习功能中的人脸识别这项AI功能,属于离线式人工智能。
在这里插入图片描述

机器学习是人工智能的一个分支,是一种让计算机能够像聪明的小孩一样,通过学习数据来解决问题的方法。它就像一个聪明的小孩在学习知识,通过观察和学习大量的例子(数据),逐渐找出其中的规律(模型)。然后,当我们给这个小孩一个新的问题(预测新的数据),他可以根据学到的规律来解决这个问题。结合本文的实验来说,就是先训练摄像头记住看到的人脸是谁?等下次再见到这个人,摄像头就能认出他。

6. 在Mind+编程实现人脸识别和舵机响应

在这里插入图片描述

编程前先将USB 摄像头接入电脑主机USB接口,再按上图将掌控板插入扩展板插槽,将180度舵机接入扩展板P8接口,最后将掌控板数据线连接到电脑主机。下面开始在实时模式下编程,之前的项目都是上传模式,请注意区别。
(1) 在Mind+实时模式新建项目,依次添加下列扩展并连接掌控板:
在主控板扩展库添加“掌控板”;
在扩展板扩展库添加“micro:bit掌控扩展板”;
在执行器扩展库添加“舵机模块”;
在功能模块扩展库添加“机器学习(ML5)”;
在网络服务扩展库添加“MQTT”。
完成以上添加后,点击“连接设备”选择连接掌控板。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

(2) 编程连接MQTT服务器,隐藏舞台上的精灵,将舞台用来显示摄像头画面,同时初始化人脸识别库数据
首先在你的EasyIot物联网平台,添加“人名”、“指令”两项Topic。在Mind+编程“MQTT初始化参数”中将“人名”设置为Topic_0,“指令”设置为Topic_1。
在这里插入图片描述
在这里插入图片描述

这里要注意的是最后一行 “FaceAPI初始化特定人脸识别” 程序,它的功能是初始化人脸识别功能并清除已识别人脸数据库,除非想要全部清除已训练的人脸数据,否则整个程序只需要运行一次即可。
(3) 添加录入人脸信息的程序
设置按下掌控板A键触发录入程序,通过掌控板屏幕进行操作提示,通过Mind+舞台进行姓名输入。
在这里插入图片描述
(4) 添加进行人脸识别验证的程序
设置按下掌控板B键触发人脸识别验证程序,通过掌控板屏幕进行操作提示,同步将识别结果上传到EasyIot“人名”Topic。
在这里插入图片描述

(5) 添加远程开门的程序
设置MQTT接收到EasyIot“指令”Topic的消息为“1”时触发远程开门程序,通过掌控板灯光及屏幕进行通行倒计时提示,通过舵机旋转模拟开关门。
在这里插入图片描述
(6) 添加远程拒绝开门的程序
设置MQTT接收到EasyIot“指令”Topic的消息为“2”时触发远程拒绝开门程序,通过掌控板屏幕进行禁止通行提示。这种情况主要用于识别为“unknown”,即陌生人的情况。
在这里插入图片描述

(7) 测试运行Mind+端编辑好的程序
点击Mind+舞台上方的绿色小旗运行初始化程序:舞台上的精灵随即隐藏,舞台开始显示摄像头画面。为便于查看,我们点击舞台右上方的最大化按钮把舞台最大化。
在这里插入图片描述
在这里插入图片描述
点击掌控板A键试运行录入人脸信息的程序:
掌控板提示“请在电脑端输入姓名”,舞台下方(下图左侧画面)即弹出输入框,在此输入需要录入的姓名即可。此次演示输入的姓名为“手机连接万物”。为做演示,截屏没有用真人人脸,但大家自己测试的时候必须使用真人或照片,否则会录入失败。录入过程中和录入成功后,掌控板屏幕都会有提示信息。每点击一次A键,就可以增加一个人脸信息。
在这里插入图片描述

点击掌控板B键试运行人脸识别验证程序:
如果摄像头没有发现人脸,掌控板会提示“未识别到人脸”的信息,如果识别正确或者识别为陌生人(unknown),掌控板会显示识别信息并同步将识别结果上传到EasyIot平台的“人名”Topic。
在这里插入图片描述
在这里插入图片描述

测试远程开门程序:
通过EasyIot平台“指令”Topic发送消息“1”,掌控板就会进行开门提示并旋转舵机模拟开门,开门时间为10秒,开门结束后自动关门。
在这里插入图片描述
在这里插入图片描述

测试远程拒绝开门的程序:
通过EasyIot平台“指令”Topic发送消息“2”,掌控板就会进行3秒钟的拒绝开门提示,同时提醒录入人脸。
在这里插入图片描述

7. 通过AI2制作远程控制APP

使用谷歌、QQ、Firefox、Safari等非IE浏览器访问WxBit网站,按提示进行注册和登录,推荐使用QQ账号登录。
(1) 登录AI2P平台(WxBit),新建一个名为“远程门禁”的项目,在“组件设计”界面添加以下组件
在这里插入图片描述
在这里插入图片描述

组件属性设置参考:
Screen1标题设置为“远程门禁”;
屏幕第一行放置“连接服务器”按钮,用于连接EasyIot服务器;
垂直布局1设置宽为“充满”,高为180dp,放置“申请开门人员姓名”、“姓名数据”、“申请时间”、“时间数据”4个标签,用于接收EasyIot的“人名”topic数据;
垂直布局1下方依次放置“同意开门”和“拒绝开门”按钮,用于通过EasyIot平台下发指令;
所有可见组件,包括标签、按钮等名称设置为图中组件列表中的名称,字号统一设置为“22”。标签和按钮宽度设置为“F”充满。“申请开门人员姓名”和“申请时间”标签背景颜色设置为“黄色”。
下面对2个不可见组件用途及设置做详细说明:
MQTT客户端组件用于连接Easy Iot物联网平台,接收人脸识别人员姓名及发送指令到掌控板执行相关操作。服务器URL设置为“iot.dfrobot.com.cn:1883”,用户名称和密码设置为你的Easy Iot物联网平台对应的参数。
在这里插入图片描述

计时器组件用于记录获取EasyIot平台人脸识别姓名的时间,保持默认设置即可。

(2) 切换到“逻辑设计”界面对组件功能和事件进行编程
在“逻辑设计”界面左侧的“模块”栏中,选中相应的模块就会弹出该模块相关的编程积木,把积木按逻辑组合在一起,就形成了一系列功能和事件程序。下面的示例没有详细介绍模块来源,除内置模块外,大家可以从积木的名称和颜色上找到它来源于哪个模块。下面我们按事件进行编程:
在这里插入图片描述

连接EasyIot服务器的程序:
在screen1初始化程序中调用MQTT服务器连接,点击“连接服务器”按钮订阅EasyIot“人名”Topic,同时更改按钮颜色和文本,提示服务器已连接。
在这里插入图片描述

接收并显示人脸识别姓名和接收时间的程序:
在点击掌控板B键进行人脸识别后,识别结果同步发送到EasyIot平台的“人名”Topic,上一步程序订阅了这个主题后,App就能实时接收到这个Topic的信息,同时通过计时器控件获取显示接收到信息的时间。
在这里插入图片描述
同意和拒绝远程开门的程序:
此处的程序逻辑是通过点击“同意开门”和“拒绝开门”按钮向“EasyIot”物联网平台“指令”Topic发送“1”或“2”的指令,让掌控板根据接收到的指令进行相应操作。
在这里插入图片描述

至此,涉及到该实验的AI2编程已经完成,下面我们进行这一部分的程序试运行:
(3) 手机预览运行AI2程序
AI2支持手机预览并运行程序,我们继续使用之前介绍过的 “WxBit调试助手”来进行程序调试,运行你手机上安装的“WxBit调试助手”,通过WxBit“预览”菜单下的“连接调试助手”扫码连接刚才编辑的程序。
在这里插入图片描述
在这里插入图片描述

打开App点击“连接服务器”按钮,让程序处于持续运行状态。当用户点击掌控板B键进行人脸识别时,App就能接收到识别结果,你就可以通过手机App进行远程授权开门或拒绝开门。当点击同意开门时,掌控板和舵机即进入开门程序,计时结束后自动关门。当点击“拒绝开门”按钮后,掌控板即提示拒绝开门信息。
至此,用USB摄像头做人脸识别远程管控门禁的程序制作完成,你还可以为这个App设置图标,然后把它打包安装到你的手机独立运行。
这是一个手动核验授权的门禁系统,大家也可以按照自己的想法对程序进行修改,比如说使用照片文件夹进行训练,或者将识别结果和舵机旋转进行自动化关联,进一步探索实践机器学习人工智能的使用。本文的实验借助了电脑进行人工智能程序的运行,以后的项目中,我们还会学习如何脱离电脑使用人工智能功能,还有如何通过手机查看摄像头画面,自动截图等实用功能。

8. 本实验完整程序和下载地址

掌控板Mind+程序
在这里插入图片描述

手机端AI2程序
在这里插入图片描述

下载地址:https://gitee.com/inventara/arduino

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Qt C++是一种跨平台的图形用户界面开发框架,而深度习是一种机器学习技术,通过神经网络模型进行高级特征习和处理。在Qt C++中,我们可以使用深度习方法来调用摄像头进行人脸识别。 首先,我们需要准备一个训练好的深度习模型,用于人脸识别。这个模型通常是在大规模人脸数据集上进行训练的,以获得较高的准确性。 然后,在Qt C++中,我们可以通过调用摄像头的API获取视频帧。每一帧都可以作为输入,传递给深度习模型进行人脸识别。 在每一帧中,我们可以使用图像处理技术来进行预处理,以提高人脸识别的准确性。例如,我们可以进行人脸检测,将图像中的人脸区域提取出来,然后对图像进行归一化和预处理操作,以适应深度习模型的输入要求。 接下来,我们可以将预处理后的图像数据输入到深度习模型中,通过前向传播得到模型的输出。输出通常是一个包含人脸特征的向量或特征描述符。 最后,我们可以比较模型输出的特征向量与已知的人脸特征向量进行匹配,以确定人脸的身份。这可以通过比较特征向量之间的相似性来实现。 总的来说,使用Qt C++调用摄像头进行人脸识别,我们需要准备一个训练好的深度习模型,并在每一帧中进行图像处理和预处理,然后将预处理的图像数据输入到模型中,得到模型的输出特征向量,最后进行人脸身份的匹配。这样可以实现在Qt C++中使用深度习方法进行人脸识别的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值