您的位置:首页 > 脚本大全 > > 正文

python 摄像头运用(使用Python控制摄像头拍照并发邮件)

更多 时间:2021-10-16 00:39:34 类别:脚本大全 浏览量:607

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 我们只需要部分功能,所以选择性导入

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 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服务器,登录邮箱账号及密码,收件人,脚本路径等设置为全局变量。方便以后程序移植与修改。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 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 实现拍照
  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • def getpicture():
  •  cap = cv2.videocapture(0)
  •  ret, frame = cap.read()
  •  cv2.imwrite(path+'/person.jpg', frame)
  •  # 关闭摄像头
  •  cap.release()
  • 07 构造邮件内容
  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 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 实现邮件发送
  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • def sendemail(msg):
  •  # 发送邮件
  •  smtp = smtplib.smtp()
  •  smtp.connect('smtp.163.com')
  •  smtp.login(username, password)
  •  smtp.sendmail(sender, addressee, msg)
  •  smtp.quit()
  • 09 判断网络联通状态

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

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • # 判断网络是否联通,成功返回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 主函数逻辑

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

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

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 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

    脚本内容为

  • ?
  • 1
  • 2
  • 3
  • 4
  • #切换到我们获取照片和发送邮件的工作目录
  • cd /home/projects/sendemail
  • #执行发送邮件的脚本
  • python2 sendemile.py
  • 然后 在/etc/rc.local最后添加一行

    ./home/projects/sendemail/autostart.sh

    大功告成。

    10 重启系统

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

    总结

    以上所述是小编给大家介绍的使用python控制摄像头拍照并发邮件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对开心学习网网站的支持!

    如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

    原文链接:https://blog.csdn.net/qq_42156420/article/details/89334231

    您可能感兴趣