22 Commits

Author SHA1 Message Date
cb4ab0970a modify screenshot for ubuntu installation 2023-01-13 12:27:09 +09:00
ab4c936d16 add installation guide for Ubuntu22.04 2023-01-13 12:24:52 +09:00
e3eea126e1 checkbox bug fix 2023-01-13 01:08:21 +09:00
7e92a54550 modify download link 2023-01-10 22:40:32 +09:00
78fb3a5458 Merge pull request #57 from developer0hye/v1.2
v1.2 README!!!!!!!
2023-01-10 22:16:14 +09:00
02c0e09b5c v1.2 README!!!!!!! 2023-01-10 22:15:15 +09:00
cab3dfcb8f Merge pull request #56 from e8035669/master
Visualize class names on the bounding box
2023-01-10 21:33:50 +09:00
cc3a188275 turn on or off visualization function with a check box 2023-01-10 21:32:09 +09:00
7796b8606d add shortcut for open file button and description for other functions 2023-01-10 21:31:04 +09:00
588bd80e8a add visualize class names checkbox 2023-01-10 20:54:53 +09:00
065ee35656 Ensure resized image has the same format with the input image. Add drawObjectLabels() to draw all the labels
Signed-off-by: Yu-Ren Zhang <e8035669@gmail.com>
2022-11-07 16:32:27 +08:00
037276bc01 add drawing object box with label
Signed-off-by: Yu-Ren Zhang <e8035669@gmail.com>
2022-11-07 16:32:27 +08:00
160a8cc3e8 Merge pull request #51 from kir19890817/fix-compile-for-ubuntu-20
fix: compile
2022-02-17 19:29:16 +09:00
e642436651 fix: compile 2022-01-29 08:10:48 +01:00
4606381495 Update download link v1.1.1 2021-11-30 01:00:41 +09:00
63bd34f3de Update README.md 2021-11-30 00:47:29 +09:00
748109d661 all new yolo label 2021-11-30 00:04:33 +09:00
065e0a68ad Update README.md 2021-11-28 15:26:31 +09:00
636cee6c8b Change Image and upload new image to show new function 2021-11-28 15:23:33 +09:00
ec6f0daaaa Upload raccoon image taken at night 2021-11-28 15:16:49 +09:00
6119e65c43 Add files via upload 2021-11-28 15:14:48 +09:00
6a5441d6d6 change download link v1.0.0 2021-11-26 00:23:08 +09:00
9 changed files with 487 additions and 529 deletions

View File

