项目地址:

https://github.com/flygaga/camera

思路

1、通过opencv调用摄像头拍照保存图像到本地

2、用email库构造邮件内容,保存图片以附件形式插入邮件内容

3、用smtplib库发送邮件到指定邮箱

4、生成 .exe 文件

5、设置开机自启(每次开机自动运行,启动相机,拍下照片发送到指定邮箱)

导入工具

import cv2 # pip install opencv-python -i {指定镜像源} 控制摄像头

from email.mime.image imort MIMEImage #用来构造邮件内容的库

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

import smtplib #发送邮件

编译环境

系统:Windows10

软件:Miniconda3-latest-Windows-x86_64

模块:opencv-python smtplib numpy email pyinstaller

生成exe文件

pyinstaller -F -w path/camera.py

设置开机自启

1.右击exe 创建快捷方式

2.win+r 输入以下命令 shell:startup 点击确定打开一个文件夹

3.将生成的快捷文件复制到打开的文件中,下次开机exe程序就会自动启动

python代码实现调用摄像头,并拍照发送邮件

主要代码

camera.py

import cv2
from email.mime.image import MIMEImage
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
# import smtplib #发送邮件
import smtplib
from smtplib import SMTP
import time

host = 'smtp.qq.com' #邮箱的接口
port = '25' #端口
pwd = 'neelrhh88******ch' #授权码
sender = '邮箱地址' #发送方
receiver = "邮箱地址" #接收方

path = r'./' #图像保存路径
images = time.strftime("%Y-%m-%d-%H_%M_%S",time.localtime())

def GetPicture():
    """
    拍照保存图像
    """
    #创建一个窗口camera
    cv2.namedWindow('camera',1) #'1' 表示窗口不能随意拖动
    #调用摄像头
    cap = cv2.VideoCapture(0)
    ret,frame = cap.read() #读取摄像头内容
    cv2.imwrite(path+images+".jpg",frame)  #保存到磁盘


    #释放摄像头
    cap.release()
    #关闭窗口
    cv2.destroyWindow("camera")

def SetMsg():
    '''
    设置邮件格式
    :return:
    '''
    msg = MIMEMultipart('mixed')
    #标题
    msg['Subject'] = '电脑已开机'
    msg['From'] = sender
    msg['To'] = receiver
    #邮件正文内容
    text = '电脑已开机,请查收图片确认是否为本人'
    text_plain = MIMEText(text,'plain','utf-8') #正文转码
    msg.attach(text_plain)

    #图片
    SendImageFile = open(path+images+'.jpg','rb').read()
    image = MIMEImage(SendImageFile)
    image['Content-Disposition'] = 'attachment;filename="people.jpg"'
    msg.attach(image)
    return msg.as_string()

def SendEmail(msg):
    '''
    发送邮件
    :msg :邮件内容
    :return
    '''
    try:
        smtp = smtplib.SMTP_SSL(host,port) #创建一个邮件服务
        # smtp.connect(host)
        smtp.login(sender,pwd)
        smtp.sendmail(sender,receiver,msg)
        time.sleep(3)
        smtp.quit() #退出邮件服务
    except smtplib.SMTPException as e:
        print("e")
#实现开机自启动
#打包实现启动  例:exe 

if __name__ == '__main__':
    # 1.拍照保存
    GetPicture()
    # 2. 设置邮件格式
    msg = SetMsg()
    # 3. 发送邮件
    SendEmail(msg)

以上就是python实现调用摄像头并拍照发邮箱的详细内容,更多关于python 调用摄像头的资料请关注程序员的世界其它相关文章!

