经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python3 » 查看文章
Python3远程监控程序的实现方法
来源:jb51  时间:2019/7/16 8:34:35  对本文有异议

简述

一开始觉得这个很有趣,然后就想来做一个来玩一下

使用语言: Python3

使用工具:opencv视频监控 + socket数据传输技术

程序检验: 这里我考虑了一下,发现还是没有必要实现封装成可执行文件。还是直接就放代码吧。(先放代码,以后再做解释)

本程序,经过本人修改,保证可以使用

使用要求:

Sender代码必须要在一台有摄像头的电脑上运行起来。然后把数据编码,压缩之后,再传给另外一个电脑

Reciever作为接受端,没什么特别的要求。

两个电脑都必须要按转好numpy + opencv (安装方法的话,在我的opencv文集中有一篇就是写这个的)

对了,我的接受端关闭操作是(输入键盘中的 Esc)这样就可以退出监控。

发送端是关闭不了这个监控的

至于这个IP地址的设置:我写的都是接受端的地址。端口随便设置的

局限性:

本程序目前只能在局域网内进行实时监控。

改进思路:

如果想扩展成一个广域网上的。(就可以用一个广域网上的服务器做中转站)

而且,上述的方法,如果能找到一台肉鸡,还可以避免探测到对应的监控对象的ip地址

代码

Sender(发送端代码)

  1. import socket
  2. import struct
  3. import time
  4. import cv2
  5. import numpy
  6.  
  7.  
  8. class Config(object):
  9. def __init__(self):
  10. self.TargetIP = ('192.168.199.121', 6666)
  11. self.resolution = (640, 480) # 分辨率
  12. self.img_fps = 15 # each second send pictures
  13. self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  14. self.server.connect(self.TargetIP)
  15. self.img = ''
  16. self.img_data = ''
  17.  
  18. def RT_Image(self):
  19. camera = cv2.VideoCapture(0)
  20. img_param = [int(cv2.IMWRITE_JPEG_QUALITY), self.img_fps]
  21.  
  22. while True:
  23. time.sleep(0.1) # sleep for 0.1 seconds
  24. _, self.img = camera.read()
  25.  
  26. self.img = cv2.resize(self.img, self.resolution)
  27.  
  28. _, img_encode = cv2.imencode('.jpg', self.img, img_param)
  29. img_code = numpy.array(img_encode)
  30. self.img_data = img_code.tostring() # bytes data
  31. try:
  32.  
  33. packet = struct.pack(b'lhh', len(self.img_data), self.resolution[0],
  34. self.resolution[1])
  35. self.server.send(packet)
  36. self.server.send(self.img_data)
  37.  
  38. except Exception as e:
  39. print(e.args)
  40. camera.release()
  41. return
  42.  
  43.  
  44. if __name__ == '__main__':
  45. config = Config()
  46. config.RT_Image()

Reciever 接受端代码:

  1. import socket
  2. import cv2
  3. import struct
  4. import numpy
  5. import threading
  6.  
  7.  
  8. class Camera_Connect_Object(object):
  9. def __init__(self, TargetIP=('', 6666)):
  10. self.TargetIP = TargetIP
  11. self.resolution = (640, 480)
  12. self.src = 888 + 15
  13. self.interval = 0
  14. self.img_fps = 15
  15.  
  16. self.Server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  17. self.Server.bind(self.TargetIP)
  18. self.Server.listen(5)
  19.  
  20. def RT_Image(self):
  21. self.client, self.addr = self.Server.accept()
  22. self.name = self.addr[0] + " Camera"
  23. print(self.name)
  24. while True:
  25. # time.sleep(0.3) # sleep for 0.3 seconds
  26. tempdata = self.client.recv(8)
  27. if len(tempdata) == 0:
  28. print("+1")
  29. continue
  30. info = struct.unpack('lhh', tempdata)
  31. buf_size = int(info[0])
  32.  
  33. if buf_size:
  34. try:
  35. self.buf = b""
  36. self.temp_buf = self.buf
  37. while buf_size:
  38. self.temp_buf = self.client.recv(buf_size)
  39. buf_size -= len(self.temp_buf)
  40. self.buf += self.temp_buf
  41. data = numpy.fromstring(self.buf, dtype='uint8')
  42.  
  43. self.image = cv2.imdecode(data, 1)
  44. cv2.imshow(self.name, self.image)
  45. except Exception as e:
  46. print(e.args)
  47. pass
  48. finally:
  49. if cv2.waitKey(10) == 27:
  50. self.client.close()
  51. cv2.destroyAllWindows()
  52. break
  53.  
  54. def Get_data(self):
  55. showThread = threading.Thread(target=self.RT_Image)
  56. showThread.start()
  57. showThread.join()
  58.  
  59.  
  60. if __name__ == '__main__':
  61. camera = Camera_Connect_Object()
  62. camera.Get_data()

以上这篇Python3远程监控程序的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号