功能说明
- 每隔一定时间使用摄像头拍摄照片
- 将拍摄的照片保存至本地
- 通过电子邮件,将照片发送至QQ邮箱
实现思路
- 拍摄照片:使用opencv拍摄
- 发送电子邮件:使用SMTP,QQ邮箱需要开启SMTP功能,如下图(请自行百度)
- 将图片嵌入html中,作为邮件内容发送
- 获取系统时间进行判断,到达预设时间后执行拍摄以及发送函数
示例代码
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.header import Header
import cv2
def get_picture(cur_tiem):
cap = cv2.VideoCapture(0)
ret, frame = cap.read()
filename = './pic/' + cur_tiem + '.jpg'
cv2.imwrite(filename, frame)
cap.release()
return frame
def send_mail(cur_tiem):
sender = '180*****1@qq.com'
receiver = '180*****1@qq.com'
subject = 'Picture by the dormitory camera'
smtpserver = 'smtp.qq.com'
username = '180*****1@qq.com'
password = "rkru********ifb"
msgRoot = MIMEMultipart('related')
msgRoot['From'] = Header('your name')
msgRoot['To'] = Header('your name')
msgRoot['Subject'] = 'Picture by the dormitory camera' + cur_tiem
msgText = MIMEText('<b> Images taken with <i>dormitory camera</i> </b>. and this is the image.<br><img src="cid:image1"><br>ok!', 'html', 'utf-8')
msgRoot.attach(msgText)
filename = './pic/' + cur_tiem + '.jpg'
fp = open(filename, 'rb')
msgImage = MIMEImage(fp.read())
fp.close()
msgImage.add_header('Content-ID', '<image1>')
msgRoot.attach(msgImage)
smtp = smtplib.SMTP()
smtp.connect('smtp.qq.com')
smtp.login(username, password)
smtp.sendmail(sender, receiver, msgRoot.as_string())
smtp.quit()
if __name__ == '__main__':
import datetime
import time as tm
print("======开始程序======")
while True:
cur_tiem = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
time = cur_tiem.split()
date_hms = time[1].split(":")
hour = date_hms[0]
mintue = date_hms[1]
second = date_hms[2]
if second == '00' and int(mintue) % 10 == 0:
try:
print("Time is" + str(time[1]) + 'try to send email')
get_picture(cur_tiem)
send_mail(cur_tiem)
except:
break
else:
tm.sleep(1)
代码说明
- 设定每隔10分钟拍摄照片
- 照片保存至
./pic/
文件夹下,文件名为拍摄时间,例如2021-05-15 11:40:00.jpg
扩展