python实现同一局域网下传输图片

yizhihongxing

一、准备工作

在实现同一局域网下传输图片之前,需要准备以下工具和环境:

  1. 安装Python。可以从官网(https://www.python.org/downloads/)下载并安装Python,建议选择最新的稳定版本;

  2. 在摄像头使用情况下,安装OpenCV库,实现图像的读取等操作。可以通过以下命令安装OpenCV:

pip install opencv-python

或者可以通过官网(https://opencv.org/)下载并安装OpenCV。

  1. 安装Socket库,用于网络数据传输。Socket库是Python内置的标准库,无需额外安装。

二、实现同一局域网下传输图片的方法

  1. 制作服务器端:

在服务器端,需要先准备好一张本地的图片,代码如下:

import cv2  # 导入OpenCV库

# 加载图片
img = cv2.imread('img.jpg', cv2.IMREAD_COLOR)

# 显示图片
cv2.imshow("Image", img)
cv2.waitKey()

通过上述代码,可以在本地使用OpenCV库加载一张图片,并在图像窗口中显示。

接下来,需要使用Socket库创建一个服务器并监听客户端的连接。代码如下:

import socket  # 导入Socket库

# 创建一个服务器
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind(('0.0.0.0', 8888))
server_socket.listen(5)
client_socket, addr = server_socket.accept()

通过上述代码,可以创建一个服务器,使用IP地址‘0.0.0.0’和端口号8888,并监听客户端的连接。

在服务器与客户端建立连接后,可以使用OpenCV库将本地的图片数据传输给客户端。代码如下:

import numpy as np

# 将图片编码成bytes类型,并发送给客户端
img_bytes = cv2.imencode('.jpg', img)[1].tobytes()
client_socket.sendall(np.array([len(img_bytes)]).astype(np.int32).tobytes())
client_socket.sendall(img_bytes)

通过上述代码,可以将创建的图片数据编码成bytes类型,并使用Socket库发送给客户端。

  1. 制作客户端:

在客户端需要先连接到服务器,代码如下:

import socket  # 导入Socket库

# 连接服务器
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.connect(('服务器IP地址', 8888))

通过上述代码,可以使用Socket库连接到服务器,并通过指定服务器的IP地址和端口号进行连接。

在连接到服务器之后,可以从服务器接收图片数据,并在本地显示。代码如下:

import cv2  # 导入OpenCV库
import numpy as np

# 从服务器接收图片数据
data = b""
payload_size = struct.calcsize(">L")
while len(data) < payload_size:
    data += server_socket.recv(4096)
packed_msg_size = data[:payload_size]
data = data[payload_size:]
msg_size = struct.unpack(">L", packed_msg_size)[0]
while len(data) < msg_size:
    data += server_socket.recv(4096)
img_data = data[:msg_size]

# 将bytes类型的数据转换成OpenCV中的Mat类型
nparr = np.frombuffer(img_data, np.uint8)
img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)

# 显示图像
cv2.imshow("Image", img)
cv2.waitKey()

通过上述代码,可以使用Socket库从服务器接收到编码后的图片数据,将之解码成OpenCV中的Mat类型,最终在图像窗口显示图片。

三、示例说明

  1. 示例1:实现同一局域网下的摄像头监控并传输数据

在此示例中,需要在服务器端连接摄像头,并实时捕获摄像头拍摄的图像,并使用Socket库将图像数据传输给客户端。代码如下:

服务器端:

import cv2  # 导入OpenCV库
import socket  # 导入Socket库

# 创建一个服务器
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind(('0.0.0.0', 8888))
server_socket.listen(5)
client_socket, addr = server_socket.accept()

# 打开摄像头
cap = cv2.VideoCapture(0)

while True:
    # 读取摄像头数据
    ret, frame = cap.read()

    # 将frame编码成bytes类型,并发送给客户端
    frame_bytes = cv2.imencode('.jpg', frame)[1].tobytes()
    client_socket.sendall(np.array([len(frame_bytes)]).astype(np.int32).tobytes())
    client_socket.sendall(frame_bytes)

    # 显示图像
    cv2.imshow("Image", frame)
    cv2.waitKey(1)

客户端:

import cv2  # 导入OpenCV库
import numpy as np
import socket  # 导入Socket库

# 连接服务器
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.connect(('服务器IP地址', 8888))

while True:
    # 从服务器接收图片数据
    data = b""
    payload_size = 8
    while len(data) < payload_size:
        data += server_socket.recv(4096)
    packed_msg_size = data[:payload_size]
    data = data[payload_size:]
    msg_size = struct.unpack(">L", packed_msg_size)[0]
    while len(data) < msg_size:
        data += server_socket.recv(4096)
    frame_data = data[:msg_size]

    # 将bytes类型的数据转换成OpenCV中的Mat类型
    nparr = np.frombuffer(frame_data, np.uint8)
    frame = cv2.imdecode(nparr, cv2.IMREAD_COLOR)

    # 显示图像
    cv2.imshow("Image", frame)
    cv2.waitKey(1)

通过上述代码,在服务器端启动摄像头并开始捕获摄像头数据后,客户端可以接收到并显示摄像头数据。

  1. 示例2:实现同一局域网下的图片传输

在此示例中,需要在服务器端指定需要传输的图片,并使用Socket库传输图片数据给客户端。代码如下:

服务器端:

import cv2  # 导入OpenCV库
import socket  # 导入Socket库

# 创建一个服务器
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind(('0.0.0.0', 8888))
server_socket.listen(5)
client_socket, addr = server_socket.accept()

# 加载图片
img = cv2.imread('img.jpg', cv2.IMREAD_COLOR)

# 显示图片
cv2.imshow("Image", img)
cv2.waitKey()

# 将图片编码成bytes类型,并发送给客户端
img_bytes = cv2.imencode('.jpg', img)[1].tobytes()
client_socket.sendall(np.array([len(img_bytes)]).astype(np.int32).tobytes())
client_socket.sendall(img_bytes)

客户端:

import cv2  # 导入OpenCV库
import numpy as np
import socket  # 导入Socket库

# 连接服务器
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.connect(('服务器IP地址', 8888))

# 从服务器接收图片数据
data = b""
payload_size = 8
while len(data) < payload_size:
    data += server_socket.recv(4096)
packed_msg_size = data[:payload_size]
data = data[payload_size:]
msg_size = struct.unpack(">L", packed_msg_size)[0]
while len(data) < msg_size:
    data += server_socket.recv(4096)
img_data = data[:msg_size]

# 将bytes类型的数据转换成OpenCV中的Mat类型
nparr = np.frombuffer(img_data, np.uint8)
img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)

