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命令行参数解析模块getopt使用实例
Apr 13 Python
实例讲解Python编程中@property装饰器的用法
Jun 20 Python
python executemany的使用及注意事项
Mar 13 Python
Django自定义分页效果
Jun 27 Python
python 利用栈和队列模拟递归的过程
May 29 Python
python人民币小写转大写辅助工具
Jun 20 Python
python利用requests库模拟post请求时json的使用教程
Dec 07 Python
Python3内置模块pprint让打印比print更美观详解
Jun 02 Python
Python面向对象之私有属性和私有方法应用案例分析
Dec 31 Python
PyCharm中配置PySide2的图文教程
Jun 18 Python
Python调用C语言程序方法解析
Jul 07 Python
python 爬虫如何实现百度翻译
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 应用程序的安全 -- 不能违反的四条安全规则
2006/11/26 PHP
rrmdir php中递归删除目录及目录下的文件
2011/05/15 PHP
php中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
2011/07/03 PHP
PHP文件注释标记及规范小结
2012/04/01 PHP
php可应用于面包屑导航的递归寻找家谱树实现方法
2015/02/02 PHP
php实现mysql数据库连接操作及用户管理
2015/11/08 PHP
Joomla调用系统自带编辑器的实现方法
2016/05/05 PHP
详解PHP安装mysql.so扩展的方法
2016/12/31 PHP
实现局部遮罩与关闭原理及代码
2013/02/04 Javascript
js获得鼠标的坐标值的方法
2013/03/13 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
2016/11/25 Javascript
js字符串与Unicode编码互相转换
2017/05/17 Javascript
详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)
2017/07/13 Javascript
原生js实现拖拽功能基本思路详解
2018/04/18 Javascript
swiper在vue项目中loop循环轮播失效的解决方法
2018/09/15 Javascript
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
[54:43]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第一场 2月22日
2021/03/11 DOTA
Python实现文件复制删除
2016/04/19 Python
django model去掉unique_together报错的解决方案
2016/10/18 Python
Python 实现12306登录功能实例代码
2018/02/09 Python
Django框架验证码用法实例分析
2019/05/10 Python
python lxml中etree的简单应用
2019/05/10 Python
python使用yield压平嵌套字典的超简单方法
2019/11/02 Python
python实现ssh及sftp功能(实例代码)
2020/03/16 Python
python print 格式化输出,动态指定长度的实现
2020/04/12 Python
python3 简单实现组合设计模式
2020/07/02 Python
行政主管职责范本
2014/03/07 职场文书
法制宣传实施方案
2014/03/13 职场文书
我的求职择业计划书
2014/04/04 职场文书
县委常委班子专题民主生活会查摆问题及整改措施
2014/09/27 职场文书
装配车间主任岗位职责
2015/04/08 职场文书
小学家庭教育心得体会
2016/01/14 职场文书
干货分享:推荐信写作技巧!
2019/06/21 职场文书
浅谈MySQL user权限表
2021/06/18 MySQL
instantclient客户端 连接oracle数据库
2022/04/26 Oracle