回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

义务教育八年级 第15课《面容钥匙显智能》

头像 创客维克多 2025.02.12 121 0

        近几年,我国科技水平迅速发展并达到世界领先水平。培养学生成为科技后备人才是我们刻不容缓的义务。

        在2024年,我用掌控板做了第12课《刷卡开锁易实现》并到外校送了一节实验操作课,反馈良好。本次活动用的主控板是行空板K10,因为不能接自己的刷卡模块,所以换成了用K10自带的摄像头做了第15课《面容钥匙显智能》。

        该案例利用学校场景,新年后返校,通过人脸识别进入,结合不同的语音播报设置,并且可以放置一张新年喜庆的图片,可以提高师生回校的幸福感。

 

接线.jpg

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

流程图.png

步骤1 按照程序按下A键录入人脸信息,每按一下录入一个人脸。

1739543836915.png

 

步骤2 调试舵机,把舵机臂调到自定义的90度位置。

步骤3 测试人脸识别是否成功。

步骤4 把测试好的程序整合到一起。

74f93b7cb5b35917635ed6117b552e51_20ab10c45f6e8d8ba063d4818b539cf7.png

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);
}

评论

user-avatar