这里给大家带来一个借助角蜂鸟实现的人脸检测控制的智能台灯。当角蜂鸟发现人脸出现时台灯自动打开,没有检测到人时会自动关闭。
硬件清单参考如下:
- 角蜂鸟
 - 树莓派3b
 - 1路继电器模块
 - 5V USB台灯
 

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

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

1路继电器模块
DC+接电源正极DC-接电源负极IN高或低电平控制继电器吸合COM公用接口NO常开接口,吸合前悬空,吸合后与COM短接NC常闭接口,吸合前与COM短接,吸合后悬空跳线与
High短接时为高电平触发,与LOW短接时为低电平触发。
准备好树莓派,安装 SungemSDK 运行环境,并且连接好角蜂鸟和继电器。

继电器控制代码如下:
#!/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()


