这里给大家带来一个借助角蜂鸟实现的人脸检测控制的智能台灯。当角蜂鸟发现人脸出现时台灯自动打开,没有检测到人时会自动关闭。
硬件清单参考如下:
- 角蜂鸟
- 树莓派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()