为什么会有写这个程序的想法呢?
最初的想法是写一个可以用电脑前置摄像头拍照的程序,在舍友使用你电脑的时候,不经意间获取到一大堆奇葩舍友的表情包。
然后我又突发奇想,要不搞个开机启动吧,这样我就可以看到是谁开启了我的电脑啦。
然后,突(nao)发(dong)奇(da)想(kai)的我又想到万一我电脑不在身边怎么办?要不再加个邮件发送机制吧,开机拍到照片再邮件发送给我?哈哈
02 工具
03 思路
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'
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)
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。
def isLink():
return os.system('ping -c 4 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分析《都挺好》中的人物关系
用Pandas库实现MySQL数据库的读写
推荐Python中文社区旗下的几个服务类公众号
▼ 点击成为
社区注册会员
「在看」
一下,一起PY!
Outlook Express
Microsoft Outlook 2000 (POP3 and SMTP Accounts only)
Microsoft Outlook 2002/2003/2007/2010 (POP3, IMAP, HTTP and SMTP Accounts)
Windows Mail
Windows Live Mail
IncrediMail
Eudora
Netscape 6.x/7.x (If the password is not encrypted with master password)
Mozilla Thunderbird (If the password is not encrypted with master password)
Group Mail Free
Yahoo! Mail - If the password is saved in Yahoo! Messenger application.
Hotmail/MSN mail - If the password is saved in MSN/Windows/Live Messenger application.
Gmail - If the password is saved by Gmail Notifier application, Google Desktop, or by Google Talk.
在工作生活中,我们常常接收
邮件
✉,但是自己喜欢的ID往往已被注册,这时我们可以换另一家
邮件
服务提供商注册;下面一起来看看国内外
邮箱
、
邮件
服务大全(如有未收录的可评论反馈),赶快注册自己心仪的ID吧。
邮箱
用途
商务来往
邮件
、工作内部
邮件
正式的申请、接收通知、注册账号、绑定安全
邮箱
用于找回密码
与外国人交流、一些服务行业的问题交流反馈(通常在网站底部有反馈
邮箱
)
不便在即时聊天软件回复的问题(太多人问同一问题或者索取某样东西,可以用
邮箱
自动回复功能)、不便在聊天软件交流的问题(某些关键词会被监控、和谐等
您好!下面是使用
Python
控制
摄像头
并将拍摄的图片存储到数据库的一些指导思路:
1. 使用
Python
的 `cv2` 模块来访问
摄像头
。可以使用以下代码打开
摄像头
:
import cv2
# 打开
摄像头
cap = cv2.VideoCapture(0)
2. 通过循环捕获并显示
摄像头
中的帧。您可以使用以下代码:
while True:
# 从
摄像头
中捕获帧
ret, frame = cap.read()
# 显示帧
cv2.imshow('Camera', frame)
# 按 'q' 键退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放
摄像头
cap.release()
# 销毁窗口
cv2.destroyAllWindows()
3. 将捕获的图像保存到数据库中。您可以使用
Python
的 `sqlite3` 模块来连接并操作 SQLite 数据库。下面是一些示例代码,假设您已经创建了一个名为 `images` 的数据表,其中包含了一个名为 `image` 的 `BLOB` 类型的列,用于保存图像数据:
import sqlite3
import cv2
import numpy as np
# 连接到 SQLite 数据库
conn = sqlite3.connect('database.db')
# 获取一个游标
cursor = conn.cursor()
# 打开
摄像头
cap = cv2.VideoCapture(0)
while True:
# 从
摄像头
中捕获帧
ret, frame = cap.read()
# 将帧转换