Python3远程监控程序实现
生活随笔
收集整理的這篇文章主要介紹了
Python3远程监控程序实现
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
簡述
一開始覺得這個(gè)很有趣,然后就想來做一個(gè)來玩一下
- 使用語言: Python3
- 使用工具:opencv視頻監(jiān)控 + socket數(shù)據(jù)傳輸技術(shù)
程序檢驗(yàn): 這里我考慮了一下,發(fā)現(xiàn)還是沒有必要實(shí)現(xiàn)封裝成可執(zhí)行文件。還是直接就放代碼吧。(先放代碼,以后再做解釋)
本程序,經(jīng)過本人修改,保證可以使用
使用要求:
- Sender代碼必須要在一臺有攝像頭的電腦上運(yùn)行起來。然后把數(shù)據(jù)編碼,壓縮之后,再傳給另外一個(gè)電腦
- Reciever作為接受端,沒什么特別的要求。
- 兩個(gè)電腦都必須要按轉(zhuǎn)好numpy + opencv (安裝方法的話,在我的opencv文集中有一篇就是寫這個(gè)的)
- 對了,我的接受端關(guān)閉操作是(輸入鍵盤中的 Esc)這樣就可以退出監(jiān)控。
- 發(fā)送端是關(guān)閉不了這個(gè)監(jiān)控的
- 至于這個(gè)IP地址的設(shè)置:我寫的都是接受端的地址。端口隨便設(shè)置的
局限性:
- 本程序目前只能在局域網(wǎng)內(nèi)進(jìn)行實(shí)時(shí)監(jiān)控。
改進(jìn)思路:
- 如果想擴(kuò)展成一個(gè)廣域網(wǎng)上的。(就可以用一個(gè)廣域網(wǎng)上的服務(wù)器做中轉(zhuǎn)站)
- 而且,上述的方法,如果能找到一臺肉雞,還可以避免探測到對應(yīng)的監(jiān)控對象的ip地址
代碼
Sender(發(fā)送端代碼)
import socket import struct import time import cv2 import numpyclass Config(object):def __init__(self):self.TargetIP = ('192.168.199.121', 6666)self.resolution = (640, 480) # 分辨率self.img_fps = 15 # each second send picturesself.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)self.server.connect(self.TargetIP)self.img = ''self.img_data = ''def RT_Image(self):camera = cv2.VideoCapture(0)img_param = [int(cv2.IMWRITE_JPEG_QUALITY), self.img_fps]while True:time.sleep(0.1) # sleep for 0.1 seconds_, self.img = camera.read()self.img = cv2.resize(self.img, self.resolution)_, img_encode = cv2.imencode('.jpg', self.img, img_param)img_code = numpy.array(img_encode)self.img_data = img_code.tostring() # bytes datatry:packet = struct.pack(b'lhh', len(self.img_data), self.resolution[0],self.resolution[1])self.server.send(packet)self.server.send(self.img_data)except Exception as e:print(e.args)camera.release()returnif __name__ == '__main__':config = Config()config.RT_Image()Reciever 接受端代碼:
import socket import cv2 import struct import numpy import threadingclass Camera_Connect_Object(object):def __init__(self, TargetIP=('', 6666)):self.TargetIP = TargetIPself.resolution = (640, 480)self.src = 888 + 15self.interval = 0self.img_fps = 15self.Server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)self.Server.bind(self.TargetIP)self.Server.listen(5)def RT_Image(self):self.client, self.addr = self.Server.accept()self.name = self.addr[0] + " Camera"print(self.name)while True:# time.sleep(0.3) # sleep for 0.3 secondstempdata = self.client.recv(8)if len(tempdata) == 0:print("+1")continueinfo = struct.unpack('lhh', tempdata)buf_size = int(info[0])if buf_size:try:self.buf = b""self.temp_buf = self.bufwhile buf_size:self.temp_buf = self.client.recv(buf_size)buf_size -= len(self.temp_buf)self.buf += self.temp_bufdata = numpy.fromstring(self.buf, dtype='uint8')self.image = cv2.imdecode(data, 1)cv2.imshow(self.name, self.image)except Exception as e:print(e.args)passfinally:if cv2.waitKey(10) == 27:self.client.close()cv2.destroyAllWindows()breakdef Get_data(self):showThread = threading.Thread(target=self.RT_Image)showThread.start()showThread.join()if __name__ == '__main__':camera = Camera_Connect_Object()camera.Get_data()總結(jié)
以上是生活随笔為你收集整理的Python3远程监控程序实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python传输图片(同一局域网下版本)
- 下一篇: opencv-contrib-pytho