[Python趣味应用]总有人想偷看你电脑?留下证据后办他~~

**最新文章会在我的个人网站发布:http://www.xiaokai1999.cn/
**
这个项目在寒假前就做了,因为当时在学校,不管是来窜宿舍的同学或者是自己宿舍里的同学,总会有人对我的电脑产生兴趣,然后偷看我的电脑。于是我就想了个办法,记录那些偷看过我电脑的人。

嘿嘿,接下来就是男生之间的交易了。

大概想法:
在这里插入图片描述

实现效果:
邮件接受效果邮件接受效果
检测效果
语音视频文件展示–>因为视频太短,上传到bilibili并不好,可以移步我的个人博客查看

涉及到的知识点:

1.十行Python代码实现人脸识别

2.调用百度api实现语音合成

3.如何操作email库

1.十行Python代码实现人脸识别

  • 使用基于Haar特征的Cascade级联分类器进行人脸识别(听起来好高大上,但其实原理很简单)

  • 用人脸识别同样的道理,扩展到人眼识别上

  • 用opencv自带的Harr级联分类器进行人脸、人眼与微笑识别

啥是Harr特征

Haar特征包含三种:边缘特征、线性特征、中心特征和对角线特征。每种分类器都从图片中提取出对应的特征。

img

Harr特征

img

搜索人脸上的指定特征

比如上图中,横的黑道将人脸中较暗的双眼提取了出来,而竖的白道将人脸中较亮的鼻梁提取了出来。

具体想了解的同学可一曲看看这个大老讲得卷积核,很细

啥是Cascade级联分类器

基于Haar特征的cascade级联分类器是Paul Viola和 Michael Jone在2001年的论文”Rapid Object Detection using a Boosted Cascade of Simple Features”中提出的一种有效的物体检测方法。

Cascade级联分类器的训练方法:Adaboost

级联分类器的函数是通过大量带人脸不带人脸的图片通过机器学习得到的。对于人脸识别来说,需要几万个特征,通过机器学习找出人脸分类效果最好、错误率最小的特征。训练开始时,所有训练集中的图片具有相同的权重,对于被分类错误的图片,提升权重,重新计算出新的错误率和新的权重。直到错误率或迭代次数达到要求。这种方法叫做Adaboost

在Opencv中可以直接调用级联分类器函数。

将弱分类器聚合成强分类器

最终的分类器是这些弱分类器的加权和。之所以称之为弱分类器是因为每个分类器不能单独分类图片,但是将他们聚集起来就形成了强分类器。论文表明,只需要200个特征的分类器在检测中的精确度达到了95%。最终的分类器大约有6000个特征。(将超过160000个特征减小到6000个,这是非常大的进步了) 。

级联的含义:需过五关斩六将才能被提取出来

事实上,一张图片绝大部分的区域都不是人脸。如果对一张图片的每个角落都提取6000个特征,将会浪费巨量的计算资源。

如果能找到一个简单的方法能够检测某个窗口是不是人脸区域,如果该窗口不是人脸区域,那么就只看一眼便直接跳过,也就不用进行后续处理了,这样就能集中精力判别那些可能是人脸的区域。
为此,有人引入了Cascade 分类器。它不是将6000个特征都用在一个窗口,而是将特征分为不同的阶段,然后一个阶段一个阶段的应用这些特征(通常情况下,前几个阶段只有很少量的特征)。如果窗口在第一个阶段就检测失败了,那么就直接舍弃它,无需考虑剩下的特征。如果检测通过,则考虑第二阶段的特征并继续处理。如果所有阶段的都通过了,那么这个窗口就是人脸区域。
作者的检测器将6000+的特征分为了38个阶段,前五个阶段分别有1,10,25,25,50个特征(前文图中提到的识别眼睛和鼻梁的两个特征实际上是Adaboost中得到的最好的两个特征)。根据作者所述,平均每个子窗口只需要使用6000+个特征中的10个左右。

OpenCV中的Haar-cascade检测

OpenCV 既可以作为检测器也可以进行机器学习训练。如果你打算训练自己的分类器识别任意的物品,比如车,飞机,咖啡杯等。你可以用OpenCV 创造一个。完整的细节在:Cascade Classifier Training¶中。

下面给出调用OpenCV进行基于Haar特征的人脸和人眼Cascade级联分类器的源代码。

十行代码完成人脸识别(代码)

# 导入opencv-python
import cv2

# 读入一张图片,引号里为图片的路径,需要你自己手动设置
img = cv2.imread('image1.jpg',1)

