欢迎访问宙启技术站
智能推送

用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代码示例。通过运行服务器端和客户端代码,可以在客户端实时显示来自网络摄像头的视频图像。整个系统可以方便地部署在本地网络环境中,以方便对指定区域进行实时监控和访问。