日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python3遠程監控程序的實現方法

系統 1940 0

簡述

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

使用語言: Python3

使用工具:opencv視頻監控 + socket數據傳輸技術

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

本程序,經過本人修改,保證可以使用

使用要求:

Sender代碼必須要在一臺有攝像頭的電腦上運行起來。然后把數據編碼,壓縮之后,再傳給另外一個電腦

Reciever作為接受端,沒什么特別的要求。

兩個電腦都必須要按轉好numpy + opencv (安裝方法的話,在我的opencv文集中有一篇就是寫這個的)

對了,我的接受端關閉操作是(輸入鍵盤中的 Esc)這樣就可以退出監控。

發送端是關閉不了這個監控的

至于這個IP地址的設置:我寫的都是接受端的地址。端口隨便設置的

局限性:

本程序目前只能在局域網內進行實時監控。

改進思路:

如果想擴展成一個廣域網上的。(就可以用一個廣域網上的服務器做中轉站)

而且,上述的方法,如果能找到一臺肉雞,還可以避免探測到對應的監控對象的ip地址

代碼

Sender(發送端代碼)

            
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遠程監控程序的實現方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日照市| 海南省| 凤翔县| 建始县| 浑源县| 涞源县| 冀州市| 甘孜| 墨竹工卡县| 许昌市| 江西省| 卓资县| 长白| 长泰县| 新源县| 庐江县| 运城市| 莱西市| 玛多县| 南陵县| 遂溪县| 朝阳区| 江源县| 醴陵市| 会东县| 本溪| 根河市| 嘉善县| 岳西县| 喀喇沁旗| 松阳县| 玉山县| 盱眙县| 洪泽县| 罗平县| 巴南区| 湖口县| 北票市| 榆林市| 许昌市| 博湖县|