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 测试实现方法
Dec 24 Python
按日期打印Python的Tornado框架中的日志的方法
May 02 Python
Python实现生成随机日期字符串的方法示例
Dec 25 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
Jun 01 Python
Python 找到列表中满足某些条件的元素方法
Jun 26 Python
selenium+python实现自动化登录的方法
Sep 04 Python
python实现反转部分单向链表
Sep 27 Python
Django如何使用第三方服务发送电子邮件
Aug 14 Python
python向图片里添加文字
Nov 26 Python
python 使用递归实现打印一个数字的每一位示例
Feb 27 Python
Python matplotlib实时画图案例
Apr 23 Python
如何对python的字典进行排序
Jun 19 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 文件上传实例代码
2012/04/19 PHP
php+MySql实现登录系统与输出浏览者信息功能
2016/07/01 PHP
php实现多维数组排序的方法示例
2017/03/23 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
tbody元素支持嵌套的注意方法
2007/03/24 Javascript
JavaScript高级程序设计阅读笔记(五) ECMAScript中的运算符(一)
2012/02/27 Javascript
javascript对select标签的控制(option选项/select)
2013/01/31 Javascript
javascript中call,apply,bind的用法对比分析
2015/02/12 Javascript
详解jQuery中的元素的属性和相关操作
2015/08/14 Javascript
javascript实现dom元素可拖动
2016/03/21 Javascript
JavaScript获取短信验证码(周期性)
2016/12/29 Javascript
微信小程序--onShareAppMessage分享参数用处(页面分享)
2017/04/18 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
2017/08/18 Javascript
浅谈es6 javascript的map数据结构
2017/12/14 Javascript
使用Angular CLI进行单元测试和E2E测试的方法
2018/03/24 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
2019/01/18 Javascript
Vue + Element UI图片上传控件使用详解
2019/08/20 Javascript
JS实现纵向轮播图(初级版)
2020/01/18 Javascript
详解Python的collections模块中的deque双端队列结构
2016/07/07 Python
python创建列表和向列表添加元素的实现方法
2017/12/25 Python
python requests 库请求带有文件参数的接口实例
2019/01/03 Python
分析经典Python开发工程师面试题
2019/04/08 Python
ML神器:sklearn的快速使用及入门
2019/07/11 Python
python3 动态模块导入与全局变量使用实例
2019/12/22 Python
python实现AHP算法的方法实例(层次分析法)
2020/09/09 Python
python中的对数log函数表示及用法
2020/12/09 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
可爱的童装和鞋子:Fabkids
2019/08/16 全球购物
大学生最新职业生涯规划书范文
2014/01/12 职场文书
高中运动会广播稿
2014/09/16 职场文书
法定代表人授权委托书格式
2014/10/14 职场文书
2014年行政助理工作总结
2014/11/19 职场文书
2015年学校消防安全工作总结
2015/10/14 职场文书
《中国古代诗歌散文欣赏》高中语文教材
2019/08/20 职场文书
JavaScript parseInt0.0000005打印5原理解析
2022/07/23 Javascript