修改SDK同步调用接口至异步调用

This commit is contained in:
shangxiaoyang 2024-04-20 13:50:40 +08:00
parent cab775e05b
commit d80db4c389
2 changed files with 109 additions and 60 deletions

View File

@ -51,7 +51,25 @@ kpAIDrawingBar::kpAIDrawingBar(QWidget *parent)
loginConfigurationPage();
else
*/
initUI();
m_AiMode = new AIModeDataThread();
initUI();
const char* json = R"(
{
"appId": "49080653",
"apiKey": "sd6XK461G446AHz43GAKMEme",
"secretKey": "dCauacFHm6CyWW5hVT3BGg7lavYxxXxB"
}
)";
capability_settings_set_deploy_policy(CAPABILITY_VISION, PUBLIC_CLOUD);
capability_settings_set_model(CAPABILITY_VISION,PUBLIC_CLOUD, "baidu");
capability_settings_set_model_config(Capability::CAPABILITY_VISION,
DeployPolicy::PUBLIC_CLOUD,
"baidu", json);
setFixedWidth(250);
}
@ -60,6 +78,8 @@ kpAIDrawingBar::~kpAIDrawingBar()
{
if (AiSettings)
delete AiSettings;
if (m_AiMode)
delete m_AiMode;
}
/**
@ -315,6 +335,7 @@ void kpAIDrawingBar::initUI()
buildButton->setFixedSize(224,36);
buildButton->setStyleSheet(colorGrayButtonStyle);
buildButton->setEnabled(false);
buildButtonFlag = false;
/* 分页功能 */
stackedWidget = new QStackedWidget(centralWidget);
@ -393,7 +414,7 @@ void kpAIDrawingBar::initUI()
connect(previousButton, &QPushButton::clicked, this, &kpAIDrawingBar::showPreviousPage);
connect(nextButton, &QPushButton::clicked, this, &kpAIDrawingBar::showNextPage);
connect(deleteButton, &QPushButton::clicked, this, &kpAIDrawingBar::deleteCurrentPage);
connect(&aiThread, &AIModeDataThread::finishedSignal, this, &kpAIDrawingBar::onThreadFinished);
connect(m_AiMode, &AIModeDataThread::finishedSignal, this, &kpAIDrawingBar::onThreadFinished);
centralWidget->setFixedWidth(240);
@ -785,6 +806,7 @@ void kpAIDrawingBar::onGenerateButtonClicked()
buildButton->setEnabled(false);
buildButton->setText(i18n("In formation..."));
buildButton->setStyleSheet(colorGrayButtonStyle);
buildButtonFlag = true;
if(!deleteButton->isEnabled())
deleteButton->setEnabled(true);
@ -804,7 +826,7 @@ void kpAIDrawingBar::handleInputTextChanged()
//考虑添加生成中判断
QString userText = static_cast<QTextEdit *>(findChild<QTextEdit *>())->toPlainText().trimmed();
bool enableButton = !userText.isEmpty();
if (enableButton && !buildButton->isEnabled()) {
if (enableButton && !buildButton->isEnabled() && !buildButtonFlag) {
qDebug()<<"buildButton set true";
buildButton->setEnabled(enableButton);
buildButton->setStyleSheet(colorfulButtonStyle);
@ -815,29 +837,6 @@ void kpAIDrawingBar::handleInputTextChanged()
}
}
/**
* @brief AIModeDataThread::generateImageCallback
* AI生成后回调函数
* @param imageData
* @param userData
*/
void AIModeDataThread::generateImageCallback(VisionImageData imageData, void* userData){
qDebug()<<"AI生成回调函数: length:"<<imageData.data_size
<<"imageIndex"<<imageData.index
<<"imageSum"<<imageData.total
<<"imageError="<<imageData.error_code
<<"Image format:"<< imageData.format;
AIModeDataThread *AIMode = (AIModeDataThread *)userData;
QPixmap map;
map.loadFromData(imageData.data, imageData.data_size);
if(imageData.index == 0)
emit AIMode->finishedSignal(false, map, imageData.index, imageData.total, imageData.error_code);
emit AIMode->finishedSignal(true, map, imageData.index, imageData.total, imageData.error_code);
}
/**
* @brief kpAIDrawingBar::addPageAndStoreImages
* AI生成后的图片及页
@ -965,7 +964,6 @@ void kpAIDrawingBar::onThreadFinished(bool flag, QPixmap pixmap, int imageIndex,
QPixmap map;
if(!flag){
deleteImageGridWidget();
aiThread.exit();
deleteButtonFlag = true;
deleteButton->setEnabled(true);
return;
@ -985,9 +983,71 @@ void kpAIDrawingBar::onThreadFinished(bool flag, QPixmap pixmap, int imageIndex,
buildButton->setEnabled(true);
buildButton->setText(i18n("Generate now"));
buildButton->setStyleSheet(colorfulButtonStyle);//设置立即生成按钮为立即生成
buildButtonFlag = false;
addPageAndStoreImages();
}
aiThread.exit();
}
AIModeDataThread::AIModeDataThread()
{
}
AIModeDataThread::~AIModeDataThread()
{
vision_destory_session(session);
}
bool AIModeDataThread::setSessionStatus()
{
if (m_sessionFlag)
return true;
session = nullptr;
VisionResult ret = vision_create_session(&session);
if (ret != VISION_SUCCESS) {
qDebug()<<"创建失败VisionResult="<<ret
<<"ErrorMessage:"<<vision_get_last_error_message();
sendErrorSignal(ret);
m_sessionFlag = false;
return false;
}
VisionResult initRet = vision_init_session(session);
if (initRet != VISION_SUCCESS) {
qDebug()<<"初始化失败 VisionResult="<<initRet
<<"ErrorMessage:"<<vision_get_last_error_message();
sendErrorSignal(initRet);
m_sessionFlag = false;
return false;
}
m_sessionFlag = true;
return true;
}
/**
* @brief AIModeDataThread::generateImageCallback
* AI生成后回调函数
* @param imageData
* @param userData
*/
void AIModeDataThread::generateImageCallback(VisionImageData imageData, void* userData){
qDebug()<<"AI生成回调函数: length:"<<imageData.data_size
<<"imageIndex"<<imageData.index
<<"imageSum"<<imageData.total
<<"imageError="<<imageData.error_code
<<"Image format:"<< imageData.format;
AIModeDataThread *AIMode = (AIModeDataThread *)userData;
QPixmap map;
map.loadFromData(imageData.data, imageData.data_size);
qDebug()<<"textBox ===== "<<AIMode->textBox;
if(imageData.index == 0)
emit AIMode->finishedSignal(false, map, imageData.index, imageData.total, imageData.error_code);
emit AIMode->finishedSignal(true, map, imageData.index, imageData.total, imageData.error_code);
qDebug()<<"------------------------------ generateImageCallback";
}
/**
@ -997,25 +1057,6 @@ void kpAIDrawingBar::onThreadFinished(bool flag, QPixmap pixmap, int imageIndex,
*/
bool AIModeDataThread::someFunctionInThread()
{
VisionSession session = nullptr;
VisionResult ret = vision_create_session(&session);
if (ret != VISION_SUCCESS) {
qDebug()<<"创建失败VisionResult="<<ret
<<"ErrorMessage:"<<vision_get_last_error_message();
sendErrorSignal(ret);
return false;
}
VisionResult initRet = vision_init_session(session);
if (initRet != VISION_SUCCESS) {
qDebug()<<"初始化失败 VisionResult="<<initRet
<<"ErrorMessage:"<<vision_get_last_error_message();
sendErrorSignal(initRet);
return false;
}
int width = AIImageSize.width() * multipleNum;
int height = AIImageSize.height() * multipleNum;
@ -1024,7 +1065,7 @@ bool AIModeDataThread::someFunctionInThread()
vision_set_prompt2image_callback(session, generateImageCallback, this);
vision_set_prompt2image_style(session, ImageStyle);
VisionResult imageRet = vision_prompt2image(session, textBox.toLocal8Bit().data());
VisionResult imageRet = vision_prompt2image_async(session, textBox.toLocal8Bit().data());
qDebug()<<"ImageStyle == "<<ImageStyle;
if (imageRet != VISION_SUCCESS) {
@ -1033,8 +1074,6 @@ bool AIModeDataThread::someFunctionInThread()
sendErrorSignal(imageRet);
return false;
}
vision_destory_session(session);
return true;
}
@ -1196,12 +1235,14 @@ void kpAIDrawingBar::deleteCurrentPage()
else
setEnabledDeleteButton();
}
else
else {
setEnabledDeleteButton();
}
}
void kpAIDrawingBar::setEnabledDeleteButton()
{
qDebug()<<"currentPageIndx == "<<currentPageIndx;
if(!deleteButtonFlag && currentPageIndx == stackedWidget->count() - 1){
deleteButton->setEnabled(false);
}

View File

@ -53,6 +53,7 @@
#include <QGSettings>
#include <ai-base/modelconfig.h>
#include <ai-base/vision.h>
#include <kylin-ai/config.h>
#define LOADING_IMAGE "/usr/share/kolourpaint/pics/loading.gif"
#define BG_IMAGE "/usr/share/kolourpaint/pics/bg@2x.png"
@ -68,13 +69,17 @@
* @brief The AIModeDataThread class
* 线AI的服务
*/
class AIModeDataThread : public QThread {
class AIModeDataThread : public QObject
{
Q_OBJECT
public:
void run() override {
someFunctionInThread();
}
AIModeDataThread();
~AIModeDataThread();
bool setSessionStatus();
bool someFunctionInThread();
void setAIData (QString str, QSize size, int multiple, int quantity, VisionImageStyle Style){
textBox = str;
AIImageSize = size;
@ -87,7 +92,6 @@ signals:
void finishedSignal(bool flag, QPixmap pixmap, int imageIndex, int imageSum, int errorCode);
private:
bool someFunctionInThread();
void sendErrorSignal(int ret){
emit finishedSignal(false, QPixmap(), 0, 1, ret);
for(int i = 0; i < quantityNum; i++)
@ -102,6 +106,8 @@ private:
QSize AIImageSize;
QString textBox;
VisionImageStyle ImageStyle;
bool m_sessionFlag = false;
VisionSession session;
};
/**
@ -173,9 +179,10 @@ private slots:
void onStyleMoreButtonClick();
void startThread() {
// 启动线程
aiThread.setAIData(textBox, AIImageSize, multipleNum, quantityNum, ImageStyle);
aiThread.start();
if (m_AiMode->setSessionStatus()){
m_AiMode->setAIData(textBox, AIImageSize, multipleNum, quantityNum, ImageStyle);
m_AiMode->someFunctionInThread();
}
}
void onThreadFinished(bool flag, QPixmap pixmap, int imageIndex, int imageSum, int errorCode);
@ -205,6 +212,7 @@ private:
bool styleFlag; //风格标志位,用于判断按下哪一个风格
bool deleteButtonFlag = true;
bool buildButtonFlag;
QGSettings *AiSettings; //监听配置信息
QSize AIImageSize; //图片大小
@ -240,7 +248,7 @@ private:
QVector<QVector<QPixmap>> imagesVector; //生成图像数据集成
VisionImageStyle ImageStyle; //风格样式
AIModeDataThread aiThread; //线程类
AIModeDataThread *m_AiMode; //AI生成程序
};
#endif