【昇腾】【玩转Atals200DK系列】基于人脸识别项目——实现检测到人脸后自动发送通知邮件
基于c++的人脸识别项目,实现检测到注册的人脸后,自动发送通知邮件,以QQ邮箱为例。
-
下载并运行人脸识别项目,熟悉人脸识别项目的功能及运行流程。
-
Mind Studio所在服务器安装heirloom-mailx
sudo apt install heirloom-mailx
ubuntu18.04上无法直接安装heirloom-mailx,需要添加软件源
sudo vi /etc/apt/sources.list
写入deb http://cz.archive.ubuntu.com/ubuntu xenial main universe
安装heirloom-mailx
sudo apt-get updatesudo apt install mailutils
sudo apt install heirloom-mailx -
配置外部SMTP
sudo vim /etc/s-nail.rc
在文件的最下方添加如下命令
set from=XXX@qq.com set smtp=smtp.qq.com set smtp-auth-user=XXX@qq.com set smtp-auth-password=XXXXX set smtp-auth=login
说明:
-
from: 对方收到邮件时显示的发件人
-
smtp: 指定第三方发送邮件的smtp服务器地址
-
smtp-auth: SMTP的认证方式,默认是LOGIN
-
smtp-auth-user: 第三方发邮件的用户名
-
smtp-auth-password: 用户名对应密码
QQ邮箱是需要填写授权码,并不是邮箱密码,可参考链接https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
思路分析
我们的目标是在检测到注册的人脸后发送邮件,那只需找到对应功能的代码位置,在其后添加发送邮件的指令即可完成任务。
在sample-facialrecognition/presenterserver/facial_recognition/src/ facial_recognition_server.py内发现 _recognize_face(self, face_feature)函数,从函数名可看出这个函数就在做识别人脸的事。
从下图代码看到返回值face_list就是获得到的展示信息,有检测框坐标、姓名、置信度。那在return前,判断若face_list不为空,就可发送通知邮件了。
若检测到注册的人脸就发送邮件,那1秒就会发送好几封邮件,每一帧都在做检测。大量的发送相同内容,邮箱服务器会判定为群发邮件,不给继续发送邮件。并且在一段时间内,邮件接收者也不希望接收到几十封相同提醒的邮件。这里需要做个间隔发送。
代码编写
第一步:导入time,设置间隔时间
import time
SEND_INTERVAL = 3600
第二步:初始化两个属性,用于间隔发送邮件
self.start_time = time.time()
self.now_time = 0
第三步:编写发送邮件的代码
发送邮件的命令是 echo “邮件”| mail -s "邮件主题" XXX@qq.com
# 第一次发送
if self.now_time == 0:
self.now_time = time.time()
send_time_string = time.strftime('%Y-%m-%d %H:%M:%S')
send_string = "Warning! Face were detected at %s."%send_time_string
os.system("echo %s | mail -s 'Face detected' XXX@qq.com"%send_string)
now_time = time.time()
# 间隔SEND_INTERVAL秒后发送
if face_list is not None and self.now_time - self.start_time > SEND_INTERVAL:
self.start_time = time.time()
send_time_string = time.strftime('%Y-%m-%d %H:%M:%S')
send_string = "Warning! Face were detected at %s."%send_time_string
os.system("echo %s | mail -s 'Face detected' XXX@qq.com"%send_string)
结果展示
- 点赞
- 收藏
- 关注作者
评论(0)