# 导入人脸级联分类器引擎,'.xml'文件里包含训练出来的人脸特征
face_engine = cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_frontalface_default.xml')
# 用人脸级联分类器引擎进行人脸识别,返回的faces为人脸坐标列表,1.3是放大比例,5是重复识别次数
faces = face_engine.detectMultiScale(img,scaleFactor=1.3,minNeighbors=5)

# 对每一张脸,进行如下操作
for (x,y,w,h) in faces:
    # 画出人脸框,蓝色(BGR色彩体系),画笔宽度为2
    img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)

# 在"img2"窗口中展示效果图
cv2.imshow('img2',img)
# 监听键盘上任何按键,如有按键即退出并关闭窗口,并将图片保存为output.jpg
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('output.jpg',img)

img
上文引用自:https://www.jianshu.com/p/ea3c57b6c5e1

2.调用百度api实现语音合成

有些人可能会问,为什么不自己写一个,而去用百度api呢?
我的回答:免费的干嘛不用,非要去自己造轮子,
效 率 太 低 \color{red}{效率太低}

  • 目前百度api的语音合成是免费的,每天也没有限制,想怎么用怎么用。
    在这里插入图片描述

2.1添加自己的机器人

没有百度帐号的可以先创建一个帐号(话说现在还有谁没有无良商家的帐号呢,狗头保命)
我可是 超 级 会 员 \color{red}{超级会员} ,可是下载速度依旧只有100k/s,100M的网速被疯狂压榨
在这里插入图片描述好,回归正题。

2.1.1 创建

在这里插入图片描述

2.1.2填写

在这里插入图片描述

2.1.3 得到APPID,AK,SK

在这里插入图片描述

2.1.4 下载官方api

支持Python版本:2.7.+ ,3.+

安装使用Python SDK有如下方式:

如果已安装pip,执行pip install baidu-aip即可。
如果已安装setuptools,执行python setup.py install即可。

2.2 代码实现语音识别

'''baidu.py'''
from aip import AipSpeech
import os
import playsound
""" 你的 APPID AK SK """
"""填入上面获取到的3个字符串"""
APP_ID = ''
API_KEY = ''
SECRET_KEY = ''
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

# 语音播报 我这边用到了 vlc播放器,大家也可以尝试别的方法
def play_audio():
    path = os.getcwd()
    commend = "cvlc " + path +"/myGetAudio.wav vlc://quit" 
    os.system(commend)
    # playsound("ffmpeg myGetAudio.wav")
    print("语音播放完成")

# 合成音频
def hecheng_audio(msg):
    result = client.synthesis(msg, 'zh', 1, {
    
    
        'vol': 5,
        'per': 3
    })
    print("完成")
    # 识别正确返回语音二进制 错误则返回dict 参照下面错误码
    if not isinstance(result, dict):
        with open('myGetAudio.wav', 'wb') as f:
            f.write(result)
        f.close()
        print("语音接受完成")
        play_audio()

