添加模型分割
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
#include "net/ModelServerClient.h"
|
||||
|
||||
#include <QEventLoop>
|
||||
#include <QJsonArray>
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonObject>
|
||||
#include <QNetworkAccessManager>
|
||||
@@ -49,6 +50,43 @@ QNetworkReply* ModelServerClient::computeDepthPng8Async(const QByteArray& imageB
|
||||
return m_nam->post(req, body);
|
||||
}
|
||||
|
||||
QNetworkReply* ModelServerClient::segmentSamPromptAsync(
|
||||
const QByteArray& cropRgbPngBytes,
|
||||
const QByteArray& overlayPngBytes,
|
||||
const QJsonArray& pointCoords,
|
||||
const QJsonArray& pointLabels,
|
||||
const QJsonArray& boxXyxy,
|
||||
QString* outImmediateError
|
||||
) {
|
||||
if (outImmediateError) {
|
||||
outImmediateError->clear();
|
||||
}
|
||||
if (!m_baseUrl.isValid() || m_baseUrl.isEmpty()) {
|
||||
if (outImmediateError) *outImmediateError = QStringLiteral("后端地址无效。");
|
||||
return nullptr;
|
||||
}
|
||||
if (cropRgbPngBytes.isEmpty()) {
|
||||
if (outImmediateError) *outImmediateError = QStringLiteral("裁剪图像为空。");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const QUrl url = m_baseUrl.resolved(QUrl(QStringLiteral("/segment/sam_prompt")));
|
||||
QNetworkRequest req(url);
|
||||
req.setHeader(QNetworkRequest::ContentTypeHeader, QStringLiteral("application/json"));
|
||||
|
||||
QJsonObject payload;
|
||||
payload.insert(QStringLiteral("image_b64"), QString::fromLatin1(cropRgbPngBytes.toBase64()));
|
||||
if (!overlayPngBytes.isEmpty()) {
|
||||
payload.insert(QStringLiteral("overlay_b64"), QString::fromLatin1(overlayPngBytes.toBase64()));
|
||||
}
|
||||
payload.insert(QStringLiteral("point_coords"), pointCoords);
|
||||
payload.insert(QStringLiteral("point_labels"), pointLabels);
|
||||
payload.insert(QStringLiteral("box_xyxy"), boxXyxy);
|
||||
|
||||
const QByteArray body = QJsonDocument(payload).toJson(QJsonDocument::Compact);
|
||||
return m_nam->post(req, body);
|
||||
}
|
||||
|
||||
bool ModelServerClient::computeDepthPng8(
|
||||
const QByteArray& imageBytes,
|
||||
QByteArray& outPngBytes,
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <QByteArray>
|
||||
#include <QJsonArray>
|
||||
#include <QObject>
|
||||
#include <QString>
|
||||
#include <QUrl>
|
||||
@@ -27,6 +28,15 @@ public:
|
||||
// 返回 nullptr 表示参数/URL 非法导致无法发起。
|
||||
QNetworkReply* computeDepthPng8Async(const QByteArray& imageBytes, QString* outImmediateError = nullptr);
|
||||
|
||||
// POST /segment/sam_prompt,JSON 响应由调用方解析(success / contour / error)。
|
||||
QNetworkReply* segmentSamPromptAsync(
|
||||
const QByteArray& cropRgbPngBytes,
|
||||
const QByteArray& overlayPngBytes,
|
||||
const QJsonArray& pointCoords,
|
||||
const QJsonArray& pointLabels,
|
||||
const QJsonArray& boxXyxy,
|
||||
QString* outImmediateError = nullptr);
|
||||
|
||||
private:
|
||||
QNetworkAccessManager* m_nam = nullptr;
|
||||
QUrl m_baseUrl;
|
||||
|
||||
Reference in New Issue
Block a user