@ -1,10 +1,12 @@
# Yolo_Label # YOLO-Label
## Advertisement ## Sponsors
[plotbbox](https://github.com/developer0hye/plotbbox) : A Python package to plot pretty bounding boxes on image - AIM(https://www.aimdefence.com/)
<a href="https://www.aimdefence.com/">
<img src="https://user-images.githubusercontent.com/35001605/143895639-79b0b6b1-365f-4132-b272-f161d3ef5cb4.png" width="200">
</a>
[YOLOv3Tiny](https://github.com/developer0hye/YOLOv3Tiny) : PyTorch based YOLOv3Tiny implementation
## WHAT IS THIS?! ## WHAT IS THIS?!
Reinventing The Wheel?!!!! Reinventing The Wheel?!!!!
@ -31,11 +33,11 @@ But... I've reinvented one...
It's the **SENSITIVE** image-labeling tool for object detection! It's the **SENSITIVE** image-labeling tool for object detection!
![image](https://user-images.githubusercontent.com/35001605/47644151-bd369c80-dbb0-11e8-9505-d7ada78911c2.png) ![image](https://user-images.githubusercontent.com/35001605/211553495-66e81a7d-df00-44ca-82e4-966000cddbd1.png)
![ezgif-5-85c0613befb3](https://user-images.githubusercontent.com/35001605/47693025-3d094900-dc3b-11e8-9d96-ea2f7e37cf7a.gif) https://user-images.githubusercontent.com/35001605/211560039-367f27d7-63ab-4342-824e-9f47f2afbc35.mp4
![ezgif-5-c57fe634145b](https://user-images.githubusercontent.com/35001605/47693028-3f6ba300-dc3b-11e8-9e22-70c448d59398.gif) ![cut (2)](https://user-images.githubusercontent.com/35001605/143729909-b2da3669-020a-4769-ab1d-2646dd7bbb6b.gif)
## HMM... I SAW THIS DESIGN SOMEWHERE ## HMM... I SAW THIS DESIGN SOMEWHERE
I refer to [the website of Joseph Redmon](https://pjreddie.com/darknet/ I refer to [the website of Joseph Redmon](https://pjreddie.com/darknet/
@ -50,7 +52,7 @@ But... I've reinvented one...
### For Windows ### For Windows
2. Download [YOLOLabel_20210606_v3.2](https://drive.google.com/file/d/1h_7LRm-dYX3D653A1Sb6Mq0iWxjzugNw/view?usp=sharing) 2. Download [YOLOLabel_v1.2.1.zip](https://github.com/developer0hye/Yolo_Label/releases/download/v1.2.1/YoloLabel_v1.2.1.zip)
3. Unzip 3. Unzip
@ -58,6 +60,27 @@ But... I've reinvented one...
![image](https://user-images.githubusercontent.com/35001605/111152300-e74b5680-85d3-11eb-8df7-178148548c12.png) ![image](https://user-images.githubusercontent.com/35001605/111152300-e74b5680-85d3-11eb-8df7-178148548c12.png)
### For Ubuntu 22.04
2. Download [YOLOLabel_v1.2.1.tar](https://github.com/developer0hye/Yolo_Label/releases/download/v1.2.1/YoloLabel_v1.2.1.tar)
3. Unzip and download libraries
```
tar -xvf YoloLabel_v1.2.1.tar
sudo apt update
sudo apt-get install -y libgl1-mesa-dev
sudo apt-get install libxcb-*
sudo apt-get install libxkb*
```
4. Run YoloLabel.sh
```
./YoloLabel.sh
```
![image](https://user-images.githubusercontent.com/35001605/212230332-7e62bc50-7440-45c8-afc3-faebc0b31318.png)
### For macOS ### For macOS
2. Clone or download the source code of this repository 2. Clone or download the source code of this repository
@ -86,11 +109,11 @@ yourMacOS:Yolo_Label you$ ./YoloLabel.app/MacOS/YoloLabel
3. Run Yolo Label! 3. Run Yolo Label!
![image](https://user-images.githubusercontent.com/35001605/47644151-bd369c80-dbb0-11e8-9505-d7ada78911c2.png) ![image](https://user-images.githubusercontent.com/35001605/143729836-b2ee1188-f829-473f-aff0-d13569b3fc39.png)
4. Click the button 'Open Files' and open the folder with the images and the file('*'.names or '*'.txt) with the names of the objects. 4. Click the button 'Open Files' and open the folder with the images and the file('*'.names or '*'.txt) with the names of the objects.
![image](https://user-images.githubusercontent.com/35001605/47694149-d20e4100-dc3f-11e8-9d97-fba87a6e1b5a.png) ![image](https://user-images.githubusercontent.com/35001605/211560758-f119f562-9462-4ebe-86fa-a9c169b18993.png)
5. And... Label!... Welcome to Hell... I really hate this work in the world. 5. And... Label!... Welcome to Hell... I really hate this work in the world.
@ -124,6 +147,8 @@ To minimize wrist strain when labeling, I adopted the method **"twice left butto
| `D, Space` | Save and Next Image | | `D, Space` | Save and Next Image |
| `S` | Next Label <br> ![ezgif-5-f7ee77cd24c3](https://user-images.githubusercontent.com/35001605/47703190-d3049a00-dc62-11e8-846f-5bd91e98bdbc.gif) | | `S` | Next Label <br> ![ezgif-5-f7ee77cd24c3](https://user-images.githubusercontent.com/35001605/47703190-d3049a00-dc62-11e8-846f-5bd91e98bdbc.gif) |
| `W` | Prev Label <br> ![ezgif-5-ee915c66dad8](https://user-images.githubusercontent.com/35001605/47703191-d39d3080-dc62-11e8-800b-986ec214b80c.gif) | | `W` | Prev Label <br> ![ezgif-5-ee915c66dad8](https://user-images.githubusercontent.com/35001605/47703191-d39d3080-dc62-11e8-800b-986ec214b80c.gif) |
| `O` | Open Files |
| `V` | Visualize Calss Name |
| `Ctrl + S` | Save | | `Ctrl + S` | Save |
| `Ctrl + C` | Delete all existing bounding boxes in the image | | `Ctrl + C` | Delete all existing bounding boxes in the image |
| `Ctrl + D` | Delete current image | | `Ctrl + D` | Delete current image |
@ -138,6 +163,8 @@ To minimize wrist strain when labeling, I adopted the method **"twice left butto
### Remove ### Remove
It was replaced by the shortcut **Ctrl + D**.
![ezgif-2-90fb8205437e](https://user-images.githubusercontent.com/35001605/49983945-fbddb600-ffa8-11e8-9672-f7b71e4e603b.gif) ![ezgif-2-90fb8205437e](https://user-images.githubusercontent.com/35001605/49983945-fbddb600-ffa8-11e8-9672-f7b71e4e603b.gif)
## ETC ## ETC
@ -147,10 +174,13 @@ You can access all image by moving horizontal slider bar. But when you control h
![ezgif-5-53abf38b3387](https://user-images.githubusercontent.com/35001605/47708528-97bd9780-dc71-11e8-94f1-5ee23776d5fe.gif) ![ezgif-5-53abf38b3387](https://user-images.githubusercontent.com/35001605/47708528-97bd9780-dc71-11e8-94f1-5ee23776d5fe.gif)
# CONCLUSIONS # CONCLUSIONS
I've reinvented the wheel. I've reinvented the wheel.
![dont-reinvent-the-wheel](https://user-images.githubusercontent.com/35001605/47709289-46160c80-dc73-11e8-8ef6-6af3a3c52403.jpg) ![dont-reinvent-the-wheel](https://user-images.githubusercontent.com/35001605/47709289-46160c80-dc73-11e8-8ef6-6af3a3c52403.jpg)
# TO DO LISTS # TO DO LISTS
Upload binary file for easy usage for windows and ubuntu Upload binary file for easy usage for windows and ubuntu
deployment for ubuntu deployment for ubuntu

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

BIN
Samples/raccoon_6.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

View File

@ -20,7 +20,7 @@ DEFINES += QT_DEPRECATED_WARNINGS
# You can also select to disable deprecated APIs only up to a certain version of Qt. # You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
CONFIG += c++11 CONFIG += c++1z
SOURCES += \ SOURCES += \
main.cpp \ main.cpp \

View File

@ -2,6 +2,8 @@
#include <QPainter> #include <QPainter>
#include <QImageReader> #include <QImageReader>
#include <math.h> /* fabs */ #include <math.h> /* fabs */
#include <algorithm>
//#include <omp.h>
using std::ifstream; using std::ifstream;
@ -123,6 +125,8 @@ void label_img::openImage(const QString &qstrImg, bool &ret)
m_inputImg = img.copy(); m_inputImg = img.copy();
m_inputImg = m_inputImg.convertToFormat(QImage::Format_RGB888); m_inputImg = m_inputImg.convertToFormat(QImage::Format_RGB888);
m_resized_inputImg = m_inputImg.scaled(this->width(), this->height(),Qt::IgnoreAspectRatio,Qt::SmoothTransformation)
.convertToFormat(QImage::Format_RGB888);
m_bLabelingStarted = false; m_bLabelingStarted = false;
@ -143,10 +147,22 @@ void label_img::openImage(const QString &qstrImg, bool &ret)
void label_img::showImage() void label_img::showImage()
{ {
if(m_inputImg.isNull()) return; if(m_inputImg.isNull()) return;
if(m_resized_inputImg.width() != this->width() or m_resized_inputImg.height() != this->height())
{
m_resized_inputImg = m_inputImg.scaled(this->width(), this->height(),Qt::IgnoreAspectRatio,Qt::SmoothTransformation)
.convertToFormat(QImage::Format_RGB888);
}
QImage imageOnUi = m_inputImg.scaled(this->width(), this->height(),Qt::IgnoreAspectRatio,Qt::SmoothTransformation); QImage img = m_resized_inputImg;
QPainter painter(&imageOnUi); gammaTransform(img);
QPainter painter(&img);
QFont font = painter.font();
int fontSize = 16, xMargin = 5, yMargin = 2;
font.setPixelSize(fontSize);
font.setBold(true);
painter.setFont(font);
int penThick = 3; int penThick = 3;
@ -155,8 +171,10 @@ void label_img::showImage()
drawCrossLine(painter, crossLineColor, penThick); drawCrossLine(painter, crossLineColor, penThick);
drawFocusedObjectBox(painter, Qt::magenta, penThick); drawFocusedObjectBox(painter, Qt::magenta, penThick);
drawObjectBoxes(painter, penThick); drawObjectBoxes(painter, penThick);
if(m_bVisualizeClassName)
drawObjectLabels(painter, penThick, fontSize, xMargin, yMargin);
this->setPixmap(QPixmap::fromImage(imageOnUi)); this->setPixmap(QPixmap::fromImage(img));
} }
void label_img::loadLabelData(const QString& labelFilePath) void label_img::loadLabelData(const QString& labelFilePath)
@ -270,6 +288,61 @@ void label_img::drawObjectBoxes(QPainter& painter, int thickWidth)
} }
} }
void label_img::drawObjectLabels(QPainter& painter, int thickWidth, int fontPixelSize, int xMargin, int yMargin)
{
QFontMetrics fontMetrics = painter.fontMetrics();
QPen blackPen;
for(ObjectLabelingBox boundingbox: m_objBoundingBoxes)
{
QColor labelColor = m_drawObjectBoxColor.at(boundingbox.label);
QRect rectUi = cvtRelativeToAbsoluteRectInUi(boundingbox.box);
QRect labelRect = fontMetrics.boundingRect(m_objList.at(boundingbox.label));
if (rectUi.top() > fontPixelSize + yMargin * 2 + thickWidth + 1) {
labelRect.moveTo(rectUi.topLeft() + QPoint(-thickWidth / 2, -(fontPixelSize + yMargin * 2 + thickWidth + 1)));
labelRect.adjust(0, 0, xMargin * 2, yMargin * 2);
} else {
labelRect.moveTo(rectUi.topLeft() + QPoint(-thickWidth / 2, 0));
labelRect.adjust(0, 0, xMargin * 2, yMargin * 2);
}
painter.fillRect(labelRect, labelColor);
if (qGray(m_drawObjectBoxColor.at(boundingbox.label).rgb()) > 120) {
blackPen.setColor(QColorConstants::Black);
} else {
blackPen.setColor(QColorConstants::White);
}
painter.setPen(blackPen);
painter.drawText(labelRect.topLeft() + QPoint(xMargin, yMargin + fontPixelSize), m_objList.at(boundingbox.label));
}
}
void label_img::gammaTransform(QImage &image)
{
uchar* bits = image.bits();
int h = image.height();
int w = image.width();
//#pragma omp parallel for collapse(2)
for(int y = 0 ; y < h; ++y)
{
for(int x = 0; x < w; ++x)
{
int index_pixel = (y*w+x)*3;
unsigned char r = bits[index_pixel + 0];
unsigned char g = bits[index_pixel + 1];
unsigned char b = bits[index_pixel + 2];
bits[index_pixel + 0] = m_gammatransform_lut[r];
bits[index_pixel + 1] = m_gammatransform_lut[g];
bits[index_pixel + 2] = m_gammatransform_lut[b];
}
}
}
void label_img::removeFocusedObjectBox(QPointF point) void label_img::removeFocusedObjectBox(QPointF point)
{ {
int removeBoxIdx = -1; int removeBoxIdx = -1;
@ -334,3 +407,14 @@ QPointF label_img::cvtAbsoluteToRelativePoint(QPoint p)
{ {
return QPointF(static_cast<double>(p.x()) / this->width(), static_cast<double>(p.y()) / this->height()); return QPointF(static_cast<double>(p.x()) / this->width(), static_cast<double>(p.y()) / this->height());
} }
void label_img::setContrastGamma(float gamma)
{
for(int i=0; i < 256; i++)
{
int s = (int)(pow((float)i/255., gamma) * 255.);
s = std::clamp(s, 0, 255);
m_gammatransform_lut[i] = (unsigned char)s;
}
showImage();
}

View File

@ -25,6 +25,7 @@ public:
void mouseReleaseEvent(QMouseEvent *ev); void mouseReleaseEvent(QMouseEvent *ev);
QVector<QColor> m_drawObjectBoxColor; QVector<QColor> m_drawObjectBoxColor;
QStringList m_objList;
int m_uiX; int m_uiX;
int m_uiY; int m_uiY;
@ -33,6 +34,7 @@ public:
int m_imgY; int m_imgY;
bool m_bLabelingStarted; bool m_bLabelingStarted;
bool m_bVisualizeClassName;
static QColor BOX_COLORS[10]; static QColor BOX_COLORS[10];
@ -46,7 +48,7 @@ public:
void setFocusObjectLabel(int); void setFocusObjectLabel(int);
void setFocusObjectName(QString); void setFocusObjectName(QString);
void setContrastGamma(float);
bool isOpened(); bool isOpened();
QImage crop(QRect); QImage crop(QRect);
@ -59,6 +61,7 @@ public:
QPoint cvtRelativeToAbsolutePoint(QPointF); QPoint cvtRelativeToAbsolutePoint(QPointF);
QPointF cvtAbsoluteToRelativePoint(QPoint); QPointF cvtAbsoluteToRelativePoint(QPoint);
signals: signals:
void Mouse_Moved(); void Mouse_Moved();
void Mouse_Pressed(); void Mouse_Pressed();
@ -72,16 +75,21 @@ private:
double m_aspectRatioHeight; double m_aspectRatioHeight;
QImage m_inputImg; QImage m_inputImg;
QImage m_resized_inputImg;
QPointF m_relative_mouse_pos_in_ui; QPointF m_relative_mouse_pos_in_ui;
QPointF m_relatvie_mouse_pos_LBtnClicked_in_ui; QPointF m_relatvie_mouse_pos_LBtnClicked_in_ui;
unsigned char m_gammatransform_lut[256];
QVector<QRgb> colorTable;
void setMousePosition(int , int); void setMousePosition(int , int);
void drawCrossLine(QPainter& , QColor , int thickWidth = 3); void drawCrossLine(QPainter& , QColor , int thickWidth = 3);
void drawFocusedObjectBox(QPainter& , Qt::GlobalColor , int thickWidth = 3); void drawFocusedObjectBox(QPainter& , Qt::GlobalColor , int thickWidth = 3);
void drawObjectBoxes(QPainter& , int thickWidth = 3); void drawObjectBoxes(QPainter& , int thickWidth = 3);
void drawObjectLabels(QPainter& , int thickWidth = 3, int fontPixelSize = 14, int xMargin = 5, int yMargin = 2);
void gammaTransform(QImage& image);
void removeFocusedObjectBox(QPointF); void removeFocusedObjectBox(QPointF);
}; };

View File

@ -8,6 +8,7 @@
#include <QShortcut> #include <QShortcut>
#include <QCollator> #include <QCollator>
#include <iomanip> #include <iomanip>
#include <cmath>
using std::cout; using std::cout;
using std::endl; using std::endl;
@ -43,33 +44,36 @@ MainWindow::~MainWindow()
void MainWindow::on_pushButton_open_files_clicked() void MainWindow::on_pushButton_open_files_clicked()
{ {
bool bRetImgDir = false; bool bRetImgDir = false;
open_img_dir(bRetImgDir);
if (!bRetImgDir) return ;
if (m_objList.empty())
{
bool bRetObjFile = false; bool bRetObjFile = false;
open_img_dir(bRetImgDir);
if (!bRetImgDir) return ;
open_obj_file(bRetObjFile); open_obj_file(bRetObjFile);
if (!bRetObjFile) return ; if (!bRetObjFile) return ;
}
init(); init();
} }
void MainWindow::on_pushButton_change_dir_clicked() //void MainWindow::on_pushButton_change_dir_clicked()
{ //{
bool bRetImgDir = false; // bool bRetImgDir = false;
open_img_dir(bRetImgDir); // open_img_dir(bRetImgDir);
if (!bRetImgDir) return ; // if (!bRetImgDir) return ;
init(); // init();
} //}
void MainWindow::init() void MainWindow::init()
{ {
m_lastLabeledImgIndex = -1;
ui->label_image->init(); ui->label_image->init();
init_button_event(); init_button_event();
@ -89,7 +93,17 @@ void MainWindow::set_label_progress(const int fileIndex)
void MainWindow::set_focused_file(const int fileIndex) void MainWindow::set_focused_file(const int fileIndex)
{ {
ui->label_file->setText("File: " + m_imgList.at(fileIndex)); QString str = "";
if(m_lastLabeledImgIndex >= 0)
{
str += "Last Labeled Image: " + m_imgList.at(m_lastLabeledImgIndex);
str += '\n';
}
str += "Current Image: " + m_imgList.at(fileIndex);
ui->textEdit_log->setText(str);
} }
void MainWindow::goto_img(const int fileIndex) void MainWindow::goto_img(const int fileIndex)
@ -126,7 +140,7 @@ void MainWindow::prev_img(bool bSavePrev)
goto_img(m_imgIndex - 1); goto_img(m_imgIndex - 1);
} }
void MainWindow::save_label_data()const void MainWindow::save_label_data()
{ {
if(m_imgList.size() == 0) return; if(m_imgList.size() == 0) return;
@ -139,21 +153,6 @@ void MainWindow::save_label_data()const
{ {
ObjectLabelingBox objBox = ui->label_image->m_objBoundingBoxes[i]; ObjectLabelingBox objBox = ui->label_image->m_objBoundingBoxes[i];
if(ui->checkBox_cropping->isChecked())
{
QImage cropped = ui->label_image->crop(ui->label_image->cvtRelativeToAbsoluteRectInImage(objBox.box));
if(!cropped.isNull())
{
string strImgFile = m_imgList.at(m_imgIndex).toStdString();
strImgFile = strImgFile.substr( strImgFile.find_last_of('/') + 1,
strImgFile.find_last_of('.') - strImgFile.find_last_of('/') - 1);
cropped.save(QString().fromStdString(strImgFile) + "_cropped_" + QString::number(i) + ".png");
}
}
double midX = objBox.box.x() + objBox.box.width() / 2.; double midX = objBox.box.x() + objBox.box.width() / 2.;
double midY = objBox.box.y() + objBox.box.height() / 2.; double midY = objBox.box.y() + objBox.box.height() / 2.;
double width = objBox.box.width(); double width = objBox.box.width();
@ -169,10 +168,8 @@ void MainWindow::save_label_data()const
fileOutputLabelData << " "; fileOutputLabelData << " ";
fileOutputLabelData << std::fixed << std::setprecision(6) << height << std::endl; fileOutputLabelData << std::fixed << std::setprecision(6) << height << std::endl;
} }
m_lastLabeledImgIndex = m_imgIndex;
fileOutputLabelData.close(); fileOutputLabelData.close();
ui->textEdit_log->setText(qstrOutputLabelData + " saved.");
} }
} }
@ -201,7 +198,7 @@ void MainWindow::remove_img()
} }
else if( m_imgIndex == m_imgList.size()) else if( m_imgIndex == m_imgList.size())
{ {
m_imgIndex --; m_imgIndex--;
} }
goto_img(m_imgIndex); goto_img(m_imgIndex);
@ -253,6 +250,7 @@ void MainWindow::load_label_list_data(QString qstrLabelListFile)
ui->label_image->m_drawObjectBoxColor.push_back(labelColor); ui->label_image->m_drawObjectBoxColor.push_back(labelColor);
} }
ui->label_image->m_objList = m_objList;
} }
} }
@ -363,11 +361,6 @@ void MainWindow::open_obj_file(bool& ret)
} }
} }
void MainWindow::reupdate_img_list()
{
}
void MainWindow::wheelEvent(QWheelEvent *ev) void MainWindow::wheelEvent(QWheelEvent *ev)
{ {
if(ev->angleDelta().y() > 0) // up Wheel if(ev->angleDelta().y() > 0) // up Wheel
@ -408,15 +401,15 @@ void MainWindow::keyPressEvent(QKeyEvent * event)
} }
} }
void MainWindow::on_pushButton_save_clicked() //void MainWindow::on_pushButton_save_clicked()
{ //{
save_label_data(); // save_label_data();
} //}
void MainWindow::on_pushButton_remove_clicked() //void MainWindow::on_pushButton_remove_clicked()
{ //{
remove_img(); // remove_img();
} //}
void MainWindow::on_tableWidget_label_cellDoubleClicked(int row, int column) void MainWindow::on_tableWidget_label_cellDoubleClicked(int row, int column)
{ {
@ -447,11 +440,7 @@ void MainWindow::on_horizontalSlider_images_sliderMoved(int position)
void MainWindow::init_button_event() void MainWindow::init_button_event()
{ {
ui->pushButton_change_dir->setEnabled(true); // ui->pushButton_change_dir->setEnabled(true);
ui->pushButton_next->setEnabled(true);
ui->pushButton_prev->setEnabled(true);
ui->pushButton_save->setEnabled(true);
ui->pushButton_remove->setEnabled(true);
} }
void MainWindow::init_horizontal_slider() void MainWindow::init_horizontal_slider()
@ -461,6 +450,12 @@ void MainWindow::init_horizontal_slider()
ui->horizontalSlider_images->blockSignals(true); ui->horizontalSlider_images->blockSignals(true);
ui->horizontalSlider_images->setValue(0); ui->horizontalSlider_images->setValue(0);
ui->horizontalSlider_images->blockSignals(false); ui->horizontalSlider_images->blockSignals(false);
ui->horizontalSlider_contrast->setEnabled(true);
ui->horizontalSlider_contrast->setRange(0, 1000);
ui->horizontalSlider_contrast->setValue(ui->horizontalSlider_contrast->maximum()/2);
ui->label_image->setContrastGamma(1.0);
ui->label_contrast->setText(QString("Contrast(%) ") + QString::number(50));
} }
void MainWindow::init_table_widget() void MainWindow::init_table_widget()
@ -471,3 +466,18 @@ void MainWindow::init_table_widget()
disconnect(ui->tableWidget_label->horizontalHeader(), SIGNAL(sectionPressed(int)),ui->tableWidget_label, SLOT(selectColumn(int))); disconnect(ui->tableWidget_label->horizontalHeader(), SIGNAL(sectionPressed(int)),ui->tableWidget_label, SLOT(selectColumn(int)));
} }
void MainWindow::on_horizontalSlider_contrast_sliderMoved(int value)
{
float valueToPercentage = float(value)/ui->horizontalSlider_contrast->maximum(); //[0, 1.0]
float percentageToGamma = std::pow(1/(valueToPercentage + 0.5), 7.);
ui->label_image->setContrastGamma(percentageToGamma);
ui->label_contrast->setText(QString("Contrast(%) ") + QString::number(int(valueToPercentage * 100.)));
}
void MainWindow::on_checkBox_visualize_class_name_clicked(bool checked)
{
ui->label_image->m_bVisualizeClassName = checked;
ui->label_image->showImage();
}

