Python3远程监控程序的实现方法


Posted in Python onJuly 15, 2019

简述

一开始觉得这个很有趣,然后就想来做一个来玩一下

使用语言: 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远程监控程序的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python list转dict示例分享
Jan 28 Python
浅析python 内置字符串处理函数的使用方法
Jun 11 Python
浅析使用Python操作文件
Jul 31 Python
python中requests库session对象的妙用详解
Oct 30 Python
Python实现的tcp端口检测操作示例
Jul 24 Python
布隆过滤器的概述及Python实现方法
Dec 08 Python
Pytorch提取模型特征向量保存至csv的例子
Jan 03 Python
Python 实现打印单词的菱形字符图案
Apr 12 Python
Python类及获取对象属性方法解析
Jun 15 Python
Pandas中DataFrame基本函数整理(小结)
Jul 20 Python
Python pandas对excel的操作实现示例
Jul 21 Python
Python hashlib和hmac模块使用方法解析
Dec 08 Python
python监控进程状态,记录重启时间及进程号的实例
Jul 15 #Python
Python 获取windows桌面路径的5种方法小结
Jul 15 #Python
Python识别快递条形码及Tesseract-OCR使用详解
Jul 15 #Python
Python实现Mysql数据统计及numpy统计函数
Jul 15 #Python
通过python改变图片特定区域的颜色详解
Jul 15 #Python
用Python+OpenCV对比图像质量的几种方法
Jul 15 #Python
python3实现斐波那契数列(4种方法)
Jul 15 #Python
You might like
php&java(三)
2006/10/09 PHP
How do I change MySQL timezone?
2008/03/26 PHP
PHP面向对象法则
2012/02/23 PHP
php使用文本统计访问量的方法
2016/05/12 PHP
PHP实现上传图片到 zimg 服务器
2016/10/19 PHP
用方法封装javascript的new操作符(一)
2010/12/25 Javascript
基于jquery DOM写的类似微博发布的效果
2012/10/20 Javascript
JavaScript 验证码的实例代码(附效果图)
2013/03/22 Javascript
简单实例处理url特殊符号&处理(2种方法)
2013/04/02 Javascript
js,jquery滚动/跳转页面到指定位置的实现思路
2014/06/03 Javascript
jquery实现文字单行横移或翻转(上下、左右跳转)
2017/01/08 Javascript
vuejs指令详解
2017/02/07 Javascript
Vue.js中组件中的slot实例详解
2017/07/17 Javascript
angularJs-$http实现百度搜索时的动态下拉框示例
2018/02/27 Javascript
node.js通过axios实现网络请求的方法
2018/03/05 Javascript
Node.js中package.json中库的版本号(~和^)
2019/04/02 Javascript
JS实现从对象获取对象中单个键值的方法示例
2019/06/05 Javascript
js Array.slice的8种不同用法示例
2019/07/10 Javascript
JS中的算法与数据结构之集合(Set)实例详解
2019/08/20 Javascript
JS内置对象和Math对象知识点详解
2020/04/03 Javascript
python转换摩斯密码示例
2014/02/16 Python
python对常见数据类型的遍历解析
2019/08/27 Python
python同时替换多个字符串方法示例
2019/09/17 Python
Python基础教程之输入输出和运算符
2020/07/26 Python
最新PyCharm 2020.2.3永久激活码(亲测有效)
2020/11/26 Python
python 爬虫爬取京东ps4售卖情况
2020/12/18 Python
美国百年历史早餐食品供应商:Wolferman’s
2017/01/18 全球购物
大学优秀班主任事迹材料
2014/05/02 职场文书
交通局领导班子群众路线教育实践活动对照检查材料思想汇报
2014/10/09 职场文书
中学生社会实践教育活动总结
2015/05/06 职场文书
综治目标管理责任书
2015/05/11 职场文书
家庭聚会祝酒词
2015/08/11 职场文书
2016年学校招生广告语
2016/01/28 职场文书
浅谈Redis在直播场景的实践方案
2021/04/27 Redis
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript
Windows11插耳机没反应怎么办? win11耳机没声音的多种解决办法
2021/11/21 数码科技