3.email库的操作方法(主要可以去https://docs.python.org/zh-cn/3/library/email.html查看详细资料)以下给出具体的操作方法

   '''
    @author:JackyMao
    '''
    #------------------------------------------------------------------------------------------------
    import smtplib
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from email.header import Header
    import os,time,re
     
    def send_Test_email(mail_to):
        '''本模块实现获取最新的测试报告html文件,读取部分报告内容作为邮件正文,将报告作为附件,并发送到指定的邮箱,
            参数mail_to代表的是接收邮箱,例如:'[email protected]' '''
        
        #发送邮箱
        mail_from = '[email protected]'
        #发送邮件主题
        mail_subject = 'Automation Test Report'
        #发送邮箱服务器
        mail_smtpserver = 'smtp.163.com'
        #发送邮箱用户/密码
        mail_username = '[email protected]'
        mail_password = 'yyyyyy'
     
        #定义邮件内容,中文需参数‘utf-8’,单字节字符不需要
        '''
        #发送文件形式的邮件
        msg = MIMEText('你好!','text','utf-8')
        '''
        '''
        #发送html形式以正常文本显示在邮件内容中的邮件
        msg = MIMEText('<html><h1>你好!</h1></html>','html','utf-8')
        '''
        '''
        #读取html文件内容并发送
        f=open(file_new,'rb')
        mail_body=f.read()
        f.close()
        print mail_body
        msg=MIMEText(mail_body,_subtype='html',_charset='utf-8')
        '''
        
        #创建一个带附件的邮件实例(内容)
        msg = MIMEMultipart()
        #找到report目录下最新生成的报告文件供后续使用
        result_dir = 'D:\\report'
        lists=os.listdir(result_dir)
        lists.sort(key=lambda fn: os.path.getmtime(result_dir+"\\"+fn) if not
                   os.path.isdir(result_dir+"\\"+fn) else 0)
        print (u'The Latest Test Report is: '+lists[-1])
        file_new = os.path.join(result_dir,lists[-1])
        #读取最新的测试报告文件获取部分信息来定义邮件的内容
        Regex_Theme=re.compile(r'Automation Test Report')
        Regex_Content=re.compile(r'<strong>(.*:)</strong>(.*)<')
        Report_File=open(file_new,'r')
        Mail_Content=[]
        for line in Report_File.readlines():
            if '<title>Automation Test Report</title>' in line or "<p class='attribute'>" in line:
                i=Regex_Theme.findall(line)
                j=Regex_Content.findall(line)
                if i != []:
                    Mail_Content.append(i)
                if j != []:
                    Mail_Content.append(j)
        Report_File.close()
        #将读取到的测试报告的数据以html形式显示为邮件的中文
        msgTest=MIMEText('''<html><h1>Test completed,Test results are as follows:</h1></html>'''
                         '''<hr />'''
                         '''<p><strong>'''+Mail_Content[0][0]+'''</strong></p>'''
                         '''<p><strong>'''+Mail_Content[1][0][0]+'''</strong>'''+Mail_Content[1][0][1]+'''</p>'''
                         '''<p><strong>'''+Mail_Content[2][0][0]+'''</strong>'''+Mail_Content[2][0][1]+'''</p>'''
                         '''<p><strong>'''+Mail_Content[3][0][0]+'''</strong>'''+Mail_Content[3][0][1]+'''</p>'''
                         '''<hr />'''
                         '''<p>PS: Detailed test results please refer to the attachment</p>'''
                         ,'html','utf-8')
        msg.attach(msgTest)
        #定义邮件的附件
        att1 = MIMEText(open(file_new, 'rb').read(), 'base64', 'utf-8')
        att1["Content-Type"] = 'application/octet-stream'
        att1["Content-Disposition"] ='attachment; filename="Automation test report.html"'#这里的filename指的是附件的名称及类型
        msg.attach(att1)
        #将邮件的主题等相关信息添加到邮件实例
        msg['Subject'] = Header(mail_subject)
        msg['From'] = mail_from
        msg['To'] = mail_to
        msg['date']=time.strftime('%a, %d %b %Y %H:%M:%S %z') 
        #创建发送服务器实例并将发送服务器添加到实例中
        smtp = smtplib.SMTP()
        smtp.connect(mail_smtpserver)
        '''
        #采用ssl加密传输
        smtp.ehlo()
        smtp.starttls()
        smtp.ehlo()
        '''
        '''
        #打印交互的日志信息
        #smtp.set_debuglevel(1)
        '''
        #登录发送邮件服务器并进行邮件的发送
        smtp.login(mail_username, mail_password)
        smtp.sendmail(mail_from, mail_to, msg.as_string())
        print u'Test report sent successfully,Please go to the following email to check the test report :%s' %mail_to
        smtp.quit()
        
    #----------------------------------------------------------------------------------------------------
    if __name__ == "__main__":
        send_Test_email('[email protected]')


当然,如果要使用email模块的其他功能,可以参考网上的以下7个列子:

一,文件形式的邮件

    #!/usr/bin/env python3
    #coding: utf-8
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
     
    sender = '***'
    receiver = '***'
    subject = 'python email test'
    smtpserver = 'smtp.163.com'
    username = '***'
    password = '***'
     
    msg = MIMEText('你好','text','utf-8')#中文需参数‘utf-8',单字节字符不需要
    msg['Subject'] = Header(subject, 'utf-8')
     
    smtp = smtplib.SMTP()
    smtp.connect('smtp.163.com')
    smtp.login(username, password)
    smtp.sendmail(sender, receiver, msg.as_string())
    smtp.quit()

二、html形式的邮件

    #!/usr/bin/env python3
    #coding: utf-8
    import smtplib
    from email.mime.text import MIMEText
     
    sender = '***'
    receiver = '***'
    subject = 'python email test'
    smtpserver = 'smtp.163.com'
    username = '***'
    password = '***'
     
    msg = MIMEText('</pre>
    <h1>你好</h1>
    <pre>','html','utf-8') 
     
    msg['Subject'] = subject 
     
    smtp = smtplib.SMTP()
    smtp.connect('smtp.163.com')
    smtp.login(username, password)
    smtp.sendmail(sender, receiver, msg.as_string())
    smtp.quit()

三、带图片的html邮件

    #!/usr/bin/env python3
    #coding: utf-8
    import smtplib
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.mime.image import MIMEImage 
     
    sender = '***'
    receiver = '***'
    subject = 'python email test'
    smtpserver = 'smtp.163.com'
    username = '***'
    password = '***' 
     
    msgRoot = MIMEMultipart('related')
    msgRoot['Subject'] = 'test message' 
     
    msgText = MIMEText('<b>Some <i>HTML</i> text</b> and an image.
    <img alt="" src="cid:image1" />
    good!','html','utf-8')
    msgRoot.attach(msgText) 
     
    fp = open('h:\\python\\1.jpg', 'rb')
    msgImage = MIMEImage(fp.read())
    fp.close() 
     
    msgImage.add_header('Content-ID', '')
    msgRoot.attach(msgImage) 
     
    smtp = smtplib.SMTP()
    smtp.connect('smtp.163.com')
    smtp.login(username, password)
    smtp.sendmail(sender, receiver, msgRoot.as_string())
    smtp.quit()


四、带附件的邮件

    #!/usr/bin/env python3
    #coding: utf-8
    import smtplib
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.mime.image import MIMEImage 
     
    sender = '***'
    receiver = '***'
    subject = 'python email test'
    smtpserver = 'smtp.163.com'
    username = '***'
    password = '***' 
     
    msgRoot = MIMEMultipart('related')
    msgRoot['Subject'] = 'test message' 
     
    #构造附件
    att = MIMEText(open('h:\\python\\1.jpg', 'rb').read(), 'base64', 'utf-8')
    att["Content-Type"] = 'application/octet-stream'
    att["Content-Disposition"] = 'attachment; filename="1.jpg"'
    msgRoot.attach(att) 
     
    smtp = smtplib.SMTP()
    smtp.connect('smtp.163.com')
    smtp.login(username, password)
    smtp.sendmail(sender, receiver, msgRoot.as_string())
    smtp.quit()


五、群邮件

    #!/usr/bin/env python3
    #coding: utf-8
    import smtplib
    from email.mime.text import MIMEText 
     
    sender = '***'
    receiver = ['***','****',……]
    subject = 'python email test'
    smtpserver = 'smtp.163.com'
    username = '***'
    password = '***' 
     
    msg = MIMEText('你好','text','utf-8') 
     
    msg['Subject'] = subject 
     
    smtp = smtplib.SMTP()
    smtp.connect('smtp.163.com')
    smtp.login(username, password)
    smtp.sendmail(sender, receiver, msg.as_string())
    smtp.quit()


六、包含各种元素的邮件

    #!/usr/bin/env python3
    #coding: utf-8
    import smtplib
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.mime.image import MIMEImage 
     
    sender = '***'
    receiver = '***'
    subject = 'python email test'
    smtpserver = 'smtp.163.com'
    username = '***'
    password = '***' 
     
    # Create message container - the correct MIME type is multipart/alternative.
    msg = MIMEMultipart('alternative')
    msg['Subject'] = "Link" 
     
    # Create the body of the message (a plain-text and an HTML version).
    text = "Hi!\nHow are you?\nHere is the link you wanted:\nhttp://www.python.org"
    html = """\
     
    Hi!
           How are you?
           Here is the <a href="http://www.python.org">link</a> you wanted.
     
    """ 
     
    # Record the MIME types of both parts - text/plain and text/html.
    part1 = MIMEText(text, 'plain')
    part2 = MIMEText(html, 'html') 
     
    # Attach parts into message container.
    # According to RFC 2046, the last part of a multipart message, in this case
    # the HTML message, is best and preferred.
    msg.attach(part1)
    msg.attach(part2)
    #构造附件
    att = MIMEText(open('h:\\python\\1.jpg', 'rb').read(), 'base64', 'utf-8')
    att["Content-Type"] = 'application/octet-stream'
    att["Content-Disposition"] = 'attachment; filename="1.jpg"'
    msg.attach(att) 
     
    smtp = smtplib.SMTP()
    smtp.connect('smtp.163.com')
    smtp.login(username, password)
    smtp.sendmail(sender, receiver, msg.as_string())
    smtp.quit()


7、基于ssl的邮件

    #!/usr/bin/env python3
    #coding: utf-8
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    sender = '***'
    receiver = '***'
    subject = 'python email test'
    smtpserver = 'smtp.163.com'
    username = '***'
    password = '***' 
     
    msg = MIMEText('你好','text','utf-8')#中文需参数‘utf-8',单字节字符不需要
    msg['Subject'] = Header(subject, 'utf-8') 
     
    smtp = smtplib.SMTP()
    smtp.connect('smtp.163.com')
    smtp.ehlo()
    smtp.starttls()
    smtp.ehlo()
    smtp.set_debuglevel(1)
    smtp.login(username, password)
    smtp.sendmail(sender, receiver, msg.as_string())
    smtp.quit()

接下来就是源代码时刻(复制粘帖就能用的那种哦)

注 意 : 博 主 用 的 是 163 和 q q , 其 他 邮 箱 还 得 看 官 方 的 介 绍 来 引 入 \color{blue}{注意:博主用的是163和qq,其他邮箱还得看官方的介绍来引入} 163qq

Email_Received.py

'''Email_Received.py'''
# pop3
import poplib
# 邮箱标题文本
from email.header import decode_header
# 邮箱分析器
from email.parser import Parser
# 用来解析邮件来源
from email.utils import parseaddr

# 邮件接收类
class Email_Received:
    def __init__(self,usercount,password,pop3_url):
        self.usercount = usercount # 用户的账户
        self.password = password # 用户的密码
        self.pop3_sever = poplib.POP3(pop3_url)# pop3服务器为163
    def conect_pop(self):
        self.pop3_sever.user(self.usercount)# 验证账号
        self.pop3_sever.pass_(self.password)# 验证密码
    def get_length(self):
        rsp, msg_list, rsp_siz = self.pop3_sever.list()# 获取当前邮箱邮件数,为字节型
        return len(msg_list)
    def get_latest_email(self):
        self.pop3_sever.set_debuglevel(1)# set_debuglevel()参数为1,后面的函数会输出信息
        #print(self.pop3_sever.getwelcome().decode('utf8'))# 获取邮箱欢迎语句

        rsp, msg_list, rsp_siz = self.pop3_sever.list()# 获取当前邮件数
        self.nowcount = len(msg_list)
        rsp, msglines, msgsiz = self.pop3_sever.retr(len(msg_list))# 获取邮件信息
        #print(msglines)
        msg_content = b'\r\n'.join(msglines).decode('gbk')
        #print(msg_content)
        msg = Parser().parsestr(text=msg_content)#分析邮件信息
        self.msg = msg

    def get_email_title(self):
        subject = self.msg['Subject']
        value, charset = decode_header(subject)[0]
        if charset:
            value = value.decode(charset)
        # print('邮件主题: {0}'.format(value))
        self.email_title = value
        #print(value)

    def get_sender_info(self):
        hdr, addr = parseaddr(self.msg['From'])
        # name 发送人邮箱名称, addr 发送人邮箱地址
        name, charset = decode_header(hdr)[0]
        if charset:
            name = name.decode(charset)
        self.sender_name = name
        self.sender_email = addr
        #print('发送人邮箱名称: {0}'.format(name))
        #print('发送人邮箱名称: {0},发送人邮箱地址: {1}'.format(name, addr))

    def get_email(self):
        self.get_latest_email()
        self.get_email_title()
        self.get_sender_info()
        return self.email_title,self.sender_name,self.sender_email,self.nowcount
    def close(self):
        self.pop3_sever.quit()


Email_Send.py

'''Email_Send.py'''
# 邮箱标题文本
from email.header import Header
# 邮箱内容多项目
from email.mime.multipart import MIMEMultipart
# 邮箱内容文本
from email.mime.text import MIMEText
# 邮箱内容图片
from email.mime.image import MIMEImage
# SMTP
import smtplib
# 邮件发送类
class Email_Send:
    # 用来初始化类的函数
    def __init__(self, from_addr, to_addr, password,smtp_url):
        self.from_addr = from_addr  # 寄邮件的邮箱地址
        self.to_addr = to_addr  # 收邮件的邮箱地址
        self.password = password  # 寄邮件的允许密码,不是登陆密码
        self.smtp = smtplib.SMTP(smtp_url)  # 确定SMTP的服务器是163

    def msg_stmp(self, sendname, minetext, subject):
        msg = MIMEMultipart('mixed')  # 新建一个多项的邮件处理变量
        msg['From'] = sendname + '<' + self.from_addr + '>'  # 发送人的邮箱
        msg['To'] = self.to_addr  # 接收人的邮箱
        msg['Subject'] = Header(subject, 'utf-8')  # 标题文本
        text = MIMEText(minetext, 'plain', 'utf-8')  # 主要文本内容
        msg.attach(text)  # 添加文本进多项的邮件处理
        image = open('1.png', 'rb').read()
        mineimage = MIMEImage(image)  # 要发送邮件的图片
        mineimage['Content-Disposition'] = 'attachment; filename = "people.png"'
        msg.attach(mineimage)
        return msg

    # 发送信息
    def sendmessage(self, sendname, minetext, subject):
        self.smtp.sendmail(self.from_addr, self.to_addr, self.msg_stmp(sendname, minetext, subject).as_string())  # 发送邮件

    # 登录邮箱
    def start_stmp(self):
        self.smtp.login(self.from_addr, self.password)

    # 退出邮箱
    def stop_stmp(self):
        self.smtp.quit()

main.py

'''main.py'''
from Email_Send import Email_Send
from Email_Received import Email_Received
# opencv
import cv2
# 延时函数
from time import sleep
# 操作系统
import os
# 接入百度api
import baidu

def find_face(path):
    face_patterns = cv2.CascadeClassifier(path+"/haarshare/haarcascade_frontalface_default.xml")
    eye_patterns = cv2.CascadeClassifier(path+"/haarshare/haarcascade_eye.xml")

    cap = cv2.VideoCapture(0)

    while True:
        rep,frame = cap.read()


        faces = face_patterns.detectMultiScale(frame,scaleFactor=1.3,minNeighbors=5)

        for (x,y,w,h) in faces:
            cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)
            face_area = frame[y:y+h,x:x+w]
            eyes = eye_patterns.detectMultiScale(face_area)
            for (ex,ey,ew,eh) in eyes:
                cv2.rectangle(frame,(x+ex,y+ey),(x+ex+ew,y+ey+eh),(255,0,0),2)
            cv2.imwrite(path+"/1.png",frame)
        if len(faces)>=1:
            return 1,len(faces)

# opencv 打开摄像头
def open_camera(path):
    cap = cv2.VideoCapture(0)
    ret, frame = cap.read()
    sleep(0.5)
    cv2.imwrite(path+'/1.png',frame)
    cap.release()

if __name__ == '__main__':
    path  = os.getcwd()
    smtp_url = {
    
    '163': 'smtp.163.com'}
    pop3_url = {
    
    '163': 'pop.163.com'}
    from_addr = "[email protected]"
    password = "xxx"
    to_addr = "[email protected]"
    email_title = ''
    sender_name = ''
    sender_email = ''
    msg=''
    count = 0
    nowcount = 0
    
    email_received = Email_Received(from_addr, password,pop3_url['163'])
    email_received.conect_pop()
    count = email_received.get_length()
    email_received.close()
    while True:
        email_received = Email_Received(from_addr, password, pop3_url['163'])
        email_received.conect_pop()
        email_title,sender_name,sender_email,nowcount = email_received.get_email()
        sleep(2)
        print('nowcount={0},count={1}'.format(nowcount,count))
        if  nowcount > count:
            if "(你发送文件用的用户名)" in sender_email:
                if email_title=='1':
                    open_camera(path)
                    email_send = Email_Send(from_addr, to_addr, password,smtp_url['163'])
                    email_send.start_stmp()
                    email_send.sendmessage('Mao','电脑拍摄','请接受你的图片')
                    email_send.stop_stmp()
                    count = nowcount
                    print("发送成功")
                # 语音警报
                if "2:" in email_title:
                    baidu.hecheng_audio(email_title[2:])
                    count = nowcount
                if "3:" in email_title:
                    counts = int(email_title[2:])
                    # open the haarcascade
                    for i in range(counts):
                        flag, faces_counts = find_face(path)
                        if flag == 1:
                            email_send = Email_Send(from_addr, to_addr, password,smtp_url['163'])
                            email_send.start_stmp()
                            email_send.sendmessage('Mao','人脸检测',"一共检测到{0}个人再看你的电脑".format(faces_counts))
                            email_send.stop_stmp()
                            count = nowcount
                            print("发送成功")
        email_received.close()

如要转载请说明出处:https://blog.csdn.net/xiaokai1999/article/details/105690965

引用:

[1]https://www.jianshu.com/p/ea3c57b6c5e1
[2]https://blog.csdn.net/freesigefei/article/details/51313155

猜你喜欢

转载自blog.csdn.net/xiaokai1999/article/details/105767741