View File

@ -23,10 +23,6 @@ public:
private slots: private slots:
void on_pushButton_open_files_clicked(); void on_pushButton_open_files_clicked();
void on_pushButton_change_dir_clicked();
void on_pushButton_save_clicked();
void on_pushButton_remove_clicked();
void on_pushButton_prev_clicked(); void on_pushButton_prev_clicked();
void on_pushButton_next_clicked(); void on_pushButton_next_clicked();
@ -34,7 +30,7 @@ private slots:
void next_img(bool bSavePrev = true); void next_img(bool bSavePrev = true);
void prev_img(bool bSavePrev = true); void prev_img(bool bSavePrev = true);
void save_label_data() const; void save_label_data();
void clear_label_data(); void clear_label_data();
void remove_img(); void remove_img();
@ -46,6 +42,10 @@ private slots:
void on_horizontalSlider_images_sliderMoved(int ); void on_horizontalSlider_images_sliderMoved(int );
void on_horizontalSlider_contrast_sliderMoved(int value);
void on_checkBox_visualize_class_name_clicked(bool checked);
private: private:
void init(); void init();
void init_table_widget(); void init_table_widget();
@ -69,8 +69,6 @@ private:
void open_img_dir(bool&); void open_img_dir(bool&);
void open_obj_file(bool&); void open_obj_file(bool&);
void reupdate_img_list();
Ui::MainWindow *ui; Ui::MainWindow *ui;
QString m_imgDir; QString m_imgDir;
@ -79,6 +77,8 @@ private:
QStringList m_objList; QStringList m_objList;
int m_objIndex; int m_objIndex;
int m_lastDeletedImgIndex;
int m_lastLabeledImgIndex;
protected: protected:
void wheelEvent(QWheelEvent *); void wheelEvent(QWheelEvent *);