# 显示图像
cv2.imshow("Image", img)
cv2.waitKey()

通过上述代码,在服务器端指定需要传输的图片后,客户端可以接收到并显示图片数据。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现同一局域网下传输图片 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • Django实现WebSSH操作物理机或虚拟机的方法

    下面将为你详细介绍如何使用Django实现WebSSH操作物理机或虚拟机的完整攻略。 1. 概述 WebSSH是一种通过Web界面远程访问SSH终端的工具。它可以让用户通过Web浏览器登录SSH终端,而不需要使用客户端。 Django是一个基于Python的Web应用程序框架,它可以轻松地用于WebSSH工具的开发。使用Django可以使我们更加轻松地创建W…

    人工智能概论 2023年5月25日
    00
  • Centos7 安装部署Kubernetes(k8s)集群实现过程

    Centos7 安装部署Kubernetes(k8s)集群实现过程 Kubernetes(k8s) 是一个强大的容器编排工具,可以用于构建和管理现代化的云原生应用。 在本篇文章中,我们将讲述如何在Centos7上部署Kubernetes(k8s)集群的实现过程。 环境准备 在部署Kubernetes(k8s)集群之前,需要进行以下准备工作: 在所有节点上安装…

    人工智能概览 2023年5月25日
    00
  • 混淆矩阵Confusion Matrix概念分析翻译

    混淆矩阵(Confusion Matrix)概念分析翻译 混淆矩阵,也称为误差矩阵(Error Matrix),是机器学习中经常用于评估分类模型性能的矩阵。它可以展示模型在测试集上的分类结果与实际情况的对比情况,从而帮助我们了解模型的分类性能。 混淆矩阵通常由以下四个分类指标组成:真阳性(True Positive,TP)、假阳性(False Positiv…

    人工智能概览 2023年5月25日
    00
  • media配置及把用户头像从数据库展示到前端的操作方法

    下面我将为您详细讲解“media配置及把用户头像从数据库展示到前端的操作方法”的完整攻略。 1. 配置media文件夹 首先,在Django项目的settings.py文件中,找到MEDIA_URL和MEDIA_ROOT两个变量,这两个变量的作用是定义媒体文件的url和本地路径。如果您还没有设置,可以按照如下方式设置: MEDIA_URL = ‘/media…

    人工智能概览 2023年5月25日
    00
  • python性能检测工具函数运行内存及运行时间

    一、Python性能检测工具简介 Python 是一种高级动态编程语言,速度比起传统的编译语言稍慢,但是 Python 和众多的优秀标准库、框架,被广泛地用于开发各式各样的应用。 Python 应用广泛,某些应用甚至会需要大量数据的处理,此时需要注意 Python 的运行效率,以免造成内存泄漏(Memory Leak)或超时(Time Out)等问题。因此,…

    人工智能概论 2023年5月25日
    00
  • java如何用Processing生成马赛克风格的图像

    下面是关于“Java如何用Processing生成马赛克风格的图像”的完整攻略: 1. 确认环境 在做这个案例前,需要先确认自己的开发环境是否搭建好了Processing。如果还没有,则需要先到Processing官网上下载最新的版本,并安装好。 2. 导入图像 首先,需要在Processing中导入一张待处理的图像,使用的函数是loadImage()。示例…

    人工智能概论 2023年5月25日
    00
  • pytorch方法测试详解——归一化(BatchNorm2d)

    PyTorch方法测试详解——归一化(BatchNorm2d) 在深度学习中,数据归一化是一个非常重要的步骤。BatchNorm2d是PyTorch中用来做归一化的方法。下面将详细讲解BatchNorm2d的使用方法。 1. BatchNorm2d的使用方法 BatchNorm2d的主要作用是对数据进行归一化处理。在PyTorch中,使用BatchNorm2…

    人工智能概论 2023年5月25日
    00
  • tensorflow转换ckpt为savermodel模型的实现

    TensorFlow是一个强大的深度学习框架,其中包含了许多常用的工具和功能,其中转换 ckpt 文件为 saver 模型就是一个很常见的需求,下面是这个过程的完整攻略。 步骤一:加载 ckpt 模型文件 要加载 ckpt 模型文件,你需要在代码中初始化 Graph 和 Session。可以使用 tf.train.import_meta_graph() 函数…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部