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 24 Python
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
Mar 30 Python
以Flask为例讲解Python的框架的使用方法
Apr 29 Python
详解python的webrtc库实现语音端点检测
May 31 Python
python绘制双柱形图代码实例
Dec 14 Python
实例分析python3实现并发访问水平切分表
Sep 29 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
Jun 04 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
Jul 22 Python
基于Python数据结构之递归与回溯搜索
Feb 26 Python
python小程序基于Jupyter实现天气查询的方法
Mar 27 Python
PyQt5中QSpinBox计数器的实现
Jan 18 Python
Python中Schedule模块使用详解 周期任务神器
Apr 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
Home Coffee Roasting
2021/03/03 咖啡文化
PHP 学习路线与时间表
2010/02/21 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
2014/06/19 PHP
thinkPHP查询方式小结
2016/01/09 PHP
php设计模式之装饰模式应用案例详解
2019/06/17 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
iframe 自适应高度[在IE6 IE7 FF下测试通过]
2009/04/13 Javascript
jquery 可排列的表实现代码
2009/11/13 Javascript
javascript function调用时的参数检测常用办法
2010/02/26 Javascript
JavaScript传递变量: 值传递?引用传递?
2011/02/22 Javascript
借助JavaScript脚本判断浏览器Flash Player信息的方法
2014/07/09 Javascript
JavaScript计算两个日期时间段内日期的方法
2015/03/16 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
2018/07/31 jQuery
Vue按时间段查询数据组件使用详解
2020/08/21 Javascript
使用js获取身份证年龄的示例代码
2020/12/11 Javascript
[05:59]2018DOTA2国际邀请赛寻真——只为胜利的Secret
2018/08/13 DOTA
[53:36]Liquid vs VP Supermajor决赛 BO 第三场 6.10
2018/07/05 DOTA
python中的五种异常处理机制介绍
2014/09/02 Python
利用Tkinter和matplotlib两种方式画饼状图的实例
2017/11/06 Python
python+matplotlib绘制3D条形图实例代码
2018/01/17 Python
如何在django里上传csv文件并进行入库处理的方法
2019/01/02 Python
关于python下cv.waitKey无响应的原因及解决方法
2019/01/10 Python
python监控nginx端口和进程状态
2019/09/06 Python
python实现代码统计程序
2019/09/19 Python
python词云库wordCloud使用方法详解(解决中文乱码)
2020/02/17 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
python 列表推导和生成器表达式的使用
2021/02/01 Python
详解HTML5中的拖放事件(Drag 和 drop)
2016/11/14 HTML / CSS
局域网定义和特性
2016/01/23 面试题
机电一体化大学生求职信
2013/11/08 职场文书
法制宣传月活动方案
2014/05/11 职场文书
土建工程师岗位职责
2014/06/10 职场文书
领导班子民主生活会整改措施(工商局)
2014/09/21 职场文书
个人租房协议书(范本)
2014/10/14 职场文书
Golang流模式之grpc的四种数据流
2022/04/13 Golang