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常规方法实现数组的全排列
Mar 17 Python
python开发之IDEL(Python GUI)的使用方法图文详解
Nov 12 Python
用Python写一段用户登录的程序代码
Apr 22 Python
python中的文件打开与关闭操作命令介绍
Apr 26 Python
解决python3 pika之连接断开的问题
Dec 18 Python
Django+JS 实现点击头像即可更改头像的方法示例
Dec 26 Python
Python读取stdin方法实例
May 24 Python
python+opencv实现摄像头调用的方法
Jun 22 Python
Python tkinter实现简单加法计算器代码实例
May 13 Python
python安装及变量名介绍详解
Dec 12 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
Feb 20 Python
python获取带有返回值的多线程
May 02 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
PHP5 安装方法
2007/01/15 PHP
php遍历文件夹所有文件子文件夹函数代码
2013/11/27 PHP
php include类文件超时问题处理
2015/02/06 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
2017/03/19 PHP
js中如何复制一个对象并获取其所有属性和属性对应的值
2013/10/24 Javascript
jquery实现图片翻页效果
2013/12/23 Javascript
jquery转盘抽奖功能实现
2015/11/13 Javascript
原生js实现商品放大镜效果
2017/01/12 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
2017/06/22 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
2017/09/13 Javascript
基于vue2实现上拉加载功能
2017/11/28 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
2019/01/19 Javascript
利用原生JavaScript实现造日历轮子实例代码
2019/05/08 Javascript
JavaScript实现省份城市的三级联动
2020/02/11 Javascript
解决vue刷新页面以后丢失store的数据问题
2020/08/11 Javascript
[03:30]完美盛典趣味短片 CSGO2019年度名场面
2019/12/07 DOTA
python复制文件的方法实例详解
2015/05/22 Python
python检查指定文件是否存在的方法
2015/07/06 Python
python 截取 取出一部分的字符串方法
2017/03/01 Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
2017/09/05 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
2018/02/18 Python
PyQt5每天必学之弹出消息框
2018/04/19 Python
详解Python装饰器
2019/03/25 Python
python 利用turtle库绘制笑脸和哭脸的例子
2019/11/23 Python
解决Python列表字符不区分大小写的问题
2019/12/19 Python
pandas.DataFrame.drop_duplicates 用法介绍
2020/07/06 Python
python 实现百度网盘非会员上传超过500个文件的方法
2021/01/07 Python
如何用css3实现switch组件开关的方法
2018/02/09 HTML / CSS
重新定义牛仔布,100美元以下:Warp + Weft
2018/07/25 全球购物
法警的竞聘演讲稿
2014/01/02 职场文书
大学生关于奋斗的演讲稿
2014/01/09 职场文书
会计人员岗位职责
2015/02/03 职场文书
员工开除通知书
2015/04/25 职场文书
idea搭建可运行Servlet的Web项目
2021/06/26 Java/Android
SQL优化老出错,那是你没弄明白MySQL解释计划用法
2021/11/27 MySQL