使用Python控制摄像头拍照并发邮件

 更新时间:2019年04月23日 11:21:52   作者:一起学Python呀  
这篇文章主要介绍了使用Python控制摄像头拍照并发邮件的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

o1 前言

为什么会有写这个程序的想法呢?

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

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

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

02 工具

•deepin 15.9
•好看好用的国产linux系统
•python 2.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 Flask入门

    Python Flask入门

    今天小编就为大家分享一篇Python Flask的入门教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-11-11
  • python爬取豆瓣评论制作词云代码

    python爬取豆瓣评论制作词云代码

    大家好,本篇文章主要讲的是python爬取豆瓣评论制作词云代码,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2022-01-01
  • python爬虫之利用Selenium+Requests爬取拉勾网

    python爬虫之利用Selenium+Requests爬取拉勾网

    这篇文章主要介绍了python爬虫之利用Selenium+Requests爬取拉勾网,文中有非常详细的代码示例,对正在学习python爬虫的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-04-04
  • 基于PyQt5实现状态栏(statusBar)显示和隐藏功能

    基于PyQt5实现状态栏(statusBar)显示和隐藏功能

    这篇文章主要为大家详细介绍了如何利用PyQt5实现状态栏显示和隐藏功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-08-08
  • Flask  response 对象详情

    Flask  response 对象详情

    在 Flask 中,响应使用 Response 对象表示,响应报文中的大部分内容由服务器处理,一般情况下,我们只负责返回主体内容即可。在之前的文章中,我们了解到 Flask 会先匹配请求 url 的路由,调用对应的视图函数,视图函数的返回值构成了响应报文的主体内容。
    2021-11-11
  • 浅谈python内置变量-reversed(seq)

    浅谈python内置变量-reversed(seq)

    下面小编就为大家带来一篇浅谈python内置变量-reversed(seq)。小编觉得挺不错的。现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • python 判断linux进程,并杀死进程的实现方法

    python 判断linux进程,并杀死进程的实现方法

    今天小编就为大家分享一篇python 判断linux进程,并杀死进程的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • python3.0 字典key排序

    python3.0 字典key排序

    字典对象其实就是键-值对 下面是字典对象的添加,修改,删除 (修改与添加方法相同,当key值不存在的时候添加)
    2008-12-12
  • python2.7无法使用pip的解决方法(安装easy_install)

    python2.7无法使用pip的解决方法(安装easy_install)

    下面小编就为大家分享一篇python2.7无法使用pip的解决方法(安装easy_install),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • 利用PyQt5+Matplotlib 绘制静态/动态图的实现代码

    利用PyQt5+Matplotlib 绘制静态/动态图的实现代码

    这篇文章主要介绍了利用PyQt5+Matplotlib 绘制静态/动态图的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07

最新评论