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中的exec、eval使用实例
Sep 23 Python
python自动化测试实例解析
Sep 28 Python
深入浅析Python中join 和 split详解(推荐)
Jun 30 Python
Python将多个excel文件合并为一个文件
Jan 03 Python
python中使用 xlwt 操作excel的常见方法与问题
Jan 13 Python
用django设置session过期时间的方法解析
Aug 05 Python
vscode 配置 python3开发环境的方法
Sep 19 Python
Python Web静态服务器非堵塞模式实现方法示例
Nov 21 Python
python如何实现单链表的反转
Feb 10 Python
python实现吃苹果小游戏
Mar 21 Python
Python 实现PS滤镜的旋涡特效
Dec 03 Python
python音频处理的示例详解
Dec 23 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
《星际争霸II》全新指挥官斯台特曼现已上线
2020/03/08 星际争霸
Yii2前后台分离及migrate使用(七)
2016/05/04 PHP
php字符串操作针对负值的判断分析
2016/07/28 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
2017/04/18 PHP
php设计模式之适配器模式原理、用法及注意事项详解
2019/09/24 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
PHP底层运行机制与工作原理详解
2020/07/31 PHP
用javascript实现计算两个日期的间隔天数
2007/08/14 Javascript
让div层随鼠标移动的实现代码 ie ff
2009/12/18 Javascript
jQuery Tools tab(幻灯片)
2012/07/14 Javascript
JS正则表达式大全(整理详细且实用)
2013/11/14 Javascript
使用POST方式弹出窗口的两种方法示例介绍
2014/01/29 Javascript
javascript实现网站加入收藏功能
2015/12/16 Javascript
JSON字符串转换JSONObject和JSONArray的方法
2016/06/03 Javascript
利用JQuery阻止事件冒泡
2016/12/01 Javascript
完美解决spring websocket自动断开连接再创建引发的问题
2017/03/02 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
vue中eventbus被多次触发以及踩过的坑
2017/12/02 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
2019/01/24 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
2019/04/09 Javascript
用Python的线程来解决生产者消费问题的示例
2015/04/02 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
2018/09/25 Python
通过python实现随机交换礼物程序详解
2019/07/10 Python
Pytorch中index_select() 函数的实现理解
2019/11/19 Python
Windows上安装tensorflow  详细教程(图文详解)
2020/02/04 Python
python实现简单遗传算法
2020/09/18 Python
详解css3自定义滚动条样式写法
2017/12/25 HTML / CSS
公务员职务工作的自我评价
2013/11/01 职场文书
超市国庆节促销方案
2014/02/20 职场文书
毕业生如何写自我鉴定
2014/03/15 职场文书
餐厅服务员岗位职责
2015/02/09 职场文书
2015年前台接待工作总结
2015/05/04 职场文书
Python机器学习之基于Pytorch实现猫狗分类
2021/06/08 Python
Python爬取某拍短视频
2021/06/11 Python
vue.js Router中嵌套路由的实用示例
2021/06/27 Vue.js
Python按顺序遍历并读取文件夹中文件
2022/04/29 Python