python Http服务,传输base64图片

使用flask可以制作自己的http服务,前端post发送request访问请求,同过base64编码图片传输至服务器端进行处理:图像检测识别等。

图像base64编码解码代码:

import base64
###np 图片编码成base64形式
def image_to_base64(image_mat):
    image = cv2.imencode('.jpg', image_mat)[1]
    image_code = str(base64.b64encode(image), 'utf-8')
    return image_code
###base64图片解码成numpy图
def base64_to_image(imgBase64):
    img_data = base64.b64decode(imgBase64)
    bs = np.asarray(bytearray(img_data), dtype='uint8')
    img = cv2.imdecode(bs, cv2.IMREAD_COLOR)
    return img

Http服务端代码:

from tqdm import tqdm
import requests
import sys
import base64
import numpy as np
import cv2,os
from flask import Flask, request
import argparse
import json

app = Flask(__name__)


class RestHelper(object):
    def __init__(self, data, id):
        self.data = data
        self.id = id
    def toJson(self):
        return {'status': '1', 'data': self.data, 'taskId':self.id}
    def failure(self):
        return {'status': '0','data': self.data, 'taskId':self.id}
    def error(self):
        return {'status': '0','data': self.data, 'taskId':self.id}

class dataEnconding(json.JSONEncoder):
    def default(self, o):
        #if isnumber(o):
        #    return str(o)
        if isinstance(o, float):
            return str(float(o))
        if isinstance(o, int):
            return str(o)

def proc(img):
    pass

@app.route('/my_service', methods=["POST"])
def my_service():
    print("------------my_service start----------------")
    data = request.json
    ####接收到的信息
    print("Request dict data key is: \n", data.keys(), type(data))
    img = data["base64Img"]
    ##process img now-----
    proc(img)
    ###process down
    taskId=data["taskId"]
    ##服务返回结果信息------
    q = RestHelper({"respose": "hello world!"}, id=taskId).toJson()
    return json.dumps(q, cls=dataEnconding)
 
def parse_args():
    parser = argparse.ArgumentParser(description='start service')
    parser.add_argument('--port', '-p', default='4444', help='port')
    parser.add_argument('--config', '-c', default='./iniFile/ini.cfg', help='rabbitMQ info')
    args = parser.parse_args()
    return args

if __name__ == '__main__':
    args = parse_args()
    port = args.port
    print(port)
    app.run(debug=False, host='0.0.0.0', port=port, threaded=False, processes=8)

发送访问请求:

from urllib import request, parse
import requests
import base64
import json
from urllib.request import urlretrieve
import os
import cv2
import base64
import numpy as np
import time


def image_to_base64(image_mat):
    image = cv2.imencode('.jpg', image_mat)[1]
    image_code = str(base64.b64encode(image), 'utf-8')
    return image_code

if __name__ == '__main__':
    url = "http://127.0.0.1:4444/my_service"

    testImgp = "imgs/1.jpg"
    img = cv2,imread(testImgp)
    headers = {'content-type': "application/json"}

    data = {
        "taskId": 10086, 
        "base64Img":image_to_base64(img )
    }
   
    response = requests.post(url, json=json.loads(json.dumps(data)), headers=headers)
    if response:
        result = json.loads(str(response.content, 'utf-8'))
        print(result)

也可以从headers中传入某些key value,在服务端使用request.headers.get(yourKEY)获取到

比如发送头

headers = {'content-type': "application/json", "taskId": taskId}

接受时候采用下面get key形式获取到值:

ID = str(request.headers.get('taskId'))

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_21331593

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值