python实现调用摄像头并拍照发邮箱的更多相关文章

  1. python 机器学习的标准化、归一化、正则化、离散化和白化

    机器学习的本质是从数据集中发现数据内在的特征,而数据的内在特征往往被样本的规格、分布范围等外在特征所掩盖。数据预处理正是为了最大限度地帮助机器学习模型或算法找到数据内在特征所做的一系列操作,这些操作主要包括标准化、归一化、正则化、离散化和白化等。1 标准化 假......

  2. Pandas 连接合并函数merge()详解

    一、merge函数用途pandas中的merge()函数类似于SQL中join的用法,可以将不同数据集依照某些字段(属性)进行合并操作,得到一个新的数据集。二、merge()函数的具体参数用法:DataFrame1.merge(DataFrame2, how=‘inner', on=None, le......

  3. python常用模块的常用方法介绍 os、math、random、time、datetime、国内常见镜像

    导入模块的一些语法from random import randint#2、from 模块名 import 函数名,导入模块里的一个方法或变量 from math import * #3、from 模块名 import * ,导入模块里的'所有'(并不是所有的都能导进来)方法和变量 import d......

  4. Python数据结构-集合

    1.集合"""集合(set):没有重复元素且没有顺序的数据结构定义语法:s = set({}) #空集合s = set({1, 2, 3, 4, 5})增加:add() 往集合添加一条数据update() 合并,支持传入列表、字典、元......

  5. python实现socket简单通信的示例代码

    首先先来简单介绍下socket:(具体更详细介绍的可以在网上找找,都讲得非常详细),这里主要是我自己的一些理解。socket是在应用层与传输层之间的一个抽象层,它的本质是编程接口,通过socket,才能实现TCP/IP协议。它就是一个底层套件,用来处理最底层消息的接受和发送。socket翻译为套接字......

  6. 详解用python实现爬取CSDN热门评论URL并存入redis

    一、配置webdriver下载谷歌浏览器驱动,并配置好import timeimport randomfrom PIL import Imagefrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom ......

  7. 如何查看python关键字

    现在我们就来讲讲关键字吧,准备好开始记笔记了吧,俗话说得好,好记性不如烂笔头,记好了喔,经常听大家提起关于Python中关键词有多少个?实际上Python中关键词目前有31个,想要具体查看以及观察个数的方式非常简单,下面就为大家详细介绍。1、keyword模块进行输出查看Help on module......

  8. python实现ROA算子边缘检测算法

    python实现ROA算子边缘检测算法的具体代码,供大家参考,具体内容如下代码import numpy as npimport cv2 as cvdef ROA(image_path, save_path, threshold):img = cv.imread(image_path)image = ......

  9. Python合并Excel表(多sheet)的实现

    使用xlrd模块和xlwt模块解题思想:xlwt模块是非追加写.xls的模块,所以要借助for循环和列表,来一次性写入,这样就没有追加与非追加的说法。而合并Excel表,把每个Excel表当做行,即行合并,换一种想法,把Excel表中的标签当做列,可进行列合并,即合并不同文件中相同标签组成的不同标签......

  10. python 下载文件的几种方式分享

    1 、一般同步下载示例代码:import requestsimport osdef downlaod(url, file_path):headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68......

随机推荐

  1. js中this指向的问题与联系深入探究

    前言JavaScript 中最大的一个安全问题,也是最令人困惑的一个问题,就是在某些情况下this的值是如何确定的。有js基础的同学面对这个问题基本可以想到:this的指向和函数调用的方式相关。这当然是正确的,然而,这几种方式有什么联系吗?这是我接下来要说明的问题。this从哪里来this 是js的......

  2. 详解用 python-docx 创建浮动图片

    相信大家对python-docx这个常用的操作docx文档的库都不陌生,它支持以内联形状(Inline Shape)的形式插入图片,即图片和文本之间没有重叠,遵循流动版式(flow layout)。但是,截至最新的0.8.10版本,python-docx尚不支持插入浮动图片(floating pic......

  3. Python爬取科目四考试题库的方法实现

    1、环境PyCharmPython 3.6pip安装的依赖包包括:requests 2.25.0、urllib3 1.26.2、docx 0.2.4、python-docx 0.8.10、lxml 4.6.2谷歌浏览器2、目标网站及请求分析驾驶员考试网站 ......

  4. Python函数参数中的*与**运算符

    问题描述在阅读某些代码时,经常会看到函数定义/调用时的参数前带有 * 或者 ** 运算符,比较糊涂,今天来探究记录一番.函数定义时的 * 和 **查阅相关资料得知,在参数前面加上* 号 ,意味着参数个数不止一个,而带一个星号(*)参数的函数传入的参数存储为一个元组(tuple),带两个(*)号则是表......

  5. Java并发编程实战(5)- 线程生命周期

    在这篇文章中,我们来聊一下线程的生命周期。在这篇文章中,我们来聊一下线程的生命周期。目录概述操作系统中的线程生命周期Java中的线程生命周期Java线程状态转换运行状态和阻塞状态之间的转换运行状态和无时限等待状态的切换运行状态和有时限等待状态的切换初始化状态和运行状态的切换运行状态和终止状态的切换手......

  6. 用OpenCV进行年龄和性别检测的实现示例

    本文主要介绍了用OpenCV进行年龄和性别检测的实现示例,分享给大家,具体如下:在本文中,我将带您完成用 Python 进行机器学习的年龄和性别检测的任务。年龄和性别检测属于计算机视觉的范畴,因此我将在Python中使用OpenCV库。在开始使用Python进行年龄和性别检测任务之前,我将首先带您了......

  7. python实现经典排序算法

    以下排序算法最终结果都默认为升序排列,实现简单,没有考虑特殊情况,实现仅表达了算法的基本思想。冒泡排序内层循环中相邻的元素被依次比较,内层循环第一次结束后会将最大的元素移到序列最右边,第二次结束后会将次大的元素移到最大元素的左边,每次内层循环结束都会将一个元素排好序。def bubble_sort(......

  8. 如何不使用 overflow: hidden 实现 overflow: hidden

    一个很有意思的题目。如何不使用 overflow: hidden 实现 overflow: hidden?CSS 中 overflow 定义当一个元素的内容太大而无法适应块级格式化上下文时候该做什么。而 overflow: hidden 则会将超出容器范围内的内容剪裁。控制 overflow: hi......

  9. telnet 命令使用方法大全

    什么是Telnet?对于Telnet的认识,不同的人持有不同的观点,可以把Telnet当成一种通信协议,但是对于入侵者而言,Telnet只是一种远程登录的工具。一旦入侵者与远程主机建立了Telnet连接,入侵者便可以使用目标主机上的软、硬件资源,而入侵者的本地机只相当于一个只有键盘和显示器的终端而已......

  10. java中ExecutorService创建方法总结

    在对线程进行控制时,Executor虽然能够对其进行管理,但是缺少终止的功能,所以我们要用到Executor的进阶方法ExecutorServic来处理。ExecutorServic也是一种接口,相比较Executor功能更加丰富,支持一些前者没有的用法。下面我们就ExecutorService进行......