如何将字节数组中的图像发送到从android到具有Flask的python的url [重复]

Posted

技术标签:

【中文标题】如何将字节数组中的图像发送到从android到具有Flask的python的url [重复]【英文标题】:how to send image in bytes array to a url from android to python having Flask [duplicate] 【发布时间】:2019-11-05 22:49:51 【问题描述】:

我不想使用 url 将图像从 android 发送到 python jupyter notebook,即 HTTPpost 作为 json 对象。我有烧瓶代码,该图像将被预测并返回该图像的标签,我还想将结果发送回 android。

我尝试先将图像编码为位图,然后编码为字节数组并将其作为字符串 json 对象发送。但我不知道如何在 python 中接收该图像

python 文件:

    from flask import Flask
    from flask import request

    app = Flask(__name__)

    @app.route('/')
    def index():

        return "Welcome to Contact Less PALM Authentication"

    @app.route('/authenticate',methods = ['POST', 'GET'])
    def authenticate():
        #image_name = request.args.get('image_name')
        json_string=request.get_json()
        print("JSON String "+str(json_string))

        #path = test_path + "/"+image_name
        #img= image.load_img(path, target_size=image_size)
        #x = image.img_to_array(img)

        return "JSON String "+str(json_string) #+ predict_label(x)

        if __name__ == '__main__':
        app.run(host='0.0.0.0')

安卓代码:

    private JSONObject buidJsonObject() throws JSONException 

            JSONObject jsonObject = new JSONObject();
                    Bitmap bitmap =((BitmapDrawable)user_img.getDrawable()).getBitmap();
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
            byte[] imageInByte = baos.toByteArray();
            String img_array = Base64.encodeToString(imageInByte, Base64.DEFAULT);
           // String img_array = new String(imageInByte);
            try 
                baos.close();
            
            catch (IOException e)
            
                e.printStackTrace();
            
            jsonObject.accumulate("image_Array",img_array);

            return jsonObject;
        

【问题讨论】:

【参考方案1】:

在您的 Android 代码中发送图片

图像编码后,通过 POST 请求发送。我不是很了解java,但是你可以看看this answer。

在您的 Flask 服务器中接收图像

收到post请求后,使用库base64中的函数decode('base64')。然后,您可以将图像保存在您的服务器上。

base64 字符串只包含文件的内容,不包含元数据。如果你想要服务器上的文件名,你必须通过其他参数发送它。

import base64

@app.route('/authenticate',methods = ['POST', 'GET'])
def authenticate():
    encodedImg = request.form['file'] # 'file' is the name of the parameter you used to send the image

    imgdata = base64.b64decode(encodedImg)

    filename = 'image.jpg'  # choose a filename. You can send it via the request in an other variable
    with open(filename, 'wb') as f:
        f.write(imgdata)

【讨论】:

以上是关于如何将字节数组中的图像发送到从android到具有Flask的python的url [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将带有图像的字节数组从 AS3 发送到 PHP?

将html转换为字节数组java中的图像

在 C# 中将 Base64 字节数组解码为图像

从 Android 中的 Web 服务中恢复 base64 图像

如何将从 C++ 发送的 cv::MAT 字节数组转换为 Java 中的位图?

如何制作一个数组以将数据发送到 AVR 中的从机