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中__init__和__new__的区别详解
Jul 09 Python
python实现简单购物商城
May 21 Python
Python更新数据库脚本两种方法及对比介绍
Jul 27 Python
python中实现数组和列表读取一列的方法
Apr 03 Python
python消除序列的重复值并保持顺序不变的实例
Nov 08 Python
python 自定义对象的打印方法
Jan 12 Python
对python中if语句的真假判断实例详解
Feb 18 Python
numpy.where() 用法详解
May 27 Python
将python2.7添加进64位系统的注册表方式
Nov 20 Python
在pycharm中实现删除bookmark
Feb 14 Python
Python格式化输出--%s,%d,%f的代码解析
Apr 29 Python
只需要100行Python代码就可以实现的贪吃蛇小游戏
May 27 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三维数组去重(示例代码)
2013/11/26 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
php微信公众平台开发之微信群发信息
2016/09/13 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
ExtJS Store的数据访问与更新问题
2010/04/28 Javascript
JS控件的生命周期介绍
2012/10/22 Javascript
JavaScript获取FCK编辑器信息的具体方法
2013/07/12 Javascript
js中一维数组和二位数组中的几个问题示例说明
2014/07/17 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
2015/03/10 Javascript
ECMAScript5(ES5)中bind方法使用小结
2015/05/07 Javascript
Webpack 实现 Node.js 代码热替换
2015/10/22 Javascript
jquery实现简单的瀑布流布局
2016/12/11 Javascript
jQuery基本选择器和层次选择器学习使用
2017/02/27 Javascript
浅谈Vuejs Prop基本用法
2017/08/17 Javascript
Vue.js项目中管理每个页面的头部标签的两种方法
2018/06/25 Javascript
简单的React SSR服务器渲染实现
2018/12/11 Javascript
微信小程序学习笔记之文件上传、下载操作图文详解
2019/03/29 Javascript
Python设置Socket代理及实现远程摄像头控制的例子
2015/11/13 Python
Python 编码Basic Auth使用方法简单实例
2017/05/25 Python
python 数据的清理行为实例详解
2017/07/12 Python
python 异或加密字符串的实例
2018/10/14 Python
Python进阶之自定义对象实现切片功能
2019/01/07 Python
使用Python 统计高频字数的方法
2019/01/31 Python
Python的numpy库下的几个小函数的用法(小结)
2019/07/12 Python
解决keras backend 越跑越慢问题
2020/06/18 Python
幸福家庭事迹材料
2014/02/03 职场文书
园林技术个人的自我评价
2014/02/15 职场文书
应届生求职自荐信范文
2014/04/07 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书
2015年度党风廉政建设工作情况汇报
2015/01/02 职场文书
公司优秀员工推荐信
2015/03/24 职场文书
七一慰问简报
2015/07/20 职场文书
《从现在开始》教学反思
2016/02/16 职场文书
Python词云的正确实现方法实例
2021/05/08 Python
使用refresh_token实现无感刷新页面
2022/04/26 Javascript
VMware虚拟机安装 Windows Server 2022的详细图文教程
2022/09/23 Servers