我正在嘗試通過套接字從我的客戶端向服務器發送一個幀。當影像的路徑是明確的時,我的代碼有效。但是,我以字串形式接收影像并對其進行解碼。我想將影像作為檔案發送到我的服務器。
這是客戶端代碼:
import numpy as np
import cv2
from PIL import Image
import base64
import socket
import pickle
import struct
import io
def main(data):
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('192.168.0.14', 9999))
BUFFER_SIZE = 4096*4
decoded_data = base64.b64decode(data)
np_data = np.fromstring(decoded_data, np.uint8)
img = cv2.imdecode(np_data, cv2.IMREAD_UNCHANGED)
with open(img, 'rb') as file:
file_data = file.read(BUFFER_SIZE)
while file_data:
client.send(file_data)
file_data = file.read(BUFFER_SIZE)
我試圖將影像作為引數傳遞給打開,但是沒有回傳影像。我在 java 上運行 chaquopy 腳本,給出的錯誤是:
TypeError: expected str, bytes or os.PathLike object, not numpy.ndarray
at <python>.script.main
以及接收影像的服務器:
import socket
import time
date_string = time.strftime("%Y-%m-%d-%H:%M")
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('192.168.0.14', 9999))
server.listen()
BUFFER_SIZE = 4096*4
while True:
client_socket, _ = server.accept()
with open('frames_saved/' date_string '.jpeg', 'wb') as file:
recv_data = client_socket.recv(BUFFER_SIZE)
while recv_data:
file.write(recv_data)
recv_data = client_socket.recv(BUFFER_SIZE)
uj5u.com熱心網友回復:
如果decoded_data已經是一個完整的影像檔案,那么我不明白你為什么需要使用 NumPy 或 OpenCV。直接將其發送到套接字即可:
decoded_data = base64.b64decode(data)
client.send(decoded_data)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/371395.html
