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 BeautifulSoup使用方法详解
Nov 21 Python
Python变量作用范围实例分析
Jul 07 Python
Python+tkinter使用40行代码实现计算器功能
Jan 30 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
May 30 Python
浅谈python中对于json写入txt文件的编码问题
Jun 07 Python
python 按不同维度求和,最值,均值的实例
Jun 28 Python
python使用__slots__让你的代码更加节省内存
Sep 05 Python
pandas-resample按时间聚合实例
Dec 27 Python
Python基础之变量基本用法与进阶详解
Jan 03 Python
python自动化unittest yaml使用过程解析
Feb 03 Python
Python数据库封装实现代码示例解析
Sep 05 Python
Python调用ffmpeg开源视频处理库,批量处理视频
Nov 16 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 出现乱码和Sessions验证问题的解决方法!
2008/12/06 PHP
php array_walk() 数组函数
2011/07/12 PHP
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
2013/06/21 PHP
php二分查找二种实现示例
2014/03/12 PHP
jQuery formValidator表单验证插件开源了 含API帮助、源码、示例
2008/08/14 Javascript
JS 获取span标签中的值的代码 支持ie与firefox
2009/08/24 Javascript
ToolTips JQEURY插件之简洁小提示框效果
2011/11/19 Javascript
jquery复选框checkbox实现删除前判断
2014/04/20 Javascript
Javascript中的apply()方法浅析
2015/03/15 Javascript
AngularJS ng-controller 指令简单实例
2016/08/01 Javascript
自己封装的一个原生JS拖动方法(推荐)
2016/11/22 Javascript
ThinkJS中如何使用MongoDB的CURD操作
2016/12/13 Javascript
原生JS京东轮播图代码
2017/03/22 Javascript
Vue.use源码分析
2017/04/22 Javascript
vue项目中axios使用详解
2018/02/07 Javascript
vue 组件高级用法实例详解
2018/04/11 Javascript
jQuery实现的滑块滑动导航效果示例
2018/06/04 jQuery
vue 实现走马灯效果
2019/10/28 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
2019/11/07 Javascript
jQuery实现轮播图效果
2019/11/26 jQuery
AJAX XMLHttpRequest对象创建使用详解
2020/08/20 Javascript
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
python3利用ctypes传入一个字符串类型的列表方法
2019/02/12 Python
keras 模型参数,模型保存,中间结果输出操作
2020/07/06 Python
详解Python调用系统命令的六种方法
2021/01/28 Python
马来西亚最大的电器网站:Senheng
2017/10/13 全球购物
毕业自我鉴定
2013/11/05 职场文书
总监职责范文
2013/11/09 职场文书
买房子个人收入证明
2014/01/16 职场文书
植树节活动总结
2014/04/30 职场文书
运动会口号16字
2014/06/07 职场文书
离婚协议书范本(通用篇)
2014/11/30 职场文书
2015年办公室文秘工作总结
2015/04/30 职场文书
我的1919观后感
2015/06/03 职场文书
2016春季运动会开幕词
2016/03/04 职场文书