近几年,我国科技水平迅速发展并达到世界领先水平。培养学生成为科技后备人才是我们刻不容缓的义务。
在2024年,我用掌控板做了第12课《刷卡开锁易实现》并到外校送了一节实验操作课,反馈良好。本次活动用的主控板是行空板K10,因为不能接自己的刷卡模块,所以换成了用K10自带的摄像头做了第15课《面容钥匙显智能》。
该案例利用学校场景,新年后返校,通过人脸识别进入,结合不同的语音播报设置,并且可以放置一张新年喜庆的图片,可以提高师生回校的幸福感。

流程图:可以帮学生打开思路,以更好地编写程序。

步骤1 按照程序按下A键录入人脸信息,每按一下录入一个人脸。
步骤2 调试舵机,把舵机臂调到自定义的90度位置。
步骤3 测试人脸识别是否成功。
步骤4 把测试好的程序整合到一起。
Mind+图形化编程:需要添加对应的主控板和执行器,需要建立对应的变量。
通过以下程序,我们可以看出,按下A键录入人脸,按一次录入一个;按B键清楚所有人脸信息,此时需要重新录入。当识别到有人脸的时候,程序会触发识别人脸信息,并判断是否在录入信息内,如果是,则播报“欢迎回学校”并开锁,否则播报“对不起,无权进入”并且不开锁。
代码
/*!
* MindPlus
* esp32s3bit
*
*/
#include "asr.h"
#include "unihiker_k10.h"
#include "AIRecognition.h"
#include <DFRobot_Servo.h>
// 动态变量
volatile float mind_n_FaceDetect, mind_n_FaceID;
// 函数声明
void DF_RenLianShiBie();
void onButtonAPressed();
void onButtonBPressed();
// 创建对象
UNIHIKER_K10 k10;
ASR asr;
uint8_t screen_dir=2;
AIRecognition ai;
Servo servo_P0;
// 主程序开始
void setup() {
k10.begin();
asr.setAsrSpeed(1);
k10.initScreen(screen_dir);
ai.initAi();
k10.initBgCamerImage();
k10.setBgCamerImage(false);
k10.creatCanvas();
ai.switchAiMode(ai.NoMode);
servo_P0.attach(P0);
k10.buttonA->setPressedCallback(onButtonAPressed);
k10.buttonB->setPressedCallback(onButtonBPressed);
k10.setScreenBackground(0x000000);
k10.setBgCamerImage(true);
ai.switchAiMode(ai.Face);
// 初始化让舵机在90度角。
servo_P0.angle(abs(90));
// 人脸侦测不启动,用0表示。
mind_n_FaceDetect = 0;
}
void loop() {
if ((mind_n_FaceDetect==1)) {
// 该模块可以学习人脸,并把学习到的人脸ID从1开始递增并保存,最大48。
ai.sendFaceCmd(ENROLL);
}
if (((mind_n_FaceDetect==0) && ai.isDetectContent(AIRecognition::Face))) {
DF_RenLianShiBie();
}
}
// 自定义函数
void DF_RenLianShiBie() {
ai.sendFaceCmd(RECOGNIZE);
while (!ai.isRecognized()) {}
mind_n_FaceID = ai.getRecognitionID();
k10.canvas->canvasText((String("Face ID: ") + String(mind_n_FaceID)), 1, 0xFF0000);
k10.canvas->updateCanvas();
delay(3000);
k10.canvas->canvasClear(1);
if ((mind_n_FaceID==-1)) {
asr.speak("对不起,无权进入。");
delay(1000);
}
else {
asr.speak("欢迎回学校。");
delay(1000);
servo_P0.angle(abs(0));
delay(3000);
servo_P0.angle(abs(90));
}
}
// 事件回调函数
void onButtonAPressed() {
mind_n_FaceDetect = 1;
delay(1000);
mind_n_FaceDetect = 0;
}
void onButtonBPressed() {
ai.sendFaceCmd(DELETEALL);
}
评论