用Python编写一个简单的网络摄像头监控系统
发布时间:2023-12-04 11:44:59
网络摄像头监控系统是一种通过网络连接的摄像头,可以实时监控指定区域的视频图像,并可以通过互联网进行远程访问和控制。Python是一种强大的编程语言,可以方便地用于网络摄像头监控系统的开发。下面是一个简单的网络摄像头监控系统的Python代码示例。
首先,我们需要使用Python的socket库实现网络通信功能。然后,我们可以使用OpenCV库读取网络摄像头的视频图像,并通过socket将图像数据传输到客户端。
以下是一个简单的网络摄像头监控系统的Python代码示例:
服务器端:
import cv2
import socket
import pickle
import struct
# 创建一个socket连接
server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host_ip = '192.168.1.100' # 服务器的IP地址
port = 1234 # 使用的端口号
socket_address = (host_ip,port)
# 绑定socket地址
server_socket.bind(socket_address)
# 开始监听连接
server_socket.listen(5)
print('等待客户端连接...')
# 接受客户端连接
while True:
client_socket,addr = server_socket.accept()
print('已连接:',addr)
if client_socket:
vid = cv2.VideoCapture(0) # 创建一个摄像头对象
while(vid.isOpened()): # 始终循环读取摄像头图像
img,frame = vid.read()
a = pickle.dumps(frame) # 将图像序列化为位字符串
message = struct.pack("Q",len(a))+a # 将字符串长度打包为8字节并与字符串拼接
client_socket.sendall(message) # 发送图像数据到客户端
cv2.imshow('SERVER VIDEO',frame) # 在服务器端显示图像
key = cv2.waitKey(1) & 0xFF
if key ==ord('q'): # 当按下'q'键时退出程序
client_socket.close()
客户端:
import cv2
import socket
import pickle
import struct
# 创建一个socket连接
client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host_ip = '192.168.1.100' # 服务器的IP地址
port = 1234 # 使用的端口号
socket_address = (host_ip,port)
# 连接服务器
client_socket.connect(socket_address)
data = b"" # 接收数据的缓冲区
# 接收图像数据
while True:
while len(data)<8: # 直到接收到8个字节,才开始解析数据长度
packet = client_socket.recv(4)
if not packet: break
data += packet
if not data: break
packed_msg_size = data[:8]
data = data[8:]
msg_size = struct.unpack("Q",packed_msg_size)[0]
while len(data)<msg_size: # 直到接收到指定长度的数据,才开始解析数据
data += client_socket.recv(1024)
frame_data = data[:msg_size]
data = data[msg_size:]
frame = pickle.loads(frame_data) # 转换数据为图像
cv2.imshow('CLIENT VIDEO',frame) # 在客户端显示图像
key = cv2.waitKey(1) & 0xFF
if key ==ord('q'): # 当按下'q'键时退出程序
break
cv2.destroyAllWindows()
以上是一个简单的网络摄像头监控系统的Python代码示例。通过运行服务器端和客户端代码,可以在客户端实时显示来自网络摄像头的视频图像。整个系统可以方便地部署在本地网络环境中,以方便对指定区域进行实时监控和访问。
