CN_016 2023-07-02 14:27 采纳率: 0%
浏览 17

python对象的赋值缓慢


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通信,通信,编解码几乎不耗时
就是不知道为什么那中间要隔这么久

img

  • 写回答

1条回答 默认 最新

  • Nick Peng 2023-07-02 22:13
    关注

    这个time.time输出的是时间戳,不是代码执行的时间

    img

    评论

报告相同问题?

问题事件

  • 创建了问题 7月2日

悬赏问题

  • ¥20 指导如何跑通以下两个Github代码
  • ¥15 大家知道这个后备文件怎么删吗,为啥这些文件我只看到一份,没有后备呀
  • ¥15 C++为什么这个代码没报错运行不出来啊
  • ¥15 一道ban了很多东西的pyjail题
  • ¥15 关于#r语言#的问题:如何将生成的四幅图排在一起,且对变量的赋值进行更改,让组合的图漂亮、美观@(相关搜索:森林图)
  • ¥15 C++识别堆叠物体异常
  • ¥15 微软硬件驱动认证账号申请
  • ¥15 GPT写作提示指令词
  • ¥20 根据动态演化博弈支付矩阵完成复制动态方程求解和演化相图分析等
  • ¥15 华为超融合部署环境下RedHat虚拟机分区扩容问题