欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python3遠(yuǎn)程監(jiān)控程序的實現(xiàn)方法

 更新時間:2019年07月15日 17:33:27   作者:肥宅_Sean  
今天小編就為大家分享一篇Python3遠(yuǎn)程監(jiān)控程序的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

簡述

一開始覺得這個很有趣,然后就想來做一個來玩一下

使用語言: Python3

使用工具:opencv視頻監(jiān)控 + socket數(shù)據(jù)傳輸技術(shù)

程序檢驗: 這里我考慮了一下,發(fā)現(xiàn)還是沒有必要實現(xiàn)封裝成可執(zhí)行文件。還是直接就放代碼吧。(先放代碼,以后再做解釋)

本程序,經(jīng)過本人修改,保證可以使用

使用要求:

Sender代碼必須要在一臺有攝像頭的電腦上運(yùn)行起來。然后把數(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)進(jìn)行實時監(jiān)控。

改進(jìn)思路:

如果想擴(kuò)展成一個廣域網(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遠(yuǎn)程監(jiān)控程序的實現(xiàn)方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論