扣丁学堂浅谈如何使用Python控制摄

发布时间:2019-09-28 08:38:23编辑:auto阅读(2072)

    今天扣丁学堂Python培训老师给大家分享一篇关于使用Python控制摄像头拍照并发邮件的详细介绍,首先为什么会有写这个程序的想法呢下面我们一起来看一下吧。

    最初的想法是写一个可以用电脑前置摄像头拍照的程序,在舍友使用你电脑的时候,不经意间获取到一大堆奇葩舍友的表情包。

    然后我又突发奇想,要不搞个开机启动吧,这样我就可以看到是谁开启了我的电脑啦。

    然后,突(nao)发(dong)奇(da)想(kai)的我又想到万一我电脑不在身边怎么办要不再加个邮件发送机制吧,开机拍到照片再邮件发送给我哈哈

    02工具

    deepin15.9

    好看好用的国产linux系统

    python2.7或者3.6

    解释器,哪个版本都可以,我选择3.6

    smtplib

    用来发送邮件

    email

    用来构造邮件内容的库

    opencv

    用来调取摄像头拍摄照片

    time

    获取开机以及拍照的时间

    os

    判断网络连接

    获取脚本路径

    sys

    判断网络是否联通

    03思路

    1.用opencv库调用摄像头拍照保存为文件。

    2.检查网络是否连接,未连接则图片保存到本地。

    3.用email库构造邮件内容,把保存的照片以附件的形式插入到邮件内容中。

    4.用smtplib库发送邮件给指定邮件接收者。

    5.实现脚本开机自启动。

    04安装及导入所使用的包

    首先当然是安装opencv啦。

    其他的email、smtplib、sys、os、time为python默认安装的包,我们只需要导入即可。

    如果是python3.6安装opencv就在终端输入:

    pip3 install opencv-python

    如果是python2.7安装opencv,就在终端输入:

    pip install opencv-python

    安装完成后,我们导入必要的包。

    各个包的作用在前文已经讲过,不再多言。

    email我们只需要部分功能,所以选择性导入

    import cv2

    import smtplib

    import sys

    import os

    import time

    from email.mime.image import MIMEImage

    from email.mime.multipart import MIMEMultipart

    from email.mime.text import MIMEText

    05设置参数

    将smtp服务器,登录邮箱账号及密码,收件人,脚本路径等设置为全局变量。方便以后程序移植与修改。

    smtpserver = 'smtp.163.com' # smtp服务器

    username = '888888888@163.com' # 发件邮箱账号

    password = '888888888' # 邮箱登录密码

    sender = '888888888@163.com' # 发件人

    addressee = '999999999@qq.com' # 收件人

    exit_count = 5 # 尝试联网次数

    path = os.getcwd() #获取图片保存路径

    注:很多邮箱为了安全起见,不会使用真实的登录密码,而是要使用授权码,在QQ邮箱的设置里面可以找到生成授权码选项。

    06实现拍照

    def getPicture():

    cap = cv2.VideoCapture(0)

    ret, frame = cap.read()

    cv2.imwrite(path+'/person.jpg', frame)

    关闭摄像头

    cap.release()

    07构造邮件内容

    def setMsg():

    下面依次为邮件类型,主题,发件人和收件人。

    msg = MIMEMultipart('mixed')

    msg['Subject'] = '电脑已经启动'

    msg['From'] = '88888888888@163.com <88888888888@163.com>'

    msg['To'] = addressee

    下面为邮件的正文

    text = "主人,你的电脑已经开机!

    照片如下!"

    text_plain = MIMEText(text, 'plain', 'utf-8')

    msg.attach(text_plain)

    构造图片链接

    sendimagefile = open(path+'/person.jpg', 'rb').read()

    image = MIMEImage(sendimagefile)

    下面一句将收件人看到的附件照片名称改为people.png。

    image["Content-Disposition"] = 'attachment; filename="people.png"'

    msg.attach(image)

    return msg.as_string()

    08实现邮件发送

    def sendEmail(msg):

    发送邮件

    smtp = smtplib.SMTP()

    smtp.connect('smtp.163.com')

    smtp.login(username, password)

    smtp.sendmail(sender, addressee, msg)

    smtp.quit()

    09判断网络联通状态

    判断网络联通状态的方法很多,我采用很简单很直接的ping。

    判断网络是否联通,成功返回0,不成功返回1

    linux中ping命令不会自动停止,需要加入参数 -c 4,表示在发送指定数目的包后停止。

    def isLink():

    return os.system('ping -c 4 www.baidu.com')

    return os.system('ping www.baidu.com')

    10主函数逻辑

    如果网络连接正常,则拍照发邮件。

    如果网络未连接,等待十秒钟再次测试,如果等待次数超过设置的最大次数,程序退出。

    def main():

    reconnect_times = 0

    while isLink():

    time.sleep(10)

    reconnect_times += 1

    if reconnect_times == exit_count:

    sys.exit()

    getPicture()

    msg = setMsg()

    sendEmail(msg)

    11实现开机自启动

    首先要写一个开机自启脚本,文件名为:autoStart.sh

    脚本内容为

    切换到我们获取照片和发送邮件的工作目录

    cd /home/projects/sendemail

    执行发送邮件的脚本

    python2 sendEmile.py

    然后在/etc/rc.local最后添加一行

    ./home/projects/sendemail/autoStart.sh

    大功告成。

    10重启系统

    代码都写好了,重启系统就可以收到邮件啦。

    以上就是关于扣丁学堂浅谈如何使用Python控制摄像头拍照并发邮件的详细介绍,最后想要了解更多关于Python和人工智能方面内容的小伙伴,请关注扣丁学堂Python培训官网、微信等平台,扣丁学堂IT职业在线学习教育平台为您提供权威的Python开发环境搭建视频,Python培训后的前景无限,行业薪资和未来的发展会越来越好的,扣丁学堂老师精心推出的Python视频教程定能让你快速掌握Python从入门到精通开发实战技能。

关键字