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实现带错误处理功能的远程文件读取方法
Apr 29 Python
Linux下用Python脚本监控目录变化代码分享
May 21 Python
全面了解Nginx, WSGI, Flask之间的关系
Jan 09 Python
Python中循环引用(import)失败的解决方法
Apr 22 Python
python集合比较(交集,并集,差集)方法详解
Sep 13 Python
浅谈Python编程中3个常用的数据结构和算法
Apr 30 Python
libreoffice python 操作word及excel文档的方法
Jul 04 Python
Python cookie的保存与读取、SSL讲解
Feb 17 Python
python爬虫容易学吗
Jun 02 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
Oct 19 Python
Django REST Framework 分页(Pagination)详解
Nov 30 Python
Django drf请求模块源码解析
Jun 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巧获服务器端信息
2006/12/06 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
原生Js实现按的数据源均分时间点幻灯片效果(已封装)
2010/12/28 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
2012/10/11 Javascript
jQuery获取注册信息并提示实现代码
2013/04/21 Javascript
一个简单的弹性返回顶部JS代码实现介绍
2013/06/09 Javascript
JQuery报错Uncaught TypeError: Illegal invocation的处理方法
2015/03/13 Javascript
jQuery layui常用方法介绍
2016/07/25 Javascript
Three.js基础部分学习
2017/01/08 Javascript
jQuery插件HighCharts实现的2D条状图效果示例【附demo源码下载】
2017/03/15 Javascript
JS实现列表页面隔行变色效果
2017/03/25 Javascript
Angular排序实例详解
2017/06/28 Javascript
webpack学习笔记之优化缓存、合并、懒加载
2017/08/24 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
学习python (2)
2006/10/31 Python
构建Python包的五个简单准则简介
2015/06/15 Python
python实现网站的模拟登录
2016/01/04 Python
详解python如何调用C/C++底层库与互相传值
2016/08/10 Python
对python中return和print的一些理解
2017/08/18 Python
Python数据拟合与广义线性回归算法学习
2017/12/22 Python
六行python代码的爱心曲线详解
2019/05/17 Python
Python3.7安装keras和TensorFlow的教程图解
2020/06/18 Python
Tensorflow实现在训练好的模型上进行测试
2020/01/20 Python
python 实现任务管理清单案例
2020/04/25 Python
护士实习生自我鉴定范文
2013/12/10 职场文书
服装设计师职业生涯规划范文
2014/02/28 职场文书
机械工程学院大学生求职信
2014/05/25 职场文书
计算机网络专业自荐书
2014/06/09 职场文书
企业法人授权委托书范本
2014/09/23 职场文书
单位授权委托书范本
2014/09/26 职场文书
党员民主评议总结
2014/10/20 职场文书
2015年安全月活动总结
2015/03/26 职场文书
2015年学校少先队工作总结
2015/07/20 职场文书
MongoDB数据库部署环境准备及使用介绍
2022/03/21 MongoDB
Apache Kafka 分区重分配的实现原理解析
2022/07/15 Servers
MySQL性能指标TPS+QPS+IOPS压测
2022/08/05 MySQL