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

使用二哈识图打造安全防盗智能家居 中等

头像 teacherm 2025.12.20 44 0

安全防盗智能家居

一、 项目背景介绍

在城市化进程加速和双职工家庭普及的背景下,家庭安防与便捷生活需求日益增长。传统家居安防系统存在安装复杂、响应滞后、交互不便等问题,而市面上的智能家居产品往往功能单一、系统封闭。针对这一痛点,因此我开发了“安全防盗智能家居”——一套集成语音控制、智能识别与实时安防的开放式智能家居系统。

本系统特别关注以下核心场景:

1. 双手提物时无需钥匙开门

2. 日常生活语音控制照明、控温系统

3. 独居老人/儿童的家庭安全监护

4. 陌生人靠近时的主动预警

二、系统设计与工作原理

2.1 整体架构

· 前端感知:二哈摄像头模块、K10行空板语音接收

· 主控处理:K10行空板,DFROBOT掌控板

· 软件:Mind+ 3.0

2.2 核心功能模块

2.2.1 语音控制模块

· 支持离线/在线双模式语音识别

· 自定义唤醒词:“你好,小行”

· 本地语音库包含照明、控温控制指令

· 采用噪声抑制,识别准确率达95%

2.2.2 智能人脸识别门禁

· 多角度人脸采集

· 家庭成员人脸存储管理无钥匙开门

· 陌生人识别与停留时间记录

2.2.3 智能感应与报警系统

 陌生人门前滞留检测算法(停留超时触发预警)

2.3 工作流程

(1)人脸识别系统

摄像头检测到人员靠近

  ↓

摄像头进行人脸捕捉

  ↓

与预先存储人脸信息提取与比对

  ↓

匹配成功 → 开门+欢迎语音

  ↓

匹配失败 → 标记为“陌生人”

  ↓

停留时间>5秒 → 触发报警流程

  ↓

用户可通过语音随时干预

(2)语音智能控制系统

唤醒词:“你好,小行”

  ↓

检测到语音“开风扇”

  ↓

控制电机打开风扇,并语音提示“已经帮你打开风扇啦”

  ↓

检测到语音“关风扇”

  ↓

控制电机关闭风扇,并语音提示“已经帮你关闭风扇啦”

检测到语音“开灯”

  ↓

控制输出高电平,并语音提示“已经帮你打开灯光啦”

检测到语音“关灯”

  ↓

控制输出低电平,并语音提示“已经帮你关闭灯光啦”

2.4器材清单

