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获取GY-85九轴模块信息示例
Dec 05 Python
python的re模块应用实例
Sep 26 Python
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
Apr 09 Python
使用Python的内建模块collections的教程
Apr 28 Python
Python中使用platform模块获取系统信息的用法教程
Jul 08 Python
python获取当前用户的主目录路径方法(推荐)
Jan 12 Python
Python实现Linux的find命令实例分享
Jun 04 Python
基于pandas数据样本行列选取的方法
Apr 20 Python
对python中raw_input()和input()的用法详解
Apr 22 Python
python点击鼠标获取坐标(Graphics)
Aug 10 Python
Python Django2.0集成Celery4.1教程
Nov 19 Python
Python *args和**kwargs用法实例解析
Mar 02 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
MySQL GBK→UTF-8编码转换
2007/05/24 PHP
Android App中DrawerLayout抽屉效果的菜单编写实例
2016/03/21 PHP
php 常用的系统函数
2017/02/07 PHP
PHP 获取 ping 时间的实现方法
2017/09/29 PHP
JavaScript脚本语言在网页中的简单应用
2007/05/13 Javascript
js中使用replace方法完成某个字符的转换
2014/08/20 Javascript
nodejs教程之入门
2014/11/21 NodeJs
js实现横向百叶窗效果网页切换动画效果的方法
2015/03/02 Javascript
React中jquery引用的实现方法
2017/09/12 jQuery
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
js定时器+简单的动画效果实例
2017/11/10 Javascript
vue项目实现记住密码到cookie功能示例(附源码)
2018/01/31 Javascript
详解VUE自定义组件中用.sync修饰符与v-model的区别
2018/06/26 Javascript
JS实现HTML页面中动态显示当前时间完整示例
2018/07/30 Javascript
vue实现点击追加选中样式效果
2019/11/01 Javascript
基于Vue CSR的微前端实现方案实践
2020/05/27 Javascript
Vue记住滚动条和实现下拉加载的完美方法
2020/07/31 Javascript
[04:41]2014DOTA2国际邀请赛 Liquid顺利突围晋级正赛
2014/07/09 DOTA
Python2.x中文乱码问题解决方法
2015/06/02 Python
python进阶_浅谈面向对象进阶
2017/08/17 Python
Python实现matplotlib显示中文的方法详解
2018/02/06 Python
Python使用pandas处理CSV文件的实例讲解
2018/06/22 Python
Python实现将Excel转换成为image的方法
2018/10/23 Python
Python异常处理例题整理
2019/07/07 Python
Python实现括号匹配方法详解
2020/02/10 Python
Python实现http接口自动化测试的示例代码
2020/10/09 Python
CSS3教程(5):网页背景图片
2009/04/02 HTML / CSS
Html5让容器充满屏幕高度或自适应剩余高度的布局实现
2020/05/14 HTML / CSS
美国美妆网站:B-Glowing
2016/10/12 全球购物
科级干部群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
工人先锋号申报材料
2014/12/29 职场文书
销售内勤岗位职责范本
2015/04/13 职场文书
教师读书笔记
2015/06/29 职场文书
迎国庆主题班会
2015/08/17 职场文书
党校团干班培训心得体会
2016/01/06 职场文书
详解Java线程池是如何重复利用空闲线程的
2021/06/26 Java/Android