智能台灯

这里给大家带来一个借助角蜂鸟实现的人脸检测控制的智能台灯。当角蜂鸟发现人脸出现时台灯自动打开,没有检测到人时会自动关闭。

硬件清单参考如下:

  • 角蜂鸟
  • 树莓派3b
  • 1路继电器模块
  • 5V USB台灯

构思

1-1

在角蜂鸟内置的模型中,为我们提供了 Mobilenet-SSD 模型,我们将使用这个模型实现人脸检测的功能。大概的处理逻辑如下:

2-2

然后就是控制台灯,我们通过 1路继电器模块 来控制工作电路的闭合。树莓派 GPIO 引脚接继电器控制端 INGND 引脚接继电器 DC-端构成回路。这里采用高电平触发,当 GPIO 输出高电平时,工作电路闭合,台灯亮起;输出低电平时,工作电路断开,台灯熄灭。

继电器

1路继电器模块

  • DC+ 接电源正极
  • DC- 接电源负极
  • IN 高或低电平控制继电器吸合
  • COM 公用接口
  • NO 常开接口,吸合前悬空,吸合后与 COM 短接
  • NC 常闭接口,吸合前与 COM 短接,吸合后悬空

跳线与 High 短接时为高电平触发,与 LOW 短接时为低电平触发。

具体实现

准备好树莓派,安装 SungemSDK 运行环境,并且连接好角蜂鸟和继电器。 1

继电器控制代码如下:

#!/usr/bin/env python3
# coding=utf-8

# lamp.py

import RPi.GPIO as GPIO

PIN = 7

def setup():
    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BOARD) # 物理编码
    GPIO.setup(PIN, GPIO.OUT) # 设置BOARD编码为PIN的引脚为输出引脚

def power(on=True):
    GPIO.output(PIN, on) # True 高电平 -> 闭合 ; False 低电平 -> 断开

def clean():
    GPIO.cleanup()

业务逻辑代码如下:

#!/usr/bin/env python3
# coding=utf-8

import sys
sys.path.append("../../SungemSDK-Python")
import hsapi as hs
import lamp


def process(ret):
    img = ret[0]
    face = []
    for box in ret[1]:
        if (box[4] - box[2] > img.shape[1] * 0.8) \
                and (box[5] - box[3] > img.shape[0] * 0.8):
            # 过滤误检
            continue
        face.append(box)
    return face


if __name__ == '__main__':
    lamp.setup()
    counter = 0

    try:
        net = hs.FaceDetector(zoom=True, verbose=0, threshSSD=0.55)
        while True:
            result = net.run()  # 读取角蜂鸟返回的结果
            faces = process(result)

            counter += 1 if len(faces) > 0 else -1
            if counter > 10:  # 连续10帧都存在人脸
                lamp.power(True)  # 输出高电平,灯亮起
                counter = 10
            elif counter < 0:
                lamp.power(False)  # 输出低电平,灯关闭
                counter = 0
    finally:
        lamp.clean()

展示

效果图

效果图

效果图