代码拉取完成,页面将自动刷新
<img alt="主界面">
<img alt="标注界面">
由于原始项目代码结构很乱,也不方便修改。此处做个总结记录,方便他人快速上手。用“深度处理->目标检测->SSD模型”做例子
QAction *Act_Detect_SSD = new QAction(tr("SSD模型"), this); // 菜单项
connect(Act_Detect_SSD, SIGNAL(triggered()), I_MainWindow, SLOT(deep_detect_ssd())); // 绑定点击菜单项的信号槽, deep_detect_ssd函数就是点击该项去执行的槽函数
// 菜单项添加到一级菜单中
menu_deep_detect = new QMenu(); // 此处为头文件中定义的指针,用来添加最后一级的菜单项,比如“SSD模型”、“YOLO模型”等
QAction *Act_detects = new QAction(tr("目标检测"), this);
//action添加menu 当且仅当菜单项有子选项时,才需要setMenu
Act_detects->setMenu(menu_deep_detect);
// “目标检测”将一级菜单项“SSD模型”添加进来
menu_deep_detect->addAction(Act_Detect_SSD);
QMenu *deep = addMenu(tr("深度处理"));
deep->addAction(Act_detects);
DeepProcess *ssd;
ssd = new DeepProcess("ssd", "detect/ssd", this);// detect/ssd为服务器端的ssd方法的url
QImage current = imgLabel->getImage(); // 此处使用此方法获取当前图像
connect(ssd, SIGNAL(responseImage(QImage, QString)), this, SLOT(process_response(QImage, QString)));
ssd->post(current, "hello"); // "hello"是方法提供的额外参数,可以扩展为 向服务器发送的客户机id、密钥等信息,供服务器验证
import cv2
import base64
import numpy as np
def cv2_base64(image):
base64_str = cv2.imencode('.jpg', image)[1].tostring()
base64_str = base64.b64encode(base64_str)
return str(base64_str).lstrip("b'")
##base64转cv2
def base64_cv2(base64_str):
imgString = base64.b64decode(base64_str)
nparr = np.fromstring(imgString, np.uint8)
image = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
return image
from flask import Flask, jsonify, request
import utils
import cv2
app = Flask(__name__)
@app.route("/detect/ssd", methods=['POST'])
def ssd():
data = request.json
img = data['image'] # 获取post过来的图像和msg信息
msg = data['msg']
try:
# 将图像转化
image = utils.base64_cv2(img)
# 模型处理
image = ssd(image) # 返回的应该是cv2 ndarrray的图像
# 将结果返回
return jsonify({"image": utils.cv2_base64(image), "msg": "OK", "code": 200})
except Exception as e:
print(e)
return jsonify({"code": 500, "msg": str(e)})
if __name__ == '__main__':
app.run(debug=True)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。