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 基础教程之str和repr的详解
Aug 20 Python
tensorflow训练中出现nan问题的解决
Feb 10 Python
Django学习教程之静态文件的调用详解
May 08 Python
基于Pandas读取csv文件Error的总结
Jun 15 Python
Python自定义装饰器原理与用法实例分析
Jul 16 Python
Laravel+Dingo/Api 自定义响应的实现
Feb 17 Python
简单了解python关系(比较)运算符
Jul 08 Python
python 字段拆分详解
Dec 17 Python
Python通过socketserver处理多个链接
Mar 18 Python
python简单利用字典破解zip文件口令
Sep 07 Python
flask框架中的cookie和session使用
Jan 31 Python
Python使用pyecharts控件绘制图表
Jun 05 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
require(),include(),require_once()和include_once()的异同
2007/01/02 PHP
PHP 验证码的实现代码
2011/07/17 PHP
PHP获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)
2012/10/03 PHP
php文件上传类的分享
2017/07/06 PHP
ASP小贴士/ASP Tips javascript tips可以当桌面
2009/12/10 Javascript
jquery中的sortable排序之后的保存状态的解决方法
2010/01/28 Javascript
Jquery练习之表单验证实现代码
2010/12/14 Javascript
使用Jquery来实现可以输入值的下拉选单 雏型
2011/12/06 Javascript
理解JavaScript的prototype属性
2012/02/11 Javascript
返回页面顶部top按钮通过锚点实现(自写)
2013/08/30 Javascript
Javascript中3个需要注意的运算符
2015/04/02 Javascript
jQuery无刷新分页完整实例代码
2015/10/27 Javascript
JavaScript实现省市县三级级联特效
2017/05/16 Javascript
JS实现标签滚动切换效果
2017/12/25 Javascript
浅谈在node.js进入文件目录的问题
2018/05/13 Javascript
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
详解React native fetch遇到的坑
2018/08/30 Javascript
node.js之基础加密算法模块crypto详解
2018/09/11 Javascript
微信小程序出现wx.getLocation再次授权问题的解决方法分析
2019/01/16 Javascript
js console.log打印对象时属性缺失的解决方法
2019/05/23 Javascript
JavaScript自动生成 年月范围 选择功能完整示例【基于jQuery插件】
2019/09/03 jQuery
Vue单文件组件开发实现过程详解
2020/07/30 Javascript
[03:30]完美盛典趣味短片 CSGO2019年度名场面
2019/12/07 DOTA
django允许外部访问的实例讲解
2018/05/14 Python
python实现决策树ID3算法的示例代码
2018/05/30 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
2020/04/08 Python
python多线程和多进程关系详解
2020/12/14 Python
Html5新增标签有哪些
2017/04/13 HTML / CSS
Expedia法国:全球最大在线旅游公司
2018/09/30 全球购物
英国最大最好的无人机商店:Drones Direct
2019/07/12 全球购物
关于安全的演讲稿
2014/05/09 职场文书
财务会计专业求职信
2014/06/09 职场文书
婚宴父亲致辞
2015/07/27 职场文书
初中生物教学随笔
2015/08/15 职场文书
《天使的翅膀》读后感3篇
2019/12/20 职场文书
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
2021/04/25 Python