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 条件判断的缩写方法
Sep 06 Python
python自动安装pip
Apr 24 Python
Python画图学习入门教程
Jul 01 Python
Python 实现12306登录功能实例代码
Feb 09 Python
Python利用递归实现文件的复制方法
Oct 27 Python
基于wxPython的GUI实现输入对话框(2)
Feb 27 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
Aug 26 Python
Python TCPServer 多线程多客户端通信的实现
Dec 31 Python
python实现Pyecharts实现动态地图(Map、Geo)
Mar 25 Python
python文件编写好后如何实践
Jul 07 Python
python实现图片,视频人脸识别(dlib版)
Nov 18 Python
python3中apply函数和lambda函数的使用详解
Feb 28 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
用ADODB来让PHP操作ACCESS数据库的方法
2006/12/31 PHP
php 魔术方法详解
2014/11/11 PHP
Yii的Srbac插件用法详解
2016/07/14 PHP
Jquery Validation插件防止重复提交表单的解决方法
2010/03/05 Javascript
jQuery.extend 函数的详细用法
2012/06/27 Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
2014/01/15 Javascript
jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
2015/09/19 Javascript
跟我学习javascript的隐式强制转换
2015/11/16 Javascript
jQuery实现花式轮播之圣诞节礼物传送效果
2016/12/25 Javascript
详解VUE的状态控制与延时加载刷新
2017/03/27 Javascript
Node.js dgram模块实现UDP通信示例代码
2017/09/26 Javascript
详解ES7 Decorator 入门解析
2019/02/18 Javascript
Vue+Koa2 打包后进行线上部署的教程详解
2019/07/31 Javascript
Python urllib模块urlopen()与urlretrieve()详解
2013/11/01 Python
视觉直观感受若干常用排序算法
2017/04/13 Python
轻松理解Python 中的 descriptor
2017/09/15 Python
matplotlib.pyplot绘图显示控制方法
2019/01/15 Python
windows下安装Python虚拟环境virtualenvwrapper-win
2019/06/14 Python
Python的numpy库下的几个小函数的用法(小结)
2019/07/12 Python
django的ORM操作 删除和编辑实现详解
2019/07/24 Python
详解Python利用configparser对配置文件进行读写操作
2020/11/03 Python
Django搭建项目实战与避坑细节详解
2020/12/06 Python
Python3+Appium安装及Appium模拟微信登录方法详解
2021/02/16 Python
HTML5新特性之语义化标签
2017/10/31 HTML / CSS
墨西哥运动服饰和鞋网上商店:Netshoes墨西哥
2016/07/28 全球购物
台湾网友喜爱的综合型网路购物商城:Yahoo! 奇摩购物中心
2018/03/10 全球购物
既然说Ruby中一切都是对象,那么Ruby中类也是对象吗
2013/01/26 面试题
夜班门卫岗位职责
2013/12/09 职场文书
中学生学雷锋演讲稿
2014/04/26 职场文书
重大事项社会稳定风险评估方案
2014/06/15 职场文书
2014年预备党员学习新党章思想汇报
2014/09/15 职场文书
信访稳定工作汇报
2014/10/27 职场文书
2015年售后服务工作总结
2015/04/25 职场文书
人民调解协议书
2016/03/21 职场文书
go mod 安装依赖 unkown revision问题的解决方案
2021/05/06 Golang
详解flex:1什么意思
2022/07/23 HTML / CSS