[英]What is the best way (performance) to send an numpy array (an image actually) by requests.post to an API? (python)
我想知道如何通过请求的 post 方法发送一个 3 维 numpy 数组; 如果可能的话,如何压缩这些数据。 最好的方法可能是:
我见过这种模式:
作为文件发送:
requests.post(api_url, files={'image': open(img_path, 'rb')})
作为编码数组发送:
# image_np is a numpy array
_, img_encoded = cv2.imencode('.jpg', image_np)
requests.post(api_url, data=img_encoded.tobytes())
作为缓冲区发送:
buf = io.BytesIO()
plt.imsave(buf, image_np, format='jpg')
image_data = buf.getvalue()
requests.post(api_url, data=image_data)
作为字符串 base64 发送:
with open(img_path, 'rb') as fp:
img_encoded = str(b64encode(fp.read()))
r = requests.post(api_url, json={'image': img_encoded})
首先,不会有完美的方法来最小化以下所有三个因素:
会有一些权衡,我可以解释每种方法的权衡,以便让您清楚地了解每种方法,但是在所做的权衡中找到完美的最佳点在很大程度上取决于用例。
我将在这里丢弃较少的库部分,因为您已经以 JPG 格式压缩图像,这隐含地意味着您在内部使用 libJPEG。 并且 JPG 确实提供了相当不错的压缩率,因此我们将仅使用 JPEG 格式的 go。
要减少有效负载,我们可以尝试以下操作:
int(color/5)*5
对图像颜色域进行下采样。 对计算时间的影响最小
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.