diff --git a/Cigarette/Cigarette.vcxproj b/Cigarette/Cigarette.vcxproj
index 18e7c3b..5d0c458 100644
--- a/Cigarette/Cigarette.vcxproj
+++ b/Cigarette/Cigarette.vcxproj
@@ -151,7 +151,6 @@
-
@@ -394,7 +393,6 @@
-
$(QTDIR)\bin\moc.exe;%(FullPath)
diff --git a/Cigarette/Cigarette.vcxproj.filters b/Cigarette/Cigarette.vcxproj.filters
index 385d71e..3cc8ba2 100644
--- a/Cigarette/Cigarette.vcxproj.filters
+++ b/Cigarette/Cigarette.vcxproj.filters
@@ -257,9 +257,6 @@
Source Files
-
- Source Files
-
@@ -420,8 +417,5 @@
Header Files
-
- Header Files
-
\ No newline at end of file
diff --git a/Cigarette/alg_jd.cpp b/Cigarette/alg_jd.cpp
index a6faae7..20a23c2 100644
--- a/Cigarette/alg_jd.cpp
+++ b/Cigarette/alg_jd.cpp
@@ -152,6 +152,7 @@ void AlgJd::analyse(cv::Mat vec_in, std::vector >& vec_
cv::imshow("analyse", topography);
cv::waitKey(1);
}
+
}
// Get the names of the output layers
diff --git a/Cigarette/alg_jd.h b/Cigarette/alg_jd.h
index aa66cc8..36e4259 100644
--- a/Cigarette/alg_jd.h
+++ b/Cigarette/alg_jd.h
@@ -15,7 +15,6 @@ class AlgJd
bool init(QString model_path, QString model_name);
bool test_detect();
bool test_detect_batcht(int shoot);
- int detect(cv::Mat& in, cv::Mat &draw_frame, cv::Mat& out, std::vector >& results);
int detect(cv::Mat& in, cv::Mat &out, std::vector > &results);
// Remove the bounding boxes with low confidence using non-maxima suppression
void post_process(cv::Mat& frame, std::vector& outs, std::vector > &results);
@@ -32,10 +31,5 @@ class AlgJd
cv::dnn::Net net;
std::vector classes;
};
-//jinhuan+
-bool sort_rect_by_x_center(cv::Rect r1, cv::Rect r2);
-bool sort_rect_by_y_center(cv::Rect r1, cv::Rect r2);
-bool sort_rect_by_height(cv::Rect r1, cv::Rect r2);
-bool sort_rect_by_width(cv::Rect r1, cv::Rect r2);
-//jinhuan-
+
#endif //end of _CIGARETTE_JD
diff --git a/Cigarette/cigarette.cpp b/Cigarette/cigarette.cpp
index 959c2c1..d295934 100644
--- a/Cigarette/cigarette.cpp
+++ b/Cigarette/cigarette.cpp
@@ -28,10 +28,8 @@ QDateTime g_ts_start;
extern SingleCamInfoStruct SingleCamInfo[NumberOfSupportedCameras];
AlgJd alg_jd[NumberOfSupportedCameras]; //检测胶点的AI算法
-AlgJd_ng alg_jd_ng[NumberOfSupportedCameras]; // 检测卡纸、薄膜褶皱
#ifdef __DEBUG
AlgJd alg_test;//test AI算法
-AlgKz alg_kz_test;
#endif
QThread* pThread[NumberOfSupportedCameras];
@@ -48,7 +46,7 @@ Pylon::CBaslerUniversalInstantCamera* BaslerCamHandle[NumberOfSupportedCameras];
void *HIKCamHandle[NumberOfSupportedCameras];
CaptureThreadHIK* pHIKCaptureThread[NumberOfSupportedCameras];
-SyncQueue > *g_save_queue; //图片保存队列
+SyncQueue> *g_save_queue; //图片保存队列
SyncQueue > *g_image_queue[NumberOfSupportedCameras]; //int表示一个目标拍了几张
ASyncQueue *g_shooted_queue[NumberOfSupportedCameras]; //
ASyncQueue *g_result_wait_queue[NumberOfSupportedCameras]; //
@@ -92,7 +90,6 @@ VOID BeforeWork(int shoot[])
{
if (SingleCamInfo[i].Detect && SingleCamInfo[i].IsOpen) {
alg_jd[i].test_detect_batcht(shoot[i]);
- alg_jd_ng[i].test_detect_batcht_ng(shoot[i]);
}
}
}
@@ -105,6 +102,7 @@ Cigarette::Cigarette(QWidget *parent)
ui.setupUi(this);
InitPtrMat();
read_conf(g_conf_path);
+
if (!g_conf_path.config_path.isEmpty()) {
// 如果非空
QDir* dirinfo = new QDir(g_conf_path.config_path);
@@ -276,7 +274,6 @@ Cigarette::Cigarette(QWidget *parent)
m_PLCDevice = new PLCDevice;
PLCDevice::init_plc(m_PLCDevice);
-
if(m_PLCDevice->g_plc_ok)
{
printf("Connected to dev!\n");
@@ -314,36 +311,26 @@ Cigarette::Cigarette(QWidget *parent)
{
if(SingleCamInfo[i].Detect){
cam_status_mat[i]->setStyleSheet(tr("background-color: rgb(0, 170, 0);"));
-
- QString model_path, model1_name, model2_name;
+ QString model_path, model_name;
if (g_sys_conf.model_path.isEmpty()) {
model_path = "D:/model";
- //g_sys_conf.model_path = model_path;
+ g_sys_conf.model_path = "D:/model";
}
else
model_path = g_sys_conf.model_path;
- if (g_sys_conf.model1_name.isEmpty()) {
- model1_name = "jd.weights";
- g_sys_conf.model1_name = model1_name;
- model2_name = "jd_ng.weights";
- g_sys_conf.model2_name = model2_name;
- }
- else {
- model1_name = g_sys_conf.model1_name;
- model2_name = g_sys_conf.model2_name;
+ if (g_sys_conf.model_name.isEmpty()) {
+ model_name = "jd.weights";
+ g_sys_conf.model_name = "jd.weights";
}
-
- if (!alg_jd[i].init(model_path, model1_name))
+ else
+ model_name = g_sys_conf.model_name;
+
+ if (!alg_jd[i].init(model_path, model_name))
{
QMessageBox::information(NULL, QStringLiteral("系统自检失败"), QStringLiteral("AI模型1初始化失败,请检查程序完整性"), QMessageBox::Ok);
exit(-1);
}
- else if (!alg_jd_ng[i].init_ng(model_path, model2_name))
- {
- QMessageBox::information(NULL, QStringLiteral("系统自检失败"), QStringLiteral("AI模型2初始化失败,请检查程序完整性"), QMessageBox::Ok);
- exit(-1);
- }
CreatWorkThread(SingleCamInfo[i].CamClass, i, this);
}
else {
@@ -390,8 +377,7 @@ Cigarette::Cigarette(QWidget *parent)
}
#ifdef __DEBUG
- alg_test.init(g_sys_conf.model_path, g_sys_conf.model1_name);//test AI算法
- alg_kz_test.init(g_sys_conf.model_path, g_sys_conf.model2_name);
+ alg_test.init(g_sys_conf.model_path, g_sys_conf.model_name);//test AI算法
#endif
//自动打开所有相机
@@ -792,14 +778,7 @@ void Cigarette::TestImg()
}
std::vector > results;
cv::Mat output;
- // alg_test.detect(imagein, output, results);
- //alg_kz_test.detect(imagein, output, results);
-
- cv::Mat transit = imagein.clone();
- //std::vector > results;
- alg_test.detect(imagein, transit, output, results);
- alg_kz_test.detect(imagein, transit, output, results);
-
+ alg_test.detect(imagein, output,results);
std::string WindowName = "TestImg";
cv::namedWindow(WindowName, cv::WINDOW_NORMAL);
cv::imshow(WindowName, output);
@@ -835,17 +814,12 @@ void Cigarette::TestImgs()
}
cv::Mat output;
- cv::Mat transit = imagein.clone();
std::vector > results;
- std::vector vec_jd_results;
- std::vector vec_bm_results;
- alg_test.detect(imagein, transit, output, results);
- alg_kz_test.detect(imagein, transit, output, results);
-
- std::string WindowName = "TestImgs";
+ alg_test.detect(imagein, output,results);
+ std::string WindowName = "TestImg";
cv::namedWindow(WindowName, cv::WINDOW_NORMAL);
- cv::imshow(WindowName, transit);
- int k = cv::waitKeyEx(100);
+ cv::imshow(WindowName, output);
+ int k = cv::waitKeyEx(1);
if (k == 27)break;//ESC键
#ifdef __ExportData
alg_test.analyse(imagein, results);
@@ -2410,26 +2384,6 @@ bool Cigarette::read_sys_config(SysConf &conf, QString conf_path)
{ ///相似度
conf.ConfThreshold = atoi(line.substr(pos + 1).c_str());
}
- else if (tmp_key == "CONFTHRESHOLDS")
- { ///相似度
- std::vector vec_info;
- string_split(line.substr(pos + 1), "|",vec_info);
- if (vec_info.size() == 4)
- {
- conf.ConfThresholds[0]=atoi(vec_info[0].c_str());// 0 胶点
- conf.ConfThresholds[1]=atoi(vec_info[1].c_str());// 1 卡纸
- conf.ConfThresholds[2]=atoi(vec_info[2].c_str());// 2 薄膜
- conf.ConfThresholds[3]=atoi(vec_info[3].c_str());// 3 卡纸下
- }
- }
- else if (tmp_key == "UP_JD_SPACE")
- { /// 是否自动打开相机:0否;1是
- conf.Up_jd_Space= atoi(line.substr(pos + 1).c_str());
- }
- else if (tmp_key == "DOWN_JD_SPACE")
- { /// 是否自动打开相机:0否;1是
- conf.Down_jd_Space = atoi(line.substr(pos + 1).c_str());
- }
else if (tmp_key == "AUTO_OPEN")
{ /// 是否自动打开相机:0否;1是
conf.auto_open = atoi(line.substr(pos + 1).c_str());
@@ -2483,11 +2437,7 @@ bool Cigarette::read_sys_config(SysConf &conf, QString conf_path)
}
else if (tmp_key == "MODELNAME")
{
- conf.model1_name = line.substr(pos + 1).c_str();
- }
- else if (tmp_key == "KZMODELNAME")
- {
- conf.model2_name = line.substr(pos + 1).c_str();
+ conf.model_name = line.substr(pos + 1).c_str();
}
else if (tmp_key == "JPGPATH")
{
@@ -3006,11 +2956,13 @@ void Cigarette::read_plc_items()
std::fstream cfg_file;
QString plc_file = g_conf_path.config_path + "/" + PLC_CONFIG_FILE;
cfg_file.open(plc_file.toLocal8Bit().constData());
+
if (!cfg_file.is_open())
{
std::cout << "Error: Open production file " << PLC_CONFIG_FILE << std::endl;
return;
}
+
while (!cfg_file.eof())
{
char tmp[1024] = "";
@@ -3844,18 +3796,25 @@ void Cigarette::CleanThreadStartAuto()
void Cigarette::record_output_statistic(qint64 quantity, int Kick[NumberOfSupportedCameras], int shift)
{
+ QString file_name, file_path;
for (int i = 0; i < NumberOfSupportedCameras; i++)
{
if (SingleCamInfo[i].IsOpen && quantity > 0) {
std::fstream cfg_file;
- char str[256];
- memset(str, 0, 256);
- sprintf(str, STATISTIC_FILE, i);
+ //char str[256];
+ //memset(str, 0, 256);
+ //sprintf(str, STATISTIC_FILE, i);
+ //char buf[256];
+ //memset(buf, 0, 256);
+ //sprintf(buf, "%s/%s", g_conf_path.config_path.toLocal8Bit().constData(), str);
+ file_name = QString(STATISTIC_FILE).arg(i);
+ file_path = g_conf_path.config_path + "/" + file_name;
+
char buf[256];
memset(buf, 0, 256);
- sprintf(buf, "%s/%s", g_conf_path.config_path.toLocal8Bit().constData(), str);
-
+ sprintf(buf, "%s", file_path.toLocal8Bit().constData());
//std::cout<<"===buf>"<clear();
ui.comboBox_model_path->addItems(fileList);
- if (!g_sys_conf.model1_name.isEmpty()) {
+ if (!g_sys_conf.model_name.isEmpty()) {
// 濡傛灉鏇鹃夋嫨杩囨ā鍨嬶紝鍒欏湪comboBox鏄剧ず閫夋嫨妯″瀷鐨勬枃浠跺悕
- ui.comboBox_model_path->setCurrentText(g_sys_conf.model1_name);
+ ui.comboBox_model_path->setCurrentText(g_sys_conf.model_name);
}
delete dirinfo, dirinfo = nullptr;
}
else {
// 濡傛灉鏈浘閫夋嫨杩囨ā鍨嬫枃浠跺す
- if (!g_sys_conf.model1_name.isEmpty()) {
+ if (!g_sys_conf.model_name.isEmpty()) {
// 濡傛灉鏇剧粡閫夋嫨杩囨ā鍨嬫枃浠
- ui.comboBox_model_path->addItem(g_sys_conf.model1_name);
+ ui.comboBox_model_path->addItem(g_sys_conf.model_name);
}
}
// 鏇存崲妯″瀷浜嬩欢
@@ -114,9 +114,8 @@ DialogSetup::DialogSetup(QWidget * parent) : QDialog(parent) {
dirinfo->mkdir(g_conf_path.save_pics_path);
}
- ui.comboBox_save_pics_path->clear();
+ //ui.comboBox_save_pics_path->clear();
ui.comboBox_save_pics_path->addItem(g_conf_path.save_pics_path);
-
delete dirinfo, dirinfo = nullptr;
}
else {
@@ -124,7 +123,7 @@ DialogSetup::DialogSetup(QWidget * parent) : QDialog(parent) {
QDir *dirinfo = new QDir(dirPath);
if (!dirinfo->exists())
delete dirinfo, dirinfo = nullptr;
- ui.comboBox_save_pics_path->clear();
+ //ui.comboBox_save_pics_path->clear();
ui.comboBox_save_pics_path->setCurrentText(dirPath);
g_conf_path.save_pics_path = dirPath;
}
@@ -175,7 +174,7 @@ void DialogSetup::onComboBoxSelect(int index) {
// 鑾峰彇comboBox褰撳墠鍐呭
QString ct = ui.comboBox_model_path->currentText();
// 淇濆瓨鍒伴厤缃枃浠朵腑
- g_sys_conf.model1_name = ct;
+ g_sys_conf.model_name = ct;
}
void DialogSetup::on_toolButton_keyboard_released()
@@ -392,7 +391,7 @@ void DialogSetup::on_toolButton_choose_model_path_released() {
QString dirName = QFileDialog::getExistingDirectory(this, QStringLiteral("璇烽夋嫨妯″瀷鎵鍦ㄦ枃浠跺す"), "./");
//std::cout << "dirName is " << dirName.toStdString().c_str() << std::endl;
//std::cout << "g_sys_conf.dir_path is " << g_sys_conf.dir_path.toStdString().c_str() << std::endl;
- //std::cout << "g_sys_conf.model1_name is " << g_sys_conf.model1_name.toStdString().c_str() << std::endl;
+ //std::cout << "g_sys_conf.model_name is " << g_sys_conf.model_name.toStdString().c_str() << std::endl;
if (dirName.isEmpty()) {
if (g_sys_conf.model_path.isEmpty())
@@ -402,7 +401,7 @@ void DialogSetup::on_toolButton_choose_model_path_released() {
ui.comboBox_model_path->addItem(dirName);
g_sys_conf.model_path = dirName;
- g_sys_conf.model1_name = "jd.weights";
+ g_sys_conf.model_name = "jd.weights";
}
QDir* dirinfo = new QDir(dirName);
if (!dirinfo->exists())
@@ -411,7 +410,7 @@ void DialogSetup::on_toolButton_choose_model_path_released() {
QStringList fileList = dirinfo->entryList(QDir::Files);
if (fileList.count() == 0) {
g_sys_conf.model_path = "D:/model";
- g_sys_conf.model1_name = "jd.weights";
+ g_sys_conf.model_name = "jd.weights";
}
else
g_sys_conf.model_path = dirName;
@@ -421,7 +420,7 @@ void DialogSetup::on_toolButton_choose_model_path_released() {
ui.comboBox_model_path->clear();
ui.comboBox_model_path->addItems(fileList);
- //g_sys_conf.model1_name = ui.comboBox_model_path->currentText();
+ //g_sys_conf.model_name = ui.comboBox_model_path->currentText();
connect(ui.comboBox_model_path, SIGNAL(currentIndexChanged(int)), this, SLOT(onComboBoxSelect(int)));
delete dirinfo, dirinfo = nullptr;
@@ -436,7 +435,7 @@ void DialogSetup::on_toolButton_choose_save_pics_path_released() {
dirName = "D:/image";
else
dirName = g_conf_path.save_pics_path;
- ui.comboBox_save_pics_path->addItem(dirName);
+ //ui.comboBox_save_pics_path->addItem(dirName);
//return;
}
@@ -444,14 +443,17 @@ void DialogSetup::on_toolButton_choose_save_pics_path_released() {
if (!dirinfo->exists())
delete dirinfo, dirinfo = nullptr;
- ui.comboBox_save_pics_path->clear();
- ui.comboBox_save_pics_path->addItem(dirName);
- //g_conf_path.save_pics_path = dirName;
+ QFileInfo fileInfo(dirName);
+ if (fileInfo.isDir() && ui.comboBox_save_pics_path->findText(fileInfo.absoluteFilePath())) {
+ ui.comboBox_save_pics_path->addItem(fileInfo.absoluteFilePath());
+ ui.comboBox_save_pics_path->setCurrentText(fileInfo.absoluteFilePath());
+ }
- connect(ui.comboBox_save_pics_path, SIGNAL(currentIndexChanged(int)), this, SLOT(onComboBoxPicsPathSelect(int)));
+ g_conf_path.save_pics_path = dirName;
- delete dirinfo, dirinfo = nullptr;
+ connect(ui.comboBox_save_pics_path, SIGNAL(currentIndexChanged(int)), this, SLOT(onComboBoxPicsPathSelect(int)));
write_conf_path();
+ delete dirinfo, dirinfo = nullptr;
}
void DialogSetup::on_toolButton_choose_path_jpg_released() {
@@ -536,15 +538,6 @@ void DialogSetup::write_config()
memset(buf, 0, 256);///
sprintf(buf, "CONFTHRESHOLD=%d\n", g_sys_conf.ConfThreshold);
cfg_file.write(buf, strlen(buf));
- memset(buf, 0, 256);///
- sprintf(buf, "CONFTHRESHOLDS=%d|%d|%d|%d\n", g_sys_conf.ConfThresholds[0], g_sys_conf.ConfThresholds[1], g_sys_conf.ConfThresholds[2], g_sys_conf.ConfThresholds[3]);
- cfg_file.write(buf, strlen(buf));
- memset(buf, 0, 256);
- sprintf(buf, "UP_JD_SPACE=%d\n", g_sys_conf.Up_jd_Space);
- cfg_file.write(buf, strlen(buf));
- memset(buf, 0, 256);
- sprintf(buf, "DOWN_JD_SPACE=%d\n", g_sys_conf.Down_jd_Space);
- cfg_file.write(buf, strlen(buf));
memset(buf, 0, 256);
sprintf(buf, "AUTO_OPEN=%d\n", g_sys_conf.auto_open);
cfg_file.write(buf, strlen(buf));
@@ -576,10 +569,7 @@ void DialogSetup::write_config()
sprintf(buf, "MODELPATH=%s\n", g_sys_conf.model_path.toStdString().c_str());
cfg_file.write(buf, strlen(buf));
memset(buf, 0, 256);
- sprintf(buf, "MODELNAME=%s\n", g_sys_conf.model1_name.toStdString().c_str());
- cfg_file.write(buf, strlen(buf));
- memset(buf, 0, 256);
- sprintf(buf, "KZMODELNAME=%s\n", g_sys_conf.model2_name.toStdString().c_str());
+ sprintf(buf, "MODELNAME=%s\n", g_sys_conf.model_name.toStdString().c_str());
cfg_file.write(buf, strlen(buf));
memset(buf, 0, 256);
sprintf(buf, "JPGPATH=%s\n", g_sys_conf.model_jpg_path.toStdString().c_str());
diff --git a/Cigarette/dialogsetup.ui b/Cigarette/dialogsetup.ui
index 500681b..428eb61 100644
--- a/Cigarette/dialogsetup.ui
+++ b/Cigarette/dialogsetup.ui
@@ -6,8 +6,8 @@
0
0
- 660
- 992
+ 682
+ 900
@@ -24,37 +24,22 @@
background-color: rgb(240, 240, 240);
-
+
0
0
- 661
- 1000
+ 683
+ 900
-
-
- 0
- 0
-
-
-
-
- 0
- 0
-
-
-
- true
-
-
+
0
0
- 670
- 977
+ 681
+ 901
@@ -65,37 +50,41 @@
- 670
- 900
+ 0
+ 0
-
+
+ true
+
+
- 10
- 60
- 641
- 61
+ 0
+ -122
+ 670
+ 1000
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
+
+
+ 0
+ 0
+
-
- 鍚姩璁剧疆
+
+
+ 670
+ 1000
+
-
+
- 30
- 30
- 220
- 22
+ 10
+ 60
+ 641
+ 61
@@ -106,17 +95,59 @@
true
-
- 鑷姩鎵撳紑鎵鏈夌浉鏈
-
-
-
-
-
- 380
- 30
- 261
- 21
+
+ 鍚姩璁剧疆
+
+
+
+
+ 30
+ 30
+ 220
+ 22
+
+
+
+
+ 寰蒋闆呴粦
+ 12
+ 75
+ true
+
+
+
+ 鑷姩鎵撳紑鎵鏈夌浉鏈
+
+
+
+
+
+ 380
+ 30
+ 261
+ 21
+
+
+
+
+ 寰蒋闆呴粦
+ 12
+ 75
+ true
+
+
+
+ 绋嬪簭鍚姩鍚庤嚜鍔ㄥ紑濮嬪伐浣
+
+
+
+
+
+
+ 10
+ 610
+ 641
+ 81
@@ -127,38 +158,173 @@
true
-
- 绋嬪簭鍚姩鍚庤嚜鍔ㄥ紑濮嬪伐浣
-
-
-
-
-
-
- 10
- 610
- 641
- 81
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- 绠$悊鍛樺瘑鐮佷慨鏀
-
-
-
-
- 540
- 20
- 91
- 51
+
+ 绠$悊鍛樺瘑鐮佷慨鏀
+
+
+
+
+ 540
+ 20
+ 91
+ 51
+
+
+
+
+ 寰蒋闆呴粦
+ 12
+ 75
+ true
+
+
+
+ 纭畾
+
+
+
+
+
+ 190
+ 30
+ 61
+ 31
+
+
+
+
+ 寰蒋闆呴粦
+ 12
+ 75
+ true
+
+
+
+ 鏂板瘑鐮侊細
+
+
+
+
+
+ 440
+ 32
+ 91
+ 31
+
+
+
+
+ 寰蒋闆呴粦
+ 12
+ 75
+ true
+
+
+
+
+
+
+ QLineEdit::Password
+
+
+
+
+
+ 250
+ 30
+ 101
+ 31
+
+
+
+
+ 寰蒋闆呴粦
+ 12
+ 75
+ true
+
+
+
+
+
+
+ QLineEdit::Password
+
+
+
+
+
+ 360
+ 30
+ 81
+ 31
+
+
+
+
+ 寰蒋闆呴粦
+ 12
+ 75
+ true
+
+
+
+ 纭瀵嗙爜锛
+
+
+
+
+
+ 90
+ 30
+ 91
+ 31
+
+
+
+
+ 寰蒋闆呴粦
+ 12
+ 75
+ true
+
+
+
+
+
+
+ QLineEdit::Password
+
+
+
+
+
+ 20
+ 30
+ 61
+ 31
+
+
+
+
+ 寰蒋闆呴粦
+ 12
+ 75
+ true
+
+
+
+ 鍘熷瘑鐮侊細
+
+
+
+
+
+
+ 10
+ 180
+ 640
+ 278
@@ -169,17 +335,710 @@
true
-
- 纭畾
-
-
-
-
-
- 190
- 30
- 61
- 31
+
+ 鐩告満鍙傛暟
+
+
+
+
+ 20
+ 40
+ 180
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+ 1#鐩告満鏇濆厜鏃堕棿(寰)锛
+
+
+
+
+
+ 210
+ 40
+ 90
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+
+
+
+
+
+
+ 210
+ 70
+ 90
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+
+
+
+
+
+
+ 20
+ 70
+ 180
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+ 2#鐩告満鏇濆厜鏃堕棿(寰)锛
+
+
+
+
+
+ 510
+ 70
+ 90
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+
+
+
+
+
+
+ 320
+ 40
+ 180
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+ 1#鐩告満妯℃嫙澧炵泭(0~64)锛
+
+
+
+
+
+ 320
+ 70
+ 180
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+ 2#鐩告満妯℃嫙澧炵泭(0~64)锛
+
+
+
+
+
+ 510
+ 40
+ 90
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+
+
+
+
+
+
+ 210
+ 100
+ 90
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+
+
+
+
+
+
+ 20
+ 130
+ 180
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+ 4#鐩告満鏇濆厜鏃堕棿(寰)锛
+
+
+
+
+
+ 210
+ 130
+ 90
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+
+
+
+
+
+
+ 20
+ 100
+ 180
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+ 3#鐩告満鏇濆厜鏃堕棿(寰)锛
+
+
+
+
+
+ 510
+ 130
+ 90
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+
+
+
+
+
+
+ 320
+ 100
+ 180
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+ 3#鐩告満妯℃嫙澧炵泭(0~64)锛
+
+
+
+
+
+ 320
+ 130
+ 180
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+ 4#鐩告満妯℃嫙澧炵泭(0~64)锛
+
+
+
+
+
+ 510
+ 100
+ 90
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+
+
+
+
+
+
+ 680
+ 90
+ 91
+ 51
+
+
+
+
+ 寰蒋闆呴粦
+ 12
+ 75
+ true
+
+
+
+ 纭畾
+
+
+
+
+
+ 20
+ 160
+ 180
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+ 5#鐩告満鏇濆厜鏃堕棿(寰)锛
+
+
+
+
+
+ 20
+ 190
+ 180
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+ 6#鐩告満鏇濆厜鏃堕棿(寰)锛
+
+
+
+
+
+ 20
+ 220
+ 180
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+ 7#鐩告満鏇濆厜鏃堕棿(寰)锛
+
+
+
+
+
+ 210
+ 160
+ 90
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+
+
+
+
+
+
+ 210
+ 190
+ 90
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+
+
+
+
+
+
+ 210
+ 220
+ 90
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+
+
+
+
+
+
+ 320
+ 160
+ 180
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+ 5#鐩告満妯℃嫙澧炵泭(0~64)锛
+
+
+
+
+
+ 320
+ 190
+ 180
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+ 6#鐩告満妯℃嫙澧炵泭(0~64)锛
+
+
+
+
+
+ 320
+ 220
+ 180
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+ 7#鐩告満妯℃嫙澧炵泭(0~64)锛
+
+
+
+
+
+ 510
+ 160
+ 90
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+
+
+
+
+
+
+ 510
+ 190
+ 90
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+
+
+
+
+
+
+ 510
+ 220
+ 90
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+
+
+
+
+
+
+ 20
+ 250
+ 180
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+ 8#鐩告満鏇濆厜鏃堕棿(寰)锛
+
+
+
+
+
+ 210
+ 250
+ 90
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+
+
+
+
+
+
+ 320
+ 250
+ 180
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+ 8#鐩告満妯℃嫙澧炵泭(0~64)锛
+
+
+
+
+
+ 510
+ 250
+ 90
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+
+
+
+
+
+
+
+ 10
+ 770
+ 641
+ 148
@@ -190,17 +1049,374 @@
true
-
- 鏂板瘑鐮侊細
-
-
-
-
-
- 440
- 32
- 91
- 31
+
+ 婊ゆ尝璁剧疆
+
+
+
+
+ 20
+ 30
+ 180
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+ 1#鐩告満婊ゆ尝鏃堕棿(寰)锛
+
+
+
+
+
+ 210
+ 30
+ 90
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+
+
+
+
+
+
+ 510
+ 30
+ 90
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+
+
+
+
+
+
+ 320
+ 30
+ 180
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+ 2#鐩告満婊ゆ尝鏃堕棿(寰)锛
+
+
+
+
+
+ 510
+ 60
+ 90
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+
+
+
+
+
+
+ 20
+ 60
+ 180
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+ 3#鐩告満婊ゆ尝鏃堕棿(寰)锛
+
+
+
+
+
+ 210
+ 60
+ 90
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+
+
+
+
+
+
+ 320
+ 60
+ 180
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+ 4#鐩告満婊ゆ尝鏃堕棿(寰)锛
+
+
+
+
+
+ 680
+ 50
+ 91
+ 51
+
+
+
+
+ 寰蒋闆呴粦
+ 12
+ 75
+ true
+
+
+
+ 纭畾
+
+
+
+
+
+ 20
+ 90
+ 180
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+ 5#鐩告満婊ゆ尝鏃堕棿(寰)锛
+
+
+
+
+
+ 320
+ 90
+ 180
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+ 6#鐩告満婊ゆ尝鏃堕棿(寰)锛
+
+
+
+
+
+ 20
+ 120
+ 180
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+ 7#鐩告満婊ゆ尝鏃堕棿(寰)锛
+
+
+
+
+
+ 320
+ 120
+ 180
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+ 8#鐩告満婊ゆ尝鏃堕棿(寰)锛
+
+
+
+
+
+ 210
+ 90
+ 90
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+
+
+
+
+
+
+ 210
+ 120
+ 90
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+
+
+
+
+
+
+ 510
+ 90
+ 90
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+
+
+
+
+
+
+ 510
+ 120
+ 90
+ 20
+
+
+
+
+ 寰蒋闆呴粦
+ 10
+ 75
+ true
+
+
+
+
+
+
+
+
+
+
+ 10
+ 120
+ 641
+ 61
@@ -211,20 +1427,101 @@
true
-
-
-
-
- QLineEdit::Password
-
-
-
-
-
- 250
- 30
- 101
- 31
+
+ 瀛樺浘璁剧疆
+
+
+
+
+ 30
+ 30
+ 90
+ 21
+
+
+
+
+ 寰蒋闆呴粦
+ 12
+ 75
+ true
+
+
+
+ 涓嶅瓨
+
+
+
+
+
+ 230
+ 30
+ 90
+ 21
+
+
+
+
+ 寰蒋闆呴粦
+ 12
+ 75
+ true
+
+
+
+ 瀛楴G
+
+
+
+
+
+ 440
+ 30
+ 90
+ 21
+
+
+
+
+ 寰蒋闆呴粦
+ 12
+ 75
+ true
+
+
+
+ 鍏ㄥ瓨
+
+
+
+
+
+ 570
+ 25
+ 50
+ 30
+
+
+
+
+ 寰蒋闆呴粦
+ 12
+ 75
+ true
+
+
+
+ 纭畾
+
+
+
+
+
+
+ 110
+ 930
+ 131
+ 51
@@ -236,19 +1533,16 @@
-
-
-
- QLineEdit::Password
+ 淇濆瓨鍙傛暟
-
+
- 360
- 30
- 81
- 31
+ 520
+ 10
+ 130
+ 50
@@ -260,16 +1554,16 @@
- 纭瀵嗙爜锛
+ 閫鍑虹郴缁
-
+
- 90
- 30
- 91
- 31
+ 10
+ 690
+ 641
+ 81
@@ -280,20 +1574,173 @@
true
-
-
-
-
- QLineEdit::Password
-
-
-
-
-
- 20
- 30
- 61
- 31
+
+ 鎿嶄綔鍛樺瘑鐮佷慨鏀
+
+
+
+
+ 190
+ 30
+ 61
+ 31
+
+
+
+
+ 寰蒋闆呴粦
+ 12
+ 75
+ true
+
+
+
+ 鏂板瘑鐮侊細
+
+
+
+
+
+ 440
+ 32
+ 91
+ 31
+
+
+
+
+ 寰蒋闆呴粦
+ 12
+ 75
+ true
+
+
+
+
+
+
+ QLineEdit::Password
+
+
+
+
+
+ 250
+ 30
+ 101
+ 31
+
+
+
+
+ 寰蒋闆呴粦
+ 12
+ 75
+ true
+
+
+
+
+
+
+ QLineEdit::Password
+
+
+
+
+
+ 360
+ 30
+ 81
+ 31
+
+
+
+
+ 寰蒋闆呴粦
+ 12
+ 75
+ true
+
+
+
+ 纭瀵嗙爜锛
+
+
+
+
+
+ 90
+ 30
+ 91
+ 31
+
+
+
+
+ 寰蒋闆呴粦
+ 12
+ 75
+ true
+
+
+
+
+
+
+ QLineEdit::Password
+
+
+
+
+
+ 20
+ 30
+ 61
+ 31
+
+
+
+
+ 寰蒋闆呴粦
+ 12
+ 75
+ true
+
+
+
+ 鍘熷瘑鐮侊細
+
+
+
+
+
+ 540
+ 20
+ 91
+ 51
+
+
+
+
+ 寰蒋闆呴粦
+ 12
+ 75
+ true
+
+
+
+ 纭畾
+
+
+
+
+
+
+ 370
+ 930
+ 131
+ 51
@@ -305,373 +1752,256 @@
- 鍘熷瘑鐮侊細
+ 鍏抽棴绐楀彛
-
-
-
-
- 10
- 180
- 640
- 278
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- 鐩告満鍙傛暟
-
-
+
- 20
- 40
- 180
- 20
+ 220
+ 10
+ 130
+ 50
寰蒋闆呴粦
- 10
+ 12
75
true
- 1#鐩告満鏇濆厜鏃堕棿(寰)锛
+ 鏄剧ず妗岄潰
-
+
- 210
- 40
- 90
- 20
+ 110
+ 10
+ 91
+ 41
寰蒋闆呴粦
- 10
+ 12
75
true
-
-
-
-
-
-
-
- 210
- 70
- 90
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
+
+ border-image: url(:/Cigarette/Resources/keyboard.png);
-
+
20
- 70
- 180
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
-
-
- 2#鐩告満鏇濆厜鏃堕棿(寰)锛
-
-
-
-
-
- 510
- 70
- 90
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
-
-
-
-
-
-
-
-
- 320
- 40
- 180
- 20
+ 20
+ 81
+ 21
寰蒋闆呴粦
- 10
+ 12
75
true
- 1#鐩告満妯℃嫙澧炵泭(0~64)锛
+ 绯荤粺璁剧疆
-
+
- 320
- 70
- 180
- 20
+ 40
+ 460
+ 101
+ 41
寰蒋闆呴粦
- 10
+ 12
75
true
- 2#鐩告満妯℃嫙澧炵泭(0~64)锛
+ 閰嶆柟璁剧疆
-
+
- 510
- 40
- 90
- 20
+ 40
+ 560
+ 101
+ 41
寰蒋闆呴粦
- 10
+ 12
75
true
-
+ 鎹㈢彮璁剧疆
-
+
- 210
- 100
- 90
- 20
+ 40
+ 510
+ 101
+ 41
寰蒋闆呴粦
- 10
+ 12
75
true
-
+ 浜ч噺缁熻
-
+
- 20
- 130
- 180
- 20
+ 620
+ 470
+ 27
+ 25
寰蒋闆呴粦
- 10
- 75
- true
- 4#鐩告満鏇濆厜鏃堕棿(寰)锛
+ ...
-
+
- 210
- 130
- 90
- 20
+ 190
+ 470
+ 171
+ 30
寰蒋闆呴粦
- 10
+ 12
75
true
-
-
-
-
-
-
- 20
- 100
- 180
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
+ 妯″瀷瀛樺偍璺緞
-
- 3#鐩告満鏇濆厜鏃堕棿(寰)锛
+
+ Qt::AlignCenter
-
+
- 510
- 130
- 90
- 20
+ 370
+ 470
+ 241
+ 30
寰蒋闆呴粦
10
- 75
- true
-
-
-
-
+
- 320
- 100
- 180
- 20
+ 340
+ 1020
+ 91
+ 21
寰蒋闆呴粦
- 10
75
true
- 3#鐩告満妯℃嫙澧炵泭(0~64)锛
+ 鍥剧墖瀛樺偍璺緞
-
+
- 320
- 130
- 180
- 20
+ 440
+ 1020
+ 171
+ 25
寰蒋闆呴粦
- 10
- 75
- true
-
- 4#鐩告満妯℃嫙澧炵泭(0~64)锛
-
-
+
- 510
- 100
- 90
- 20
+ 620
+ 1020
+ 27
+ 26
寰蒋闆呴粦
- 10
- 75
- true
-
+ ...
-
+
- 680
- 90
- 91
- 51
+ 370
+ 10
+ 130
+ 50
@@ -683,1485 +2013,165 @@
- 纭畾
+ 娓呯悊鍥剧墖
-
+
- 20
- 160
- 180
- 20
+ 520
+ 930
+ 131
+ 21
寰蒋闆呴粦
- 10
75
true
- 5#鐩告満鏇濆厜鏃堕棿(寰)锛
+ 娴嬭瘯鍗曞紶鍥剧墖
-
+
- 20
- 190
- 180
- 20
+ 520
+ 960
+ 131
+ 21
寰蒋闆呴粦
- 10
75
true
- 6#鐩告満鏇濆厜鏃堕棿(寰)锛
+ 娴嬭瘯澶氬紶鍥剧墖
-
+
- 20
- 220
- 180
- 20
+ 190
+ 520
+ 171
+ 30
寰蒋闆呴粦
- 10
+ 12
75
true
- 7#鐩告満鏇濆厜鏃堕棿(寰)锛
-
-
-
-
-
- 210
- 160
- 90
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
+ 閰嶇疆鏂囦欢瀛樺偍璺緞
-
-
+
+ Qt::AlignCenter
-
+
- 210
- 190
- 90
- 20
+ 370
+ 520
+ 241
+ 30
寰蒋闆呴粦
10
- 75
- true
-
-
-
-
+
- 210
- 220
- 90
- 20
+ 620
+ 520
+ 27
+ 25
寰蒋闆呴粦
- 10
- 75
- true
-
+ ...
-
+
- 320
- 160
- 180
- 20
+ 190
+ 570
+ 171
+ 30
寰蒋闆呴粦
- 10
+ 12
75
true
- 5#鐩告満妯℃嫙澧炵泭(0~64)锛
-
-
-
-
-
- 320
- 190
- 180
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
+ 鍥剧墖瀛樺偍璺緞
-
- 6#鐩告満妯℃嫙澧炵泭(0~64)锛
+
+ Qt::AlignCenter
-
+
- 320
- 220
- 180
- 20
+ 370
+ 570
+ 241
+ 30
寰蒋闆呴粦
10
- 75
- true
-
- 7#鐩告満妯℃嫙澧炵泭(0~64)锛
-
-
+
- 510
- 160
- 90
- 20
+ 620
+ 570
+ 27
+ 25
寰蒋闆呴粦
- 10
- 75
- true
-
+ ...
-
-
-
- 510
- 190
- 90
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
-
-
-
-
-
-
-
-
- 510
- 220
- 90
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
-
-
-
-
-
-
-
-
- 20
- 250
- 180
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
-
-
- 8#鐩告満鏇濆厜鏃堕棿(寰)锛
-
-
-
-
-
- 210
- 250
- 90
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
-
-
-
-
-
-
-
-
- 320
- 250
- 180
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
-
-
- 8#鐩告満妯℃嫙澧炵泭(0~64)锛
-
-
-
-
-
- 510
- 250
- 90
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
-
-
-
-
-
-
-
-
-
- 10
- 770
- 641
- 148
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- 婊ゆ尝璁剧疆
-
-
-
-
- 20
- 30
- 180
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
-
-
- 1#鐩告満婊ゆ尝鏃堕棿(寰)锛
-
-
-
-
-
- 210
- 30
- 90
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
-
-
-
-
-
-
-
-
- 510
- 30
- 90
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
-
-
-
-
-
-
-
-
- 320
- 30
- 180
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
-
-
- 2#鐩告満婊ゆ尝鏃堕棿(寰)锛
-
-
-
-
-
- 510
- 60
- 90
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
-
-
-
-
-
-
-
-
- 20
- 60
- 180
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
-
-
- 3#鐩告満婊ゆ尝鏃堕棿(寰)锛
-
-
-
-
-
- 210
- 60
- 90
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
-
-
-
-
-
-
-
-
- 320
- 60
- 180
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
-
-
- 4#鐩告満婊ゆ尝鏃堕棿(寰)锛
-
-
-
-
-
- 680
- 50
- 91
- 51
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- 纭畾
-
-
-
-
-
- 20
- 90
- 180
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
-
-
- 5#鐩告満婊ゆ尝鏃堕棿(寰)锛
-
-
-
-
-
- 320
- 90
- 180
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
-
-
- 6#鐩告満婊ゆ尝鏃堕棿(寰)锛
-
-
-
-
-
- 20
- 120
- 180
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
-
-
- 7#鐩告満婊ゆ尝鏃堕棿(寰)锛
-
-
-
-
-
- 320
- 120
- 180
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
-
-
- 8#鐩告満婊ゆ尝鏃堕棿(寰)锛
-
-
-
-
-
- 210
- 90
- 90
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
-
-
-
-
-
-
-
-
- 210
- 120
- 90
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
-
-
-
-
-
-
-
-
- 510
- 90
- 90
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
-
-
-
-
-
-
-
-
- 510
- 120
- 90
- 20
-
-
-
-
- 寰蒋闆呴粦
- 10
- 75
- true
-
-
-
-
-
-
-
-
-
-
- 10
- 120
- 641
- 61
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- 瀛樺浘璁剧疆
-
-
-
-
- 30
- 30
- 90
- 21
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- 涓嶅瓨
-
-
-
-
-
- 230
- 30
- 90
- 21
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- 瀛楴G
-
-
-
-
-
- 440
- 30
- 90
- 21
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- 鍏ㄥ瓨
-
-
-
-
-
- 570
- 25
- 50
- 30
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- 纭畾
-
-
-
-
-
-
- 110
- 930
- 131
- 51
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- 淇濆瓨鍙傛暟
-
-
-
-
-
- 520
- 10
- 130
- 50
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- 閫鍑虹郴缁
-
-
-
-
-
- 10
- 690
- 641
- 81
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- 鎿嶄綔鍛樺瘑鐮佷慨鏀
-
-
-
-
- 190
- 30
- 61
- 31
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- 鏂板瘑鐮侊細
-
-
-
-
-
- 440
- 32
- 91
- 31
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
-
-
-
- QLineEdit::Password
-
-
-
-
-
- 250
- 30
- 101
- 31
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
-
-
-
- QLineEdit::Password
-
-
-
-
-
- 360
- 30
- 81
- 31
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- 纭瀵嗙爜锛
-
-
-
-
-
- 90
- 30
- 91
- 31
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
-
-
-
- QLineEdit::Password
-
-
-
-
-
- 20
- 30
- 61
- 31
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- 鍘熷瘑鐮侊細
-
-
-
-
-
- 540
- 20
- 91
- 51
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- 纭畾
-
-
-
-
-
-
- 370
- 930
- 131
- 51
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- 鍏抽棴绐楀彛
-
-
-
-
-
- 220
- 10
- 130
- 50
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- 鏄剧ず妗岄潰
-
-
-
-
-
- 110
- 10
- 91
- 41
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- border-image: url(:/Cigarette/Resources/keyboard.png);
-
-
-
-
-
-
-
-
- 20
- 20
- 81
- 21
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- 绯荤粺璁剧疆
-
-
-
-
-
- 40
- 460
- 101
- 41
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- 閰嶆柟璁剧疆
-
-
-
-
-
- 40
- 560
- 101
- 41
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- 鎹㈢彮璁剧疆
-
-
-
-
-
- 40
- 510
- 101
- 41
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- 浜ч噺缁熻
-
-
-
-
-
- 620
- 470
- 27
- 25
-
-
-
-
- 寰蒋闆呴粦
-
-
-
- ...
-
-
-
-
-
- 190
- 470
- 171
- 30
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- 妯″瀷瀛樺偍璺緞
-
-
- Qt::AlignCenter
-
-
-
-
-
- 370
- 470
- 241
- 30
-
-
-
-
- 寰蒋闆呴粦
- 10
-
-
-
-
-
-
- 340
- 1020
- 91
- 21
-
-
-
-
- 寰蒋闆呴粦
- 75
- true
-
-
-
- 鍥剧墖瀛樺偍璺緞
-
-
-
-
-
- 440
- 1020
- 171
- 25
-
-
-
-
- 寰蒋闆呴粦
-
-
-
-
-
-
- 620
- 1020
- 27
- 26
-
-
-
-
- 寰蒋闆呴粦
-
-
-
- ...
-
-
-
-
-
- 370
- 10
- 130
- 50
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- 娓呯悊鍥剧墖
-
-
-
-
-
- 520
- 930
- 131
- 21
-
-
-
-
- 寰蒋闆呴粦
- 75
- true
-
-
-
- 娴嬭瘯鍗曞紶鍥剧墖
-
-
-
-
-
- 520
- 960
- 131
- 21
-
-
-
-
- 寰蒋闆呴粦
- 75
- true
-
-
-
- 娴嬭瘯澶氬紶鍥剧墖
-
-
-
-
-
- 190
- 520
- 171
- 30
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- 閰嶇疆鏂囦欢瀛樺偍璺緞
-
-
- Qt::AlignCenter
-
-
-
-
-
- 370
- 520
- 241
- 30
-
-
-
-
- 寰蒋闆呴粦
- 10
-
-
-
-
-
-
- 620
- 520
- 27
- 25
-
-
-
-
- 寰蒋闆呴粦
-
-
-
- ...
-
-
-
-
-
- 190
- 570
- 171
- 30
-
-
-
-
- 寰蒋闆呴粦
- 12
- 75
- true
-
-
-
- 鍥剧墖瀛樺偍璺緞
-
-
- Qt::AlignCenter
-
-
-
-
-
- 370
- 570
- 241
- 30
-
-
-
-
- 寰蒋闆呴粦
- 10
-
-
-
-
-
-
- 620
- 570
- 27
- 25
-
-
-
-
- 寰蒋闆呴粦
-
-
-
- ...
-
diff --git a/Cigarette/output_statistic.cpp b/Cigarette/output_statistic.cpp
index c35179a..b247149 100644
--- a/Cigarette/output_statistic.cpp
+++ b/Cigarette/output_statistic.cpp
@@ -82,11 +82,11 @@ void output_statistic::recMsgFromDialogSetup()
for (int i = 0; i < NumberOfSupportedCameras; i++) {
file_name = QString(STATISTIC_FILE).arg(i);
file_path = g_conf_path.config_path + "/" + file_name;
- //std::cout << "===>" << file_path.toStdString() << std::endl;
file.setFileName(file_path);
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextStream in(&file);
+ //in.setCodec("UTF-8");
textBrowser_mat[i]->setText(in.readAll());
}
else {
diff --git a/Cigarette/plcsetup.cpp b/Cigarette/plcsetup.cpp
index 94dc8af..1d4928c 100644
--- a/Cigarette/plcsetup.cpp
+++ b/Cigarette/plcsetup.cpp
@@ -244,7 +244,10 @@ void PlcSetup::handleTimeout()
void PlcSetup::read_plc_items()
{
std::fstream cfg_file;
- cfg_file.open(g_conf_path.config_path.toStdString() + "/" + PLC_ITEM_FILE);
+ QString plc_file = g_conf_path.config_path + "/" + PLC_CONFIG_FILE;
+
+ cfg_file.open(plc_file.toLocal8Bit().constData());
+
if (!cfg_file.is_open())
{
std::cout << "Error: Open production file " << PLC_ITEM_FILE << std::endl;
@@ -277,7 +280,8 @@ void PlcSetup::read_plc_items()
void PlcSetup::save_plc_items()
{
std::fstream cfg_file;
- cfg_file.open(g_conf_path.config_path.toStdString() + "/" + PLC_ITEM_FILE, std::ios::out | std::ios::trunc);
+ QString plc_file = g_conf_path.config_path + "/" + PLC_CONFIG_FILE;
+ cfg_file.open(plc_file.toLocal8Bit().constData(), std::ios::out | std::ios::trunc);
if (cfg_file.good())
{
for (int i = 0; i < m_plc_items.size(); i++)
diff --git a/Cigarette/savethread.h b/Cigarette/savethread.h
index 1775e25..8c6f708 100644
--- a/Cigarette/savethread.h
+++ b/Cigarette/savethread.h
@@ -55,7 +55,6 @@ protected:
std::pair element;
g_save_queue->take(element);
std::string file_name = element.first;
- //std::cout << file_name << std::endl;
image = element.second;
if (image.data)
{
@@ -78,7 +77,9 @@ protected:
}
if (!b_find)
{
- QString dir_str = QString::fromStdString(dir_path);
+ //QString dir_str = QString::fromStdString(dir_path);
+ QString dir_str = QString::fromLocal8Bit(QByteArray::fromRawData(dir_path.c_str(), dir_path.size()));
+
QDir dir;
if (!dir.exists(dir_str))
{
diff --git a/Cigarette/workthread.cpp b/Cigarette/workthread.cpp
index 1f1e40e..1ac0c4d 100644
--- a/Cigarette/workthread.cpp
+++ b/Cigarette/workthread.cpp
@@ -1,6 +1,5 @@
#include "workthread.h"
#include "alg_jd.h"
-#include "alg_jd_ng.h"
#include "common.h"
#include "balluffcamera.h"
#include "baslercamera.h"
@@ -9,8 +8,6 @@
#include "exportData.h"
extern AlgJd alg_jd[NumberOfSupportedCameras]; //检测胶点的AI算法
-extern AlgJd_ng alg_jd_ng[NumberOfSupportedCameras]; // ng模型
-
extern ConfPath g_conf_path;
extern SysConf g_sys_conf; //系统配置参数
extern DisplayLabelConf g_display_label_conf[NumberOfSupportedCameras];
@@ -18,8 +15,8 @@ extern DisplayLabelConf g_display_label_conf[NumberOfSupportedCameras];
extern int rotationAngle[NumberOfSupportedCameras]; //图片旋转角度
extern bool isNeedRotate[NumberOfSupportedCameras];
-extern SyncQueue> *g_save_queue; //图片保存队列
-extern SyncQueue> *g_image_queue[NumberOfSupportedCameras]; //int表示一个目标拍了几张
+extern SyncQueue >* g_save_queue; //图片保存队列
+extern SyncQueue >* g_image_queue[NumberOfSupportedCameras]; //int表示一个目标拍了几张
extern SyncQueue<_UDPSendInfo> *UDP_Info_queue;
extern SyncQueue<_ExportDataInfo>* export_Data_Info_queue;
extern PLCDevice* m_PLCDevice;
@@ -62,9 +59,6 @@ void WorkThread::run()
local_SysConf.shoot[local_camera_number] = g_sys_conf.shoot[local_camera_number];
local_SysConf.MisMatchAct = g_sys_conf.MisMatchAct;
local_SysConf.ConfThreshold = g_sys_conf.ConfThreshold;//
- local_SysConf.Up_jd_Space = g_sys_conf.Up_jd_Space;
- local_SysConf.Down_jd_Space = g_sys_conf.Down_jd_Space;
-
for (int i = 0; i < 3; i++)local_SysConf.no[local_camera_number][i] = g_sys_conf.no[local_camera_number][i];
#ifdef DRAW_RECT
@@ -79,6 +73,7 @@ void WorkThread::run()
#endif
}
+
QDateTime now_ts = QDateTime::currentDateTime();
std::pair element;
local_g_image_queue->take(element);
@@ -101,19 +96,18 @@ void WorkThread::run()
{
cv::cvtColor(image, image, CV_BGR2RGB); //灰度图像转为彩色图像
}
-
if (local_SysConf.shoot[local_camera_number] == unit_count)
{
exportDataInfo.shotCounts = unit_count;
std::vector vec_in;
int w = image.cols;
int h = image.rows / unit_count;
- for (int index = 0; index < unit_count; index++)
+ for(int index=0;index vec_out;
-
- //单张
- cv::Mat transits;
- std::vector> results;
- std::vector> results_ng;
- //多张
- std::vector transits_ng;
- std::vector>> vec_results;
- std::vector>> vec_results_ng;
+ std::vector > > vec_results;
QDateTime ts_start = QDateTime::currentDateTime();
- if (unit_count == 1) {
- //std::vector> results;
- //std::vector> results_ng;
- cv::Mat imagein, imageout;
+ if(unit_count == 1){
+ std::vector > results;
+ cv::Mat imagein,imageout;
imagein = vec_in[0];
alg_jd[local_camera_number].detect(imagein, imageout, results);
- transits = imageout.clone();
- alg_jd_ng[local_camera_number].detect_ng(imagein, transits, imageout, results_ng);
vec_out.push_back(imageout.clone());
vec_results.push_back(results);
- vec_results_ng.push_back(results_ng);
- }
- else {
+ }else{
alg_jd[local_camera_number].detect_batch(vec_in, vec_out, vec_results);
- for (int i = 0; i < vec_out.size(); i++)
- transits_ng.push_back(vec_out[i]);
- alg_jd_ng[local_camera_number].detect_batch_ng(vec_in, transits_ng, vec_out, vec_results_ng);
}
QDateTime ts_jd = QDateTime::currentDateTime();
int time_process = ts_start.msecsTo(ts_jd);
emit display_timecost(local_camera_number, time_process);
- //UDPSendInfo.timecost = QString::number(time_process);
- //exportDataInfo.timeCost = QString::number(time_process).toStdString();
+ UDPSendInfo.timecost = QString::number(time_process);
+ exportDataInfo.timeCost = QString::number(time_process).toStdString();
cv::Mat image1;
cv::Mat image2;
-
+
QString jd_no;
- for (int index = 0; index < unit_count; index++)
+ for(int index=0;index 0;
}
@@ -171,10 +149,10 @@ void WorkThread::run()
UDPSendInfo.JD = jd_no;
bool IsNG = false;
- bool IsNG_model2[3] = { false };
- for (int index = 0; index < unit_count; index++)
+ for(int index=0;indexput(std::make_pair(file_name.toStdString(), m));
+
+ g_save_queue->put(std::make_pair(file_name.toLocal8Bit().constData(), m));
}
}
if (unit_count >= 2){
- image1 = vec_out[0].clone();
+ image1 = vec_out[(result_index) % 2].clone();
#ifdef DRAW_RECT
IsNG|=CheckSelectRects(image1,vec_results,(result_index) % 2,local_DisplayLabelConf,0);
#endif
@@ -211,53 +190,15 @@ void WorkThread::run()
#endif
}
result_index++;
- //exportDataInfo.isNg = IsNG;
-
- ////jinhuan+
- //if (vec_jd_results.size() && vec_kzjl_results.size())
- //{
- // //从上往下第一个胶点的中心y值
- // int top_jd_y = vec_jd_results[0].y + vec_jd_results[0].height / 2;
- // //从上往下最后一个胶点的中心y值
- // int bottom_jd_y = vec_jd_results[vec_jd_results.size()-1].y + vec_jd_results[vec_jd_results.size()-1].height / 2;
- // //卡纸的上边沿y值
- // int top_kz_y = vec_kzjl_results[0].tl().y;
- // //卡纸的下边沿y值
- // int bottom_kz_y = vec_kzjl_results[0].br().y;
-
- // //if (abs(top_jd_y - top_kz_y) < local_SysConf.Up_jd_Space)IsNG=true;//像素
- // //if (abs(bottom_kz_y - bottom_jd_y) < local_SysConf.Down_jd_Space)IsNG = true;//像素
- //
-
- //}
- //else
- //{
- // IsNG = true;//卡纸和胶点数量不够
- //}
- //if (vec_kzzz_results.size() != 0) {//卡纸有褶皱
- // IsNG = true;
- //}
- //if (vec_bm_results.size() != 0) {//薄膜有褶皱
- // IsNG = true;
- //}
- //if (vec_qb_results.size() != 0) {//卡纸有翘边
- // IsNG = true;
- // IsNG_model2[2] = IsNG;
- //}
- ////jinhuan-
-
- for (int index = 0; index < unit_count; index++)
- {
- if (results_ng.size() != 0 || vec_results_ng[index].size() != 0) {//ng模型检测:有ng
- IsNG = true;
- IsNG_model2[index] = IsNG;
- }
- }
+ exportDataInfo.isNg = IsNG;
if (!IsNG)
{
- emit event_ok(local_camera_number);
- local_g_result_queue->put(true);
+ if (!g_debug_mode)
+ {
+ emit event_ok(local_camera_number);
+ local_g_result_queue->put(true);
+ }
}
else
{
@@ -271,24 +212,21 @@ void WorkThread::run()
{
for(int index=0;indexput(std::make_pair(file_name.toStdString(), m));
- /*m = vec_out[index].clone();
- file_name = g_conf_path.save_pics_path + "/ng_result/" +
- now_ts.toString("yyyy-MM-dd") + "/"
- + QString::number(local_camera_number + 1) + "/" + QString::number(index + 1) + "/" +
- now_ts.toString("yyyy-MM-dd_HH-mm-ss_zzz_") + QString::number(local_camera_number + 1) +
- "#" + "_" + QString::number(index + 1) + ".jpg";
- g_save_queue->put(std::make_pair(file_name.toStdString(), m));*/
- }
+ /*m = vec_out[index].clone();
+ file_name = "D:/image/" +
+ now_ts.toString("yyyy-MM-dd") +
+ "/" + QString::number(local_camera_number + 1) +
+ "/ng_result/" + QString::number(index) + "/" +
+ now_ts.toString("yyyy-MM-dd_HH-mm-ss_zzz_") + "_" + QString::number(index) + ".bmp";*/
+ //g_save_queue->put(std::make_pair(file_name.toStdString(), m));
+ g_save_queue->put(std::make_pair(file_name.toLocal8Bit().constData(), m));
}
}
}