一、项目基本信息
- 核心技术:Mind+ V2 图像分类模型训练、人脸识别、物联网 MQTT、图形化编程
二、项目背景与创作目的
1. 设计背景
智慧校园建设持续推进,科技教室作为学校创新实践核心场所,存放 3D 打印机、激光切割机、机器人套件等贵重设备,亟需智能化管理方案。本项目将AI 图像识别、物联网、开源硬件深度融合,贴合校园真实管理需求,是人工智能技术在教育场景的落地实践。
2. 创作目的
解决传统科技教室管理三大痛点:
- 权限管理粗放,无法精准区分师生权限;
- 安全监控不足,无进出记录与实时状态;
- 管理效率低,依赖教师现场开关门。
通过人脸识别 + 智能门禁实现授权人员无感通行、未授权人员自动阻拦,搭配物联网远程管理,提升教室安全性与使用效率,保障教学设备安全运行。
三、作品简介与设计思路
1. 作品简介

本项目基于Mind+ V2 模型训练完成人脸识别模型训练,搭配行空板、USB 摄像头、舵机实现智能门禁控制。系统可自动识别教师(teacher)、学生(student),授权人员自动开门,未授权人员提示离开;同时通过物联网平台实现远程控制、进出记录上传、声光提醒,完整实现 “AI 识别 + 硬件控制 + 物联网管理” 闭环。
作品功能演示视频:https://www.bilibili.com/video/BV1epQjBAEut/

