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)