修改SDK同步调用接口至异步调用
This commit is contained in:
parent
cab775e05b
commit
d80db4c389
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue