import socket
import time
import info
HOST = '127.0.0.1' # 监听的地址
PORT = 8888 # 监听的端口号
# 创建套接字并监听
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((HOST, PORT))
server_socket.listen(1)
while True:
try:
# 等待客户端连接
print('Waiting for Java client...')
client_socket, address = server_socket.accept()
print('Connected by', address)
client_socket.settimeout(0.5)
# 接收Java客户端发送的数据并返回
result = ""
while True:
data = client_socket.recv(1024)
if len(data) < 1024:
break
result += data.decode()
print('Received from Java client' + str(time.time()))
result1 = info.fun(result)
print("encode" + str(time.time()))
result1 = result1.encode()
print("send" + str(time.time()))
client_socket.send(result1)
print("done" + str(time.time()))
client_socket.close()
except Exception as err:
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((HOST, PORT))
server_socket.listen(1)
continue
import time
from visionUtils.videoDemo import vinoModel
import base64
from PIL import Image, ImageFile
import numpy as np
from io import BytesIO
ImageFile.LOAD_TRUNCATED_IMAGES = True
def decoder(image_data):
# 对字节数据进行解码
decoded_image_data = base64.b64decode(image_data)
image = Image.open(BytesIO(decoded_image_data))
img_np = np.array(image)
# image.show()
return img_np
def encoder(det_img):
image = Image.fromarray(det_img)
# 将PIL Image对象转换为字节数据
buffer = BytesIO()
image.save(buffer, format='JPEG')
image_data = buffer.getvalue()
# 将字节数据编码为base64字符串
base64_image_data = base64.b64encode(image_data).decode('utf-8')
return base64_image_data
def fun(data):
## 用openvino加速
model_path = 'visionUtils/data/onnx/yolop-384-640.onnx'
detector = vinoModel(model_path)
## 更精确的模型但是没有加速
# model_path='visionUtils/data/weights/yolopv2.pt'
# detector = detectModel(model_path)
# base64转图片
image_data = data
img = decoder(image_data)
print("det_img = detector(img)" + str(time.time()))
# 用模型处理图片
det_img = detector(img) # return detect result
print("after_det_img = detector(img)" + str(time.time()))
# 图片转base64
base64_img = encoder(det_img)
print("base" + str(time.time()))
return base64_img
输出:
Waiting for Java client...
Connected by ('127.0.0.1', 50083)
Received from Java client1688277171.867513
det_img = detector(img)1688277172.934858
inf : (0.1666s/frame) nms : (0.0010s/frame)
after_det_img = detector(img)1688277173.2231426
base1688277173.2291653
encode1688277187.638751
send1688277187.638751
done1688277187.638751
Waiting for Java client...
Connected by ('127.0.0.1', 50085)
Received from Java client1688277187.6485023
det_img = detector(img)1688277188.7829428
inf : (0.1550s/frame) nms : (0.0010s/frame)
after_det_img = detector(img)1688277189.0648327
base1688277189.0708199
encode1688277203.6613748
send1688277203.6613748
done1688277203.6613748
Waiting for Java client...
Connected by ('127.0.0.1', 50087)
Received from Java client1688277203.669413
det_img = detector(img)1688277204.7575696
inf : (0.1895s/frame) nms : (0.0010s/frame)
after_det_img = detector(img)1688277205.0817413
base1688277205.0887675
encode1688277224.2824495
send1688277224.2824495
done1688277224.2824495
python进行图像处理,Java把图片base64编码后发给python,python处理好后发给Java,两个平台用socket通信,通信,编解码几乎不耗时
就是不知道为什么那中间要隔这么久