2. 整体设计
- 硬件组成:行空板(主控)、USB 摄像头(图像采集)、舵机(门锁控制)、蜂鸣器(声光提醒)
- 结构设计:激光切割木板制作外壳,预留舵机卡槽与设备安装位,布线规整、外观整洁
- 流程设计:数据采集→模型训练→实时识别→门禁控制→物联网上传→远程管理
- 四、硬件器材清单
- table { border-collapse: collapse; width: 100%; } th, td { border: 1px solid #ccc; padding: 8px; text-align: left; }
| 器材名称 | 数量 | 功能说明 |
|---|---|---|
| 行空板 UNIHIKER | 1 块 | 项目主控,AI 推理、屏幕显示、逻辑控制 |
| 行空板扩展板 | 1 块 | 扩展接口、方便接线、保护主板 |
| USB 摄像头 | 1 个 | 采集人脸图像,用于 AI 图像分类识别 |
| 9g 舵机 | 1 个 | 控制门锁开关,实现自动开门 / 关门 |
| LED 灯 | 1 个 | 识别成功 / 失败状态灯光提示 |
| 蜂鸣器 | 1 个 | 通行提醒、非法闯入声音报警 |
| 声音传感器 | 1 个 | 环境噪音监测、异常声音检测 |
| TypeC 二合一线 | 1 条 | 行空板供电、程序上传 |
| 激光切割木板 / 结构件 | 1 套 | 门禁外壳、设备固定、结构安装 |
| 杜邦线 / 连接线 | 若干 | 舵机、LED、蜂鸣器、声音传感器接线 |
五、模型训练过程(Mind+ V2 核心步骤)
1. 数据采集
- 采集对象:学生、老师人脸图像各 100 张
- 采集工具:Mind+ V2 模型训练→图像分类
- 分类标签:student(学生)、teacher(教师)
- 说明:在本项目中,学生与教师由2名不同学生来模拟
2. 模型训练
- 打开 Mind+ V2,进入模型训练→图像分类;
- 采集的师生人脸数据集;
- 设置训练参数,启动模型训练;
- 训练完成,导出模型文件至指定路径。
3. 模型校验
通过摄像头实时预览,验证识别准确率,确保 student/teacher 分类准确、响应迅速。

说明:学生人脸信息已打码
六、功能实现与技术创新
1. 核心功能
- 人脸识别门禁:实时识别师生身份,授权自动开门,未授权显示 “please leave”;
- 自动开关门:识别通过后,舵机旋转开门,延时自动复位关门;
- 声光提醒:授权通行、非法闯入对应不同声音与灯光提示;
- 物联网远程控制:支持远程开门、静音模式,实时上传识别记录;
- 状态可视化:行空板屏幕实时显示摄像头画面、识别结果与置信度。
2. 技术实现
- 编程环境:Mind+ V2 Python 模式
- 扩展库:模型训练推理库、WiFi 库、MQTT 库、舵机库
- 物联网平台:Easy IoT
- 通信方式:MQTT 协议
- 逻辑流程:WiFi 联网→MQTT 连接→摄像头初始化→加载模型→实时识别→门禁控制→数据上传

图形化程序截图
3. 创新点
- AI + 校园场景深度结合:精准解决科技教室管理痛点,实用性强;
- 完整软硬件闭环:从模型训练到硬件控制、物联网远程管理全流程实现;
- 结构与工艺优化:激光切割一体化外壳,安装稳固、布线美观;
- 双权限管理:区分师生权限,适配校园管理规则。
七、实用价值
1. 校园管理价值
实现科技教室从 “人防” 到 “技防” 升级,保障贵重设备安全;通行数据可用于教室使用率分析、课程优化,为智慧校园提供数据支撑。
2. 教育育人价值
项目覆盖编程、AI、物联网多学科知识,提升学生计算思维、创新实践能力;成果可作为教学案例,激发全校学生学习人工智能的兴趣。
八、项目文件说明
- 程序文件:校园智能门禁系统
- 演示视频:智能门禁系统运行演示视频
# -*- coding: UTF-8 -*-
# MindPlus V2
# python-block
import siot
import time
from pinpong.board import Servo
from pinpong.board import Board
from model_mp_io import IO_Windows
from model_mp_io import ImageReader
from pinpong.board import Board,Pin
from pinpong.extension.unihiker import *
from model_mp_core import ImageClassificationInference
# 变量
RenLian = 0
my_variable = []
ShiBieCiShu = 0
SuoYin = 0
ZhiXinDu = 0
# 事件回调函数
def on_message_callback(client, userdata, msg):
if (msg.topic=="d8mZvwZvR"):
# 订阅到物联网
print("dingyueok")
if (msg.payload.decode()=="open"):
# 订阅到远程开门open指令
print("open")
KaiMenHouGuanMen()
if (msg.payload.decode()=="quite"):
# 订阅到quite指令
print("quite")
buzzer.play(buzzer.WEDDING,buzzer.Once)
# 自定义函数
def LianJieWuLianWang():
siot.getsubscribe(topic="d8mZvwZvR")
siot.publish(topic="d8mZvwZvR", data="连接成功")
def KaiMenHouGuanMen():
servo1.write_angle(90)
time.sleep(3)
servo1.write_angle(180)
def JiaoShiZaoShengJianCeTiXing():
if (p_p4_analog.read_analog()>250):
siot.publish(topic="d8mZvwZvR", data="noise")
p_p23_out.write_digital(1)
p_p24_out.write_digital(1)
p_p21_out.write_digital(0)
else:
p_p21_out.write_digital(1)
p_p24_out.write_digital(0)
p_p23_out.write_digital(0)
# 主程序开始
Board().begin()
siot.init(client_id="01683703607577458",server="iot.dfrobot.com.cn",port=1883,user="858kvwWvR",password="U58zDwZDgz")
windows_name = IO_Windows()
siot.set_callback(on_message_callback)
siot.connect()
siot.loop()
p_p4_analog=Pin(Pin.P4, Pin.ANALOG)
p_p23_out=Pin(Pin.P23, Pin.OUT)
p_p24_out=Pin(Pin.P24, Pin.OUT)
p_p21_out=Pin(Pin.P21, Pin.OUT)
my_variable = RenLian
LianJieWuLianWang()
image_reader = ImageReader(source=0)
image_reader.set_resolution(640, 480)
windows_name.open_window("windows1")
windows_name.set_size("windows1", 240, 320)
inference = ImageClassificationInference(get_asset_path_by_name("best.onnx"), get_asset_path_by_name("model.yaml"))
ShiBieCiShu = 0
RenLian = []
my_variable.append((str("student")))
my_variable.append((str("teacher")))
print(RenLian)
servo1 = Servo(Pin((Pin.P10)))
servo1.write_angle(180)
while True:
SuoYin = result_output['result'][0]["class_name"]
ZhiXinDu = result_output['result'][0]["score"]
data = image_reader.read_frame()
windows_name.show(data, "windows1")
windows_name.wait_key()
result_output = inference.inference(data)
if (((my_variable[SuoYin])=="student") or ((my_variable[SuoYin])=="teacher")):
if (ShiBieCiShu==3):
KaiMenHouGuanMen()
siot.publish(topic="d8mZvwZvR", data=(my_variable[SuoYin]))
ShiBieCiShu = 0
else:
ShiBieCiShu = (ShiBieCiShu + 1)
else:
ShiBieCiShu = 0
JiaoShiZaoShengJianCeTiXing()

返回首页
回到顶部
评论