【昇腾】【玩转Atals200DK系列】基于人脸识别项目——实现检测到人脸后自动发送通知邮件

cjl68 发表于 2020/06/03 17:28:11 2020/06/03
【摘要】 案例目标基于c++的人脸识别项目,实现检测到注册的人脸后,自动发送通知邮件,以QQ邮箱为例。

案例目标

基于c++的人脸识别项目,实现检测到注册的人脸后,自动发送通知邮件,以QQ邮箱为例。

准备工作

  1. 下载并运行人脸识别项目,熟悉人脸识别项目的功能及运行流程。

  2. 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 update

    sudo apt install mailutils
    sudo apt install heirloom-mailx


  3. 配置外部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)

结果展示


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。