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计算三角函数之atan()方法的使用
May 15 Python
Python中使用插入排序算法的简单分析与代码示例
May 04 Python
利用Python画ROC曲线和AUC值计算
Sep 19 Python
Python实现采用进度条实时显示处理进度的方法
Dec 19 Python
python opencv判断图像是否为空的实例
Jan 26 Python
Python判断有效的数独算法示例
Feb 23 Python
ERLANG和PYTHON互通实现过程详解
Jul 05 Python
python实现简单图书管理系统
Nov 22 Python
pyinstaller还原python代码过程图解
Jan 08 Python
Numpy一维线性插值函数的用法
Apr 22 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
Jun 18 Python
Python用tkinter实现自定义记事本的方法详解
Mar 31 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 fckeditor 调用的函数
2009/06/21 PHP
php命名空间设计思想、用法与缺点分析
2019/07/17 PHP
js压缩工具 yuicompressor 使用教程
2010/03/31 Javascript
五段实用的js高级技巧
2011/12/20 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
jQuery的Ajax用户认证和注册技术实例教程(附demo源码)
2015/12/08 Javascript
location.hash保存页面状态的技巧
2016/04/28 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
2016/08/08 Javascript
利用jQuery实现滑动开关按钮效果(附demo源码下载)
2017/02/07 Javascript
vue3.0 CLI - 2.2 - 组件 home.vue 的初步改造
2018/09/14 Javascript
NestJs 静态目录配置详解
2019/03/12 Javascript
Vue双向数据绑定(MVVM)的原理
2020/10/03 Javascript
[01:58]DOTA2上海特级锦标赛现场采访:RTZ这个ID到底好不好
2016/03/25 DOTA
[42:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 VG VS OpTic
2018/03/31 DOTA
使用相同的Apache实例来运行Django和Media文件
2015/07/22 Python
python线程、进程和协程详解
2016/07/19 Python
django解决跨域请求的问题
2018/11/11 Python
pygame游戏之旅 添加游戏暂停功能
2018/11/21 Python
python后端接收前端回传的文件方法
2019/01/02 Python
Python反爬虫技术之防止IP地址被封杀的讲解
2019/01/09 Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
2019/06/27 Python
kafka监控获取指定topic的消息总量示例
2019/12/23 Python
Python3+selenium实现cookie免密登录的示例代码
2020/03/18 Python
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
JD Sports意大利:英国篮球和运动时尚的领导者
2017/10/29 全球购物
美国台面电器和厨具品牌:KitchenAid
2019/04/12 全球购物
英国在线购买马术服装:EQUUS
2019/07/12 全球购物
最好的商品表达自己:Cafepress
2019/09/04 全球购物
模具专业推荐信
2013/10/30 职场文书
社区国庆节活动方案
2014/02/05 职场文书
户外婚礼策划方案
2014/02/08 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
2014年校长工作总结
2014/12/11 职场文书
跟班学习心得体会(共6篇)
2016/01/23 职场文书
PHP中国际化的字符串排序和比较对象详解
2021/08/23 PHP