python flask 传输图片数据

python flask 传输图片数据

1、img传输

## app
import requests
import base64
## 本地读取图片编码进行传递
with open('./44011A0017200303.jpg', 'rb') as f:
        # image_bytes = f.read() # <class 'bytes'>
        image_bytes = base64.b64encode(f.read()) # <class 'bytes'>
        image_bytes = image_bytes.decode('ascii')# <class 'str'>
img = image_bytes

# 将img写入data字典,然后请求服务
data = {'projectID':projectID, 'img':img, 'unit_width':unit_width,
        'unit_height':unit_height, 'num_classes':num_classes}
resp = requests.post("http://127.0.0.1:5005/stream_predict", data=data)

# server
@app.route('/stream_predict', methods=['POST'])
def img_infer():
    if request.method == 'POST':
    
       img = request.form.get('img') #接收到img数据
		#一步步转化为 numpy格式
       img = base64.b64decode(img.encode('ascii'))
       image_data = np.frombuffer(img, np.uint8)
       image_data = cv2.imdecode(image_data, cv2.IMREAD_GRAYSCALE)
       ori_img_array = image_data # <class 'numpy.ndarray'>
# 当直接请求服务得到img数据时
## app:
response = requests.get("http://10.130.14.58:16024/autoExtract/downloadImg", {"projectId": "1001120020200110"})
img = response.text  # <class 'str'>
data = {'projectID':projectID, 'img':img, 'unit_width':unit_width,
        'unit_height':unit_height, 'num_classes':num_classes}
resp = requests.post("http://127.0.0.1:5005/stream_predict", data=data)

## server:
img = request.form.get('img')
img = base64.b64decode(img.encode('ascii'))
image_data = np.frombuffer(img, np.uint8)
image_data = cv2.imdecode(image_data, cv2.IMREAD_GRAYSCALE) ori_img_array = image_data # <class 'numpy.ndarray'>

2、完整flask代码

client:

import requests
import os
import base64
import cv2
import json
import numpy as np

## 本地读取图片编码进行传递
# with open('./44011A0017200303.jpg', 'rb') as f:
#         # image_bytes = f.read()
#         image_bytes = base64.b64encode(f.read())
#         image_bytes = image_bytes.decode('ascii')
# img = image_bytes

response = requests.get("http://10.130.14.58:16024/autoExtract/downloadImg", {"projectId": "1001120020200110"})
img = response.text

projectID = 'projectID_1'
unit_width = 1536
unit_height = 1536
num_classes = 2
data = {'projectID':projectID, 'img':img, 'unit_width':unit_width,
        'unit_height':unit_height, 'num_classes':num_classes}
resp = requests.post("http://127.0.0.1:5005/stream_predict", data=data)

print(resp.text)

server:

# -*- coding: utf-8 -*-
from flask import Flask, jsonify, request
from PIL import Image
import base64
import numpy as np
import os
import cv2
from img_crop import img_crop
from img_splice import img_splice
from json_generate import img2json,json2img
Image.MAX_IMAGE_PIXELS = None

app = Flask(__name__)

@app.route('/stream_predict', methods=['POST'])
def img_infer():
    if request.method == 'POST':
       projectID = request.form.get('projectID')
       img = request.form.get('img')
       unit_width = int(request.form.get('unit_width'))
       unit_height = int(request.form.get('unit_height'))
       num_classes = int(request.form.get('num_classes'))

       img = base64.b64decode(img.encode('ascii'))
       image_data = np.frombuffer(img, np.uint8)
       image_data = cv2.imdecode(image_data, cv2.IMREAD_GRAYSCALE)
       ori_img_array = image_data
       print(type(ori_img_array))
       print('img_shape: ', ori_img_array.shape)

       print('step1: *****img-crop doing******')
       img_crop(ori_img_array, projectID, unit_width, unit_height)
       print('step1: *****img-crop done******')

       print('step2: *****infer doing******')
       print('step2: *****infer done******')

       print('step3: *****img-splice doing******')
       img_merge = img_splice(projectID, unit_width, unit_height)
       print('step3: *****img-splice done******')

       print('step4: *****json-gener doing******')
       img2json(img_merge, num_classes, projectID, unit_width, unit_height)
       print('step4: *****json-gener done******')

       print('step5: *****json2img doing******')
       json2img(projectID, 15360, 13824)  # (w,h)
       print('step5: *****json2img done******')
    return 'done'

if __name__ == "__main__":
    # app.run(host="172.23.132.130", port=5005)
    # app.run(host="0.0.0.0", port=5005)
    app.run(host="127.0.0.1", port=5005)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值