Python3遠程監(jiān)控程序的實現(xiàn)方法
簡述
一開始覺得這個很有趣,然后就想來做一個來玩一下
使用語言: Python3
使用工具:opencv視頻監(jiān)控 + socket數(shù)據(jù)傳輸技術(shù)
程序檢驗: 這里我考慮了一下,發(fā)現(xiàn)還是沒有必要實現(xiàn)封裝成可執(zhí)行文件。還是直接就放代碼吧。(先放代碼,以后再做解釋)
本程序,經(jīng)過本人修改,保證可以使用
使用要求:
Sender代碼必須要在一臺有攝像頭的電腦上運行起來。然后把數(shù)據(jù)編碼,壓縮之后,再傳給另外一個電腦
Reciever作為接受端,沒什么特別的要求。
兩個電腦都必須要按轉(zhuǎn)好numpy + opencv (安裝方法的話,在我的opencv文集中有一篇就是寫這個的)
對了,我的接受端關(guān)閉操作是(輸入鍵盤中的 Esc)這樣就可以退出監(jiān)控。
發(fā)送端是關(guān)閉不了這個監(jiān)控的
至于這個IP地址的設(shè)置:我寫的都是接受端的地址。端口隨便設(shè)置的
局限性:
本程序目前只能在局域網(wǎng)內(nèi)進行實時監(jiān)控。
改進思路:
如果想擴展成一個廣域網(wǎng)上的。(就可以用一個廣域網(wǎng)上的服務(wù)器做中轉(zhuǎn)站)
而且,上述的方法,如果能找到一臺肉雞,還可以避免探測到對應(yīng)的監(jiān)控對象的ip地址
代碼
Sender(發(fā)送端代碼)
import socket
import struct
import time
import cv2
import numpy
class Config(object):
def __init__(self):
self.TargetIP = ('192.168.199.121', 6666)
self.resolution = (640, 480) # 分辨率
self.img_fps = 15 # each second send pictures
self.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 data
try:
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()
return
if __name__ == '__main__':
config = Config()
config.RT_Image()
Reciever 接受端代碼:
import socket
import cv2
import struct
import numpy
import threading
class Camera_Connect_Object(object):
def __init__(self, TargetIP=('', 6666)):
self.TargetIP = TargetIP
self.resolution = (640, 480)
self.src = 888 + 15
self.interval = 0
self.img_fps = 15
self.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 seconds
tempdata = self.client.recv(8)
if len(tempdata) == 0:
print("+1")
continue
info = struct.unpack('lhh', tempdata)
buf_size = int(info[0])
if buf_size:
try:
self.buf = b""
self.temp_buf = self.buf
while buf_size:
self.temp_buf = self.client.recv(buf_size)
buf_size -= len(self.temp_buf)
self.buf += self.temp_buf
data = 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)
pass
finally:
if cv2.waitKey(10) == 27:
self.client.close()
cv2.destroyAllWindows()
break
def Get_data(self):
showThread = threading.Thread(target=self.RT_Image)
showThread.start()
showThread.join()
if __name__ == '__main__':
camera = Camera_Connect_Object()
camera.Get_data()
以上這篇Python3遠程監(jiān)控程序的實現(xiàn)方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
- Python遠程視頻監(jiān)控程序的實例代碼
- 用Python的Flask框架結(jié)合MySQL寫一個內(nèi)存監(jiān)控程序
- Python實現(xiàn)監(jiān)控程序執(zhí)行時間并將其寫入日志的方法
- Python寫的服務(wù)監(jiān)控程序?qū)嵗?/a>
- Python監(jiān)控服務(wù)器實用工具psutil使用解析
- python psutil監(jiān)控進程實例
- python實現(xiàn)監(jiān)控阿里云賬戶余額功能
- 使用 Supervisor 監(jiān)控 Python3 進程方式
- python3.8 微信發(fā)送服務(wù)器監(jiān)控報警消息代碼實現(xiàn)
- 基于python3監(jiān)控服務(wù)器狀態(tài)進行郵件報警
- 基于python監(jiān)控程序是否關(guān)閉
相關(guān)文章
python3用PIL把圖片轉(zhuǎn)換為RGB圖片的實例
今天小編就為大家分享一篇python3用PIL把圖片轉(zhuǎn)換為RGB圖片的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07
python使用socket 先讀取長度,在讀取報文內(nèi)容示例
這篇文章主要介紹了python使用socket 先讀取長度,在讀取報文內(nèi)容,涉及Python socket通信報文操作相關(guān)使用技巧,需要的朋友可以參考下2019-09-09
Python Json數(shù)據(jù)文件操作原理解析
這篇文章主要介紹了Python Json數(shù)據(jù)文件操作原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-05-05
python使用正則表達式分析網(wǎng)頁中的圖片并進行替換的方法
這篇文章主要介紹了python使用正則表達式分析網(wǎng)頁中的圖片并進行替換的方法,涉及Python使用正則表達式的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03
Python?threading中l(wèi)ock的使用詳解
Lock類是threading中用于鎖定當(dāng)前線程的鎖定類,本文給大家介紹了Python?threading中l(wèi)ock的使用,需要的朋友可以參考下2022-11-11
詳解python讀取matlab數(shù)據(jù)(.mat文件)
本文主要介紹了python讀取matlab數(shù)據(jù),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12

