Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过requests.post向API发送numpy数组(实际上是图像)的最佳方式(性能)是什么?(python)_Python_Image_Numpy_Opencv_Request - Fatal编程技术网

通过requests.post向API发送numpy数组(实际上是图像)的最佳方式(性能)是什么?(python)

通过requests.post向API发送numpy数组(实际上是图像)的最佳方式(性能)是什么?(python),python,image,numpy,opencv,request,Python,Image,Numpy,Opencv,Request,我想知道如何通过请求的post方法发送三维numpy数组;如果可能,如何压缩这些数据。 最好的办法是: 数据量更小 更少的图书馆 减少计算时间 你想要什么。。 我看到了这样的模式: 以文件形式发送: requests.postapi_url,files={'image':openimg_路径,'rb'} 以编码数组的形式发送: image\u np是一个numpy数组 _,img_encoded=cv2.imencode'.jpg',image\u np requests.postapi_url

我想知道如何通过请求的post方法发送三维numpy数组;如果可能,如何压缩这些数据。 最好的办法是:

数据量更小 更少的图书馆 减少计算时间 你想要什么。。 我看到了这样的模式:

以文件形式发送:

requests.postapi_url,files={'image':openimg_路径,'rb'} 以编码数组的形式发送:

image\u np是一个numpy数组 _,img_encoded=cv2.imencode'.jpg',image\u np requests.postapi_url,data=img_encoded.tobytes 作为缓冲区发送:

buf=io.BytesIO plt.imsavebuf,图像\u np,格式='jpg' image\u data=buf.getvalue requests.postapi\u url,data=image\u数据 以字符串base64发送:

使用openimg_路径,“rb”作为fp: img_encoded=strb64encodefp.read r=requests.postapi_url,json={'image':img_encoded}
首先,不可能有一个完美的方法将以下三个因素最小化:

数据量更小 更少的图书馆 减少计算时间 可能会有一些折衷,我可以解释每种方法的折衷,让您对每种方法有一个清晰的理解,但这在很大程度上取决于用例,以在所做的折衷中找到完美的最佳点

我将放弃这里的少库部分,因为您已经在压缩JPG格式的图像,这意味着您正在内部使用libJPEG。JPG确实提供了相当不错的压缩率,所以我们将只使用JPEG格式

数据量更小 为了减少有效载荷,我们可以尝试以下方法:

减少图像尺寸,这可以大幅减少图像大小,但您必须找到合适的阈值,在该阈值中,随着图像大小的减小,对象检测精度会大大降低。对计算时间的影响最小 其次,您可以尝试减少RGB域的基本下采样颜色。虽然JPEG已经为您提供了这些功能,但它试图保留大部分颜色信息。如果处理255、255、255和255、255、250不会影响对象检测模型的准确性,则可以使用intcolor/5*5对图像颜色域进行下采样。对计算时间的影响最小 最后一件我们可以尝试的事情是完全丢弃颜色。并使用灰度图像代替RGB颜色。这还取决于您的对象检测模型,无论它是对颜色数据敏感还是只需要灰度信息。对计算时间的适度影响
发送数据的原因是什么?它只是为了存储,还是服务器将对数据进行某种处理?如果是这样,服务器是否安装了numpy,您是否打算将其用于处理?是的,目前,在服务器上使用对象检测模型处理图像的原因,这就是为什么我想找到一种快速发送图像的方法在这种情况下,将数据保存为二进制文件,发布文件,并将二进制数据加载到服务器端的numpy中。除了上面的base64选项之外,在所有情况下都是这样做的,您只需要决定使用哪种文件格式。这只是一个序列化问题,文件是否被发送到web API并不重要。