从零开始的DIY智能家居--自己在家手搓一套人脸识别智慧猫眼系统

本文介绍了如何构建一个DIY智慧猫眼系统,结合红外接近传感器、摄像头、人脸识别和灯泡色温调节功能。系统在物体靠近时自动拍照并进行人脸识别,若为授权人员则自动开锁并根据人脸表情调整灯光色温。同时,用户也可手动开锁,并能添加和管理授权成员的人脸信息。代码分析部分详细展示了从添加成员信息到场景自动化逻辑的实现过程。

前言

​ 最近整理资料的时候,才发现之前写的一个智慧猫眼的爱智场景没有给大家写文章介绍,可能有的小伙伴之前也看到爱智官方引用我的这个代码给大家进行了一个直播演示,我个人还是觉得自己也有必要简单介绍一下(其实是代码被自己搞丢了,最近才找官方要回来)。整个场景所需要的嵌入式设备以及相关代码看看看我之前写的arduino 天下第一(暴论) – 智能猫眼与 SDDC 连接器移植到 arduino 上从零开始的DIY智能家居 – 智能红外接近传感器,这里就不过多啰嗦了,直接来进入这次的正题。

在这里插入图片描述

界面&描述

​ 在讲解应用代码之前,先给大家看一下实现的界面以及介绍下整个场景的流程。
请添加图片描述

上图就是我们的这个应用的主页面,其实也就一个页面,为了方便把所有内容都放在一个页面里面了(就是懒!o(´^`)o)。不过不影响我接下来的表演。

从上到下,最上面黑色区域是摄像头拍摄到的一张张图片的显示区域,再往下就是关于人脸识别的一些信息和识别度等数据,这里还添加了一个根据灯关色温进行切换的表情显示。可以说说以上都是整个场景的一些数据展示。

中间部分我们可以看到有四个设备通过虚线连接到到爱智的一个演示图,我们通过点击每个图片对应的类型设备进行场景设备的选择,当设备被添加成功后,场景的业务逻辑会自动的运行。

主要业务逻辑:红外接近设备检测到物体靠近,会通知应用进行摄像头设备的拍照,再拿到返回的照片信息后,会通过人脸识别功能进行识别匹配,如果是授权人员,门锁设备将会进行开锁操作,同归灯泡会个根据当前人脸的表情进行色温调节。

除了可以自动识别开锁,应用也提供了手动开锁,那个大大的圆形的中间有个锁的按钮就是开锁按钮了。

最下面的授权成员,其实就是我们配置的人员人脸信息,主要还是通过调用手机摄像头进行拍照,然后通过人脸分析模块将得到的数据和个人信息进行持久化存储。

关于应用的大致描述就以上这些了。(/ω\)

代码分析

下面我们根据上面说的场景业务逻辑给大家简单过一遍代码。

  • 添加授权人员信息

    ...
    
    // 添加成员信息
    const multer = require('middleware').multer;
    const upload = multer({
         
          dest: 'uploads/' });
    // const upload = multer({ storage: multer.memoryStorage() });
    app.post('/upload-file', upload.any(), (req, res) => {
         
         
    	// 检测用户名是否存在
    	const isExistName = lwir_camera_lock_light_scene.settings.faces.find((item) => {
         
                    return item.name === req.body.name 
        });
    	if (isExistName) {
         
         
    		return res.send({
         
          result: false, message: '当前用户名的用户已存在!' });
    	}
    	const buffer = fs.readFile(path.join('./', req.files[0].path));
    	const features = getFaceFeature(buffer);
    	if (!features) {
         
         
    		return res.send({
         
          result: false, message: '人脸识别出错!' })
    	}
    	if (!features.length || features.length > 1) {
         
         
    		return res.send({
         
          result: false, message: '请确保图片中有且仅有单人头像!' });
    	}
    	// 先检测数据库中是否存在该人脸的信息
    	const isExistFace = checkFaceAuthorization(features[0].keys);
    	if (isExistFace) {
         
         
    		return res.send({
         
          result: false, message: '当前人脸信息已经在数据库中存在!' });
    	}
    	// 将人脸信息key录入数据库中
    	lwir_camera_lock_light_scene.settings.faces.push({
         
          name: req.body.name, keys: features[0].keys })
    	updateSceneDB();
    	res.send
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值