赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
最近在做项目的时候遇到了如下场景:C++编写的图像识别程序已经通过测试,需要编写一个python程序来调用C++程序,并且需要暴露一个接口给终端,response直接返回识别后的图像。
提示:以下是本篇文章正文内容,下面案例可供参考
思路:直接利用flask写接口,先写一个接口测试调用C++程序是否有正常返回,再写一个接口将图片转base64并放入responseBody中。
代码如下:
import base64
import io
import subprocess
from subprocess import PIPE
from flask import *
import cv2
app = Flask(__name__, template_folder="templates", static_folder="static")
app.config["SECRET_KEY"] = 'TPmi4aLWRbyVq8zu9v82dWYW1'
@app.route('/meterRead', methods=['POST', 'GET'])
def meter_read():
# t = GetSellThread()
# t.start()
a = "det_model.xml"
b = "seg_model.xml"
c = request.args.get("imgPath")
d = request.args.get("unit")
e = "60.0"
# ./meter_reader det_model.xml seg_model.xml ../data/m15.jpg 2.0 60.0
s = subprocess.run(["./meter_reader", a, b, c, d, e], stdout=PIPE)
print(s)
return s.stdout.decode("utf-8")
@app.route('/resultImg')
def meter_img():
a = "det_model.xml"
b = "seg_model.xml"
c = request.args.get("imgPath")
d = request.args.get("unit")
e = "60.0"
# ./meter_reader det_model.xml seg_model.xml ../data/m15.jpg 2.0 60.0
s = subprocess.run(["./meter_reader", a, b, c, d, e], stdout=PIPE)
print(s)
# image = cv2.imread("./results.jpg")
# resp = make_response(image)
# byte_stream = io.BytesIO(image)
base64img = get_picture_base64_data("./results.jpg")
resp = make_response(base64img)
# resp.headers['Content-Type'] = 'image/jpeg'
return resp
def get_picture_base64_data(image_path):
with open(image_path, 'rb') as img_obj:
base64_data = base64.b64encode(img_obj.read())
return base64_data
if __name__ == '__main__':
app.run(threaded=False, debug=True, port=8000, host="0.0.0.0")
模拟终端输入参数,并将其填入param中,编写一下js脚本写入Tests中:
// 将接口返回数据,封装成自己需要的结构
var data = {
response: pm.response.body
}
// html 模板字符
var template = `<html><img src="data:image/jpg;base64,{{response}}" /></html>`;
// 设置 visualizer 数据。传模板、解析对象。
pm.visualizer.set(template, data);
点击Send,执行效果如下:
1.调用C++程序需要使用subprocess.run([“./meter_reader”, a, b, c, d, e], stdout=PIPE)这种拼接语句写法。
2.图片传输形式要想好是字节流还是base64的形式,并有对应的encode和decode方法。
3.数据放入response之后,要知道所需数据在其中的那个部分,header还是body,body是json形式的还是直接编码形式的。在写postman的tests脚本时,要注意data中为需要转换的直接内容,要搞清楚是response.json.xx还是response.body,template中标签渲染的内容为data中取名内容。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。