View File

@ -6,20 +6,20 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>1528</width> <width>1180</width>
<height>953</height> <height>693</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>1400</width> <width>1180</width>
<height>920</height> <height>640</height>
</size> </size>
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
@ -38,58 +38,6 @@
<string notr="true">background-color : rgb(0, 0, 17);</string> <string notr="true">background-color : rgb(0, 0, 17);</string>
</property> </property>
<widget class="QWidget" name="centralWidget"> <widget class="QWidget" name="centralWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>1363</width>
<height>867</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QLabel" name="label_file">
<property name="minimumSize">
<size>
<width>1275</width>
<height>20</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>20</height>
</size>
</property>
<property name="font">
<font>
<pointsize>13</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">color : rgb(255, 187, 0);</string>
</property>
<property name="text">
<string>File:</string>
</property>
</widget>
</item>
<item>
<widget class="label_img" name="label_image">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch> <horstretch>0</horstretch>
@ -98,12 +46,38 @@
</property> </property>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>1280</width> <width>1180</width>
<height>720</height> <height>610</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>165555</width>
<height>165555</height>
</size>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="3" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="label_img" name="label_image">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>540</width>
<height>360</height>
</size> </size>
</property> </property>
<property name="font"> <property name="font">
<font> <font>
<family>Arial</family>
<pointsize>18</pointsize> <pointsize>18</pointsize>
<weight>75</weight> <weight>75</weight>
<bold>true</bold> <bold>true</bold>
@ -133,7 +107,7 @@ border-color: rgb(0, 255, 255);}
<number>3</number> <number>3</number>
</property> </property>
<property name="text"> <property name="text">
<string>Open Data Set Directory...</string> <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Open a Dataset Directory...&lt;/p&gt;&lt;p&gt;D: Next Image&lt;/p&gt;&lt;p&gt;A: Prev Image&lt;/p&gt;&lt;p&gt;S: Next Class&lt;/p&gt;&lt;p&gt;W: Prev Class&lt;/p&gt;&lt;p&gt;V: Visualize Class Name&lt;/p&gt;&lt;p&gt;O: Open Files&lt;br/&gt;Ctrl + S: Save&lt;/p&gt;&lt;p&gt;Ctrl + D: Delete an Image&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property> </property>
<property name="scaledContents"> <property name="scaledContents">
<bool>true</bool> <bool>true</bool>
@ -150,95 +124,121 @@ border-color: rgb(0, 255, 255);}
</widget> </widget>
</item> </item>
<item> <item>
<layout class="QVBoxLayout" name="verticalLayout_2"> <layout class="QHBoxLayout" name="horizontalLayout_3"/>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QSlider" name="horizontalSlider_contrast">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>560</width>
<height>22</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>42</height>
</size>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="styleSheet">
<string notr="true">
QSlider::groove:horizontal {
border: 1px solid #999999;
height: 8px; /* the groove expands to the size of the slider by default. by giving it a height, it has a fixed size */
background: rgb(0, 255, 255);
margin: 2px 0;
}
QSlider::handle:horizontal {
background: rgb(255, 187, 0);
border: 1px solid #5c5c5c;
width: 18px;
margin: -10px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */
border-radius: 3px;
}
</string>
</property>
<property name="maximum">
<number>0</number>
</property>
<property name="pageStep">
<number>0</number>
</property>
<property name="tracking">
<bool>true</bool>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_contrast">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>160</width>
<height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>42</height>
</size>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">background-color : rgb(0, 0, 17);color : rgb(0, 255, 255);
border-style: outset;
border-width: 2px;
border-color: rgb(0, 255, 255);</string>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="lineWidth">
<number>2</number>
</property>
<property name="text">
<string>Contrast</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item> <item>
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="pushButton_prev">
<property name="enabled">
<bool>false</bool>
</property>
<property name="minimumSize">
<size>
<width>75</width>
<height>23</height>
</size>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="styleSheet">
<string notr="true">background-color : rgb(0, 0, 17);color : rgb(0, 255, 255);
border-style: outset;
border-width: 2px;
border-color: rgb(0, 255, 255);</string>
</property>
<property name="text">
<string>Prev</string>
</property>
<property name="shortcut">
<string/>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
<property name="default">
<bool>false</bool>
</property>
<property name="flat">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_next">
<property name="enabled">
<bool>false</bool>
</property>
<property name="minimumSize">
<size>
<width>75</width>
<height>23</height>
</size>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="styleSheet">
<string notr="true">background-color : rgb(0, 0, 17);color : rgb(0, 255, 255);
border-style: outset;
border-width: 2px;
border-color: rgb(0, 255, 255);</string>
</property>
<property name="text">
<string>Next</string>
</property>
<property name="shortcut">
<string>Del</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
<property name="default">
<bool>false</bool>
</property>
<property name="flat">
<bool>false</bool>
</property>
</widget>
</item>
<item> <item>
<widget class="QSlider" name="horizontalSlider_images"> <widget class="QSlider" name="horizontalSlider_images">
<property name="enabled"> <property name="enabled">
@ -252,12 +252,18 @@ border-color: rgb(0, 255, 255);</string>
</property> </property>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>881</width> <width>560</width>
<height>22</height> <height>22</height>
</size> </size>
</property> </property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>42</height>
</size>
</property>
<property name="focusPolicy"> <property name="focusPolicy">
<enum>Qt::ClickFocus</enum> <enum>Qt::NoFocus</enum>
</property> </property>
<property name="styleSheet"> <property name="styleSheet">
<string notr="true"> <string notr="true">
@ -302,12 +308,20 @@ QSlider::handle:horizontal {
</property> </property>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>211</width> <width>160</width>
<height>21</height> <height>23</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>42</height>
</size> </size>
</property> </property>
<property name="font"> <property name="font">
<font> <font>
<family>Arial</family>
<pointsize>12</pointsize>
<weight>75</weight> <weight>75</weight>
<bold>true</bold> <bold>true</bold>
</font> </font>
@ -335,23 +349,37 @@ border-color: rgb(0, 255, 255);</string>
</layout> </layout>
</item> </item>
<item> <item>
<layout class="QHBoxLayout" name="horizontalLayout_2"> <layout class="QHBoxLayout" name="horizontalLayout_4">
<item> <item>
<widget class="QPushButton" name="pushButton_open_files"> <widget class="QPushButton" name="pushButton_open_files">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>200</width> <width>160</width>
<height>91</height> <height>25</height>
</size> </size>
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>16777215</width> <width>200</width>
<height>91</height> <height>60</height>
</size>
</property>
<property name="baseSize">
<size>
<width>0</width>
<height>0</height>
</size> </size>
</property> </property>
<property name="font"> <property name="font">
<font> <font>
<family>Arial</family>
<pointsize>12</pointsize>
<weight>75</weight> <weight>75</weight>
<bold>true</bold> <bold>true</bold>
<kerning>true</kerning> <kerning>true</kerning>
@ -369,96 +397,8 @@ border-color: rgb(0, 255, 255);</string>
<property name="text"> <property name="text">
<string>Open Files</string> <string>Open Files</string>
</property> </property>
<property name="autoDefault">
<bool>false</bool>
</property>
<property name="default">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_change_dir">
<property name="enabled">
<bool>false</bool>
</property>
<property name="minimumSize">
<size>
<width>200</width>
<height>91</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>91</height>
</size>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
<kerning>true</kerning>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="styleSheet">
<string notr="true">background-color : rgb(0, 0, 17);color : rgb(0, 255, 255);
border-style: outset;
border-width: 2px;
border-color: rgb(0, 255, 255);</string>
</property>
<property name="text">
<string>Change Directory</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
<property name="default">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_save">
<property name="enabled">
<bool>false</bool>
</property>
<property name="minimumSize">
<size>
<width>200</width>
<height>91</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>91</height>
</size>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
<kerning>true</kerning>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="styleSheet">
<string notr="true">background-color : rgb(0, 0, 17);color : rgb(0, 255, 255);
border-style: outset;
border-width: 2px;
border-color: rgb(0, 255, 255);</string>
</property>
<property name="text">
<string>Save</string>
</property>
<property name="shortcut"> <property name="shortcut">
<string/> <string>O</string>
</property> </property>
<property name="autoDefault"> <property name="autoDefault">
<bool>false</bool> <bool>false</bool>
@ -466,141 +406,32 @@ border-color: rgb(0, 255, 255);</string>
<property name="default"> <property name="default">
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="flat">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_remove">
<property name="enabled">
<bool>false</bool>
</property>
<property name="minimumSize">
<size>
<width>200</width>
<height>91</height>
</size>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="styleSheet">
<string notr="true">background-color : rgb(0, 0, 17);color : rgb(0, 255, 255);
border-style: outset;
border-width: 2px;
border-color: rgb(0, 255, 255);</string>
</property>
<property name="text">
<string>Remove</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_cropping">
<property name="minimumSize">
<size>
<width>100</width>
<height>21</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>16777215</height>
</size>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="cursor">
<cursorShape>ArrowCursor</cursorShape>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="styleSheet">
<string notr="true">background-color : rgb(0, 0, 17);color : rgb(0, 255, 255);
border-style: outset;
border-width: 2px;
border-color: rgb(0, 255, 255);</string>
</property>
<property name="text">
<string>with crop</string>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label_log">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>41</width>
<height>15</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>15</height>
</size>
</property>
<property name="font">
<font>
<weight>75</weight>
<italic>false</italic>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">color : rgb(0, 255, 255);</string>
</property>
<property name="text">
<string>Log</string>
</property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QTextEdit" name="textEdit_log"> <widget class="QTextEdit" name="textEdit_log">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed"> <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>545</width> <width>560</width>
<height>70</height> <height>25</height>
</size> </size>
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>16777215</width> <width>16777215</width>
<height>70</height> <height>60</height>
</size> </size>
</property> </property>
<property name="font"> <property name="font">
<font> <font>
<family>Arial</family>
<pointsize>12</pointsize>
<weight>75</weight> <weight>75</weight>
<bold>true</bold> <bold>true</bold>
</font> </font>
@ -620,54 +451,23 @@ border-color: rgb(0, 255, 255);</string>
<property name="readOnly"> <property name="readOnly">
<bool>true</bool> <bool>true</bool>
</property> </property>
</widget> <property name="html">
</item> <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
</layout> &lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
</item> p, li { white-space: pre-wrap; }
</layout> &lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Arial'; font-size:12pt; font-weight:600; font-style:normal;&quot;&gt;
</item> &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'Gulim'; font-size:9pt;&quot;&gt;Last Labeled Image:&lt;br /&gt;Current Image:&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</layout>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QLabel" name="label_table_widget_padding">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>220</width>
<height>20</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>220</width>
<height>20</height>
</size>
</property>
<property name="font">
<font>
<pointsize>13</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string/>
</property> </property>
</widget> </widget>
</item> </item>
</layout>
</item>
</layout>
</item>
<item> <item>
<widget class="QTableWidget" name="tableWidget_label"> <widget class="QTableWidget" name="tableWidget_label">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
@ -675,12 +475,12 @@ border-color: rgb(0, 255, 255);</string>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>220</width> <width>220</width>
<height>851</height> <height>360</height>
</size> </size>
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>220</width> <width>330</width>
<height>16777215</height> <height>16777215</height>
</size> </size>
</property> </property>
@ -744,12 +544,12 @@ QTableView {
<attribute name="horizontalHeaderVisible"> <attribute name="horizontalHeaderVisible">
<bool>false</bool> <bool>false</bool>
</attribute> </attribute>
<attribute name="horizontalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize"> <attribute name="horizontalHeaderMinimumSectionSize">
<number>40</number> <number>40</number>
</attribute> </attribute>
<attribute name="horizontalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderShowSortIndicator" stdset="0"> <attribute name="horizontalHeaderShowSortIndicator" stdset="0">
<bool>true</bool> <bool>true</bool>
</attribute> </attribute>
@ -779,6 +579,32 @@ QTableView {
</item> </item>
</layout> </layout>
</item> </item>
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<widget class="QCheckBox" name="checkBox_visualize_class_name">
<property name="font">
<font>
<family>Arial</family>
<pointsize>12</pointsize>
<underline>false</underline>
<strikeout>false</strikeout>
</font>
</property>
<property name="styleSheet">
<string notr="true">background-color : rgb(0, 0, 17);color : rgb(0, 255, 255);
</string>
</property>
<property name="text">
<string>Visualize Class Name</string>
</property>
<property name="shortcut">
<string>V</string>
</property>
</widget>
</item>
</layout>
</item>
</layout> </layout>
</widget> </widget>
<widget class="QMenuBar" name="menuBar"> <widget class="QMenuBar" name="menuBar">
@ -786,8 +612,8 @@ QTableView {
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>1528</width> <width>1180</width>
<height>23</height> <height>21</height>
</rect> </rect>
</property> </property>
</widget> </widget>