利用K230D BOX的人脸识别功能,通过提取其识别结果即可进行门禁管理。
通过添加语句print(self.db_name[v_id],v_score_max) ,即可测试提取内容的正确性,在串口终端其输出内容见图1所示。
图1 输出关键信息
有了识别结果,我们能进行哪些处理呢?
对于门禁管理来说,最简单的处理就是发出提示。
为此,对于识别率较高者可点亮LED作为指示。
因此,需在识别程序的基础上添加以下内容来使LED发出提示。
from machine import Pin,PWM # 实例化FPIOA fpioa = FPIOA() # 为IO分配相应的硬件功能 fpioa.set_function(23, FPIOA.GPIO23) fpioa.set_function(61, FPIOA.GPIO61) ledr = Pin(23, Pin.OUT, pull=Pin.PULL_NONE, drive=7) ledh = Pin(61, Pin.OUT, pull=Pin.PULL_NONE, drive=7) ledh.value(1) ledr.value(0)
在识别成功的情况下,对高识别率的情况加以提示,即点亮LED。
此外,通过判别处理还可分辨来访者是谁。
相应的程序内容为:
# 识别成功
if v_score_max > 0.90 :
ledh.value(0)
ledr.value(1)
if(self.db_name[v_id]=='ID1') :
print('Janny')
if(self.db_name[v_id]=='ID2') :
print('Susan')
...
else:
ledh.value(1)
ledr.value(0)经程序运行,其测试效果见图2至图4所示,说明处理有效。
当然,对于电子门锁也可触发控制动作。

图2 来访者识别

图3 点亮指示灯(注册者)

图4 熄灭指示灯(未注册者)
这样就发挥了识别的作用,即能识别,还能知道具体是谁。
这样就发挥了识别的作用,即能识别,还能知道具体是谁。
另外,还可以使用PWM来控制舵机进行门禁的管控。
利用PWM控制舵机的程序为:
from machine import PWM from machine import FPIOA import time from machine import Pin # 实例化FPIOA fpioa = FPIOA() # 为IO分配相应的硬件功能 fpioa.set_function(34, FPIOA.GPIO34) fpioa.set_function(0, FPIOA.GPIO0) # 构造GPIO对象 key0 = Pin(34, Pin.IN, pull=Pin.PULL_UP, drive=7) fpioa.set_function(25,FPIOA.PWM5) pwm5 = PWM(5, 50, duty=10, enable=True) duty = 3 pwm5.duty(duty) f=0 while True: # 读取按键状态 if f == 1: duty=7 if f == 0: duty=13 pwm5.duty(duty) time.sleep_ms(20)
经程序的运行,其测试效果见图5所示。

图5 连接形式

图6开启门禁
除此之外,还能进行啥深耕呢?
还可以引入语音合成技术,利用语音合成模块播报来访者是谁,其电路连接见图7所示。

图7 连接方式
在识别后,可针对性的发出问候,如“你好珍妮,请进!”,“欢迎再来!”。若没有注册,则给出“未能识别!”的提示。
为此,在识别程序的基础上所添加的内容为:
from machine import Pin
from machine import UART
from machine import FPIOA
# 实例化FPIOA
fpioa = FPIOA()
# 为IO分配相应的硬件功能
fpioa.set_function(34, FPIOA.GPIO34)
fpioa.set_function(35, FPIOA.GPIO35)
fpioa.set_function(44,FPIOA.UART2_TXD)
fpioa.set_function(45,FPIOA.UART2_RXD)
# 构造UART对象
uart2 = UART(UART.UART2, baudrate=115200, bits=UART.EIGHTBITS, parity=UART.PARITY_NONE, stop=UART.STOPBITS_ONE)
Buf1 = b'\xFD\x00\x10\x01\x03\x60\x4F\x7D\x59\x77\x6D\x26\x4F\x01\x30\xF7\x8B\xDB\x8F'
Buf2 = b'\xFD\x00\x10\x01\x03\x60\x4F\x7D\x59\xCD\x73\xAE\x59\x01\x30\xF7\x8B\xDB\x8F'
...
Buf0 =b'\xFD\x00\x0A\x01\x03\x2A\x67\xFD\x80\xC6\x8B\x2B\x52'
Bufe =b'\xFD\x00\x0A\x01\x03\x22\x6B\xCE\x8F\x8D\x51\x65\x67'
有来访者有针对性地处理的程序为:
if(self.db_name[v_id]=='ID1') :
if(zt[0]==1) :
#print('Janny')
uart2.write(buf1)
else:
uart2.write(bufe)
zt[0]==1
if(self.db_name[v_id]=='ID2') :
if(zt[1]==1) :
#print('Susan')
uart2.write(buf2)
else:
uart2.write(bufe)
zt[1]==1
...
if v_score_max < 0.90 :
# 小于人脸识别阈值,未识别
#print('unknown')
uart2.write(buf0)
return 'unknown'经程序运行,即可以语音的方式给出相应的提示。
除此之外,还可以引入RTC计时和TF卡读写功能来记录来访者的时间。若是稍加修改,则可成为人脸识别型打卡机。
视频演示:
我要赚赏金