二哈视图摄像头 (Gravity:二哈识图2 AI视觉传感器 - 6TOPS算力,预置20+AI模型,内置MCP服务 - DFRobot创客商城

K10行空板 (行空板K10 - 集成ESP32-S3,摄像头,2.8寸彩色LCD的AI物联网编程教学开发板 - DFRobot创客商城

DfROBOT掌控板(micro:bit掌控I/O扩展板-掌控板-DFRobot创客商城

DfRobot Gravity模块套装(Gravity:数字绿色LED发光模块(Arduino兼容)-LED模块-DFRobot创客商城

乐高EV3基础零件若干(【淘宝】大促价保 https://e.tb.cn/h.73VMjJiEBGtAb0A?tk=uL5WfECtmr9 HU287 「ev3编程机器人高级核心套装件搭建兼容乐高45544教育版45560教具」点击链接直接打开 或者 淘宝搜索直接打开)

三、实现步骤与原码

图片1.png图片2.png图片3.png图片4.png图片5.png

四、成品展示

图片6.png
图片7.png
图片8.png
图片9.png
图片10.png

五、迭代过程与“踩坑”记录

5.1 第一版:理想化的开端

问题:试图一次性实现所有功能,导致开发周期过长,基础功能不稳定。

教训:采用“单一功能调试”思路,先聚焦核心功能(语音控制灯光+基础人脸识别)。

5.2

踩坑记录:语言识别

· 问题:系统对普通话指令识别良好,但对不标准的普通话识别率低

5.3 第三版:人脸识别的精度

踩坑记录:监测人脸识别率低

 问题:监测识别不到人脸

解决方案:降低阈值

5.4 第四版:系统稳定性

踩坑记录:多设备通信延迟

· 问题:说出“开灯”到执行有延时,用户体验差

· 解决方案:优化程序结构

六、创新点总结

1. 人脸学习:系统能够记录存储每位家庭成员的人脸信息,实现无钥匙开门

2. 陌生人滞留预警:陌生人在门前滞留超过5秒系统会启动预警

3. 智能语音识别:智能物联网家居系统,语音控制点灯和风扇

七、未来展望

我计划在下一代产品中:

1. 增加跌倒检测等健康监护功能

2. 集成能源管理,实现用电优化

3. 开发社区安防网络,实现邻里联防

4. 探索与应急部门的数据安全对接

代码
/*!
 * MindPlus
 * DFRobot, 行空板 K10
 */
#include "asr.h"
#include "unihiker_k10.h"
#include <DFRobot_Servo.h>
#include "DFRobot_HuskylensV2.h"

// 动态变量
volatile float mind_n_time;

// 创建对象
HuskylensV2 huskylens;
UNIHIKER_K10 k10;
ASR asr;
Servo servo_P1;
uint8_t screen_dir=2;



// 主程序开始
void setup() {
	k10.begin();
	pinMode(P0, OUTPUT);
	Wire.begin();
  while (!huskylens.begin(Wire)) {
    delay(100);
  }
	asr.asrInit(CONTINUOUS, CN_MODE, 12000);
	while(asr._asrState == 0){delay(100);}
	asr.setAsrSpeed(2);
	servo_P1.attach(P1);
	k10.initScreen(screen_dir);
	k10.creatCanvas();
	huskylens.switchAlgorithm(ALGORITHM_FACE_RECOGNITION);
	asr.addASRCommand(0+1, "kai deng");
	asr.addASRCommand(1+1, "guan deng");
	asr.addASRCommand(2+1, "kai feng shan");
	asr.addASRCommand(3+1, "guan feng shan");
	servo_P1.angle(abs(0));
}
void loop() {
	huskylens.getResult(ALGORITHM_FACE_RECOGNITION);

	if (asr.isWakeUp()) {
		k10.canvas->canvasText("识别中,请说命令词:", 5, 5, 0xFF0000, k10.canvas->eCNAndENFont24, 20, true);
		k10.canvas->updateCanvas();
	}
	else {
		k10.canvas->canvasText("休眠中...", 5, 5, 0xFF0000, k10.canvas->eCNAndENFont24, 20, true);
		k10.canvas->canvasText("请说\"你好,小行\"", 5, 40, 0x000000, k10.canvas->eCNAndENFont24, 20, true);
		k10.canvas->canvasText((String(mind_n_time) + String("秒")), 5, 100, 0x000000, k10.canvas->eCNAndENFont24, 20, true);
		k10.canvas->updateCanvas();
	}
	if (asr.isDetectCmdID(0+1)) {
		asr.speak("已经帮你打开灯光啦");
		digitalWrite(P0, HIGH);
		digital_write(eP12, HIGH);
		digital_write(eP14, HIGH);
		k10.canvas->updateCanvas();
	}
	if (asr.isDetectCmdID(1+1)) {
		asr.speak("已经帮你关闭灯光啦");
		digitalWrite(P0, LOW);
		digital_write(eP12, LOW);
		digital_write(eP14, LOW);
		k10.canvas->updateCanvas();
	}
	if (asr.isDetectCmdID(2+1)) {
		asr.speak("已经帮你打开风扇啦");
		digital_write(eP8, HIGH);
		k10.canvas->updateCanvas();
	}
	if (asr.isDetectCmdID(3+1)) {
		asr.speak("已经帮你关闭风扇啦");
		digital_write(eP8, LOW);
		k10.canvas->updateCanvas();
	}
	if (huskylens.available(ALGORITHM_FACE_RECOGNITION)) {
		if ((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, ID)==1)) {
			asr.speak((String("你好") + String(RET_ITEM_STR(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, name))));
			servo_P1.angle(abs(90));
			delay(3000);
			servo_P1.angle(abs(0));
		}
		if ((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, ID)==2)) {
			asr.speak((String("你好") + String(RET_ITEM_STR(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, name))));
			servo_P1.angle(abs(90));
			delay(3000);
			servo_P1.angle(abs(0));
		}
		if (((!(RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, ID)==2)) && (!(RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, ID)==1)))) {
			mind_n_time = 0;
			while (!((!huskylens.available(ALGORITHM_FACE_RECOGNITION)) || ((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, ID)==2) || (RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_FACE_RECOGNITION), Result, ID)==1)))) {
				delay(1000);
				mind_n_time += 1;
				k10.canvas->canvasText((String(mind_n_time) + String("秒")), 5, 100, 0x000000, k10.canvas->eCNAndENFont24, 20, true);
				if ((mind_n_time>5)) {
					asr.speak("陌生人");
					k10.canvas->updateCanvas();
				}
				huskylens.getResult(ALGORITHM_FACE_RECOGNITION);
			}
			mind_n_time = 0;
		}
	}
}

评论

user-avatar