21 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
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?!
Reinventing The Wheel?!!!!
@ -31,11 +33,11 @@ But... I've reinvented one...
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
I refer to [the website of Joseph Redmon](https://pjreddie.com/darknet/
@ -50,7 +52,7 @@ But... I've reinvented one...
### For Windows
2. Download [YOLOLabel_20211126_v1.0](https://github.com/developer0hye/Yolo_Label/releases/download/v1.0.0/YoloLabel_v1.0.0.zip)
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
@ -58,6 +60,27 @@ But... I've reinvented one...
![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
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!
![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.
![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.
@ -124,6 +147,8 @@ To minimize wrist strain when labeling, I adopted the method **"twice left butto
| `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) |
| `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 + C` | Delete all existing bounding boxes in the image |
| `Ctrl + D` | Delete current image |
@ -138,6 +163,8 @@ To minimize wrist strain when labeling, I adopted the method **"twice left butto
### 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)
## 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)
# CONCLUSIONS
I've reinvented the wheel.
![dont-reinvent-the-wheel](https://user-images.githubusercontent.com/35001605/47709289-46160c80-dc73-11e8-8ef6-6af3a3c52403.jpg)
# TO DO LISTS
Upload binary file for easy usage for windows and 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.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
CONFIG += c++11
CONFIG += c++1z
SOURCES += \
main.cpp \

View File

@ -2,6 +2,8 @@
#include <QPainter>
#include <QImageReader>
#include <math.h> /* fabs */
#include <algorithm>
//#include <omp.h>
using std::ifstream;
@ -123,6 +125,8 @@ void label_img::openImage(const QString &qstrImg, bool &ret)
m_inputImg = img.copy();
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;
@ -143,10 +147,22 @@ void label_img::openImage(const QString &qstrImg, bool &ret)
void label_img::showImage()
{
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;
@ -155,8 +171,10 @@ void label_img::showImage()
drawCrossLine(painter, crossLineColor, penThick);
drawFocusedObjectBox(painter, Qt::magenta, 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)
@ -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)
{
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());
}
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);
QVector<QColor> m_drawObjectBoxColor;
QStringList m_objList;
int m_uiX;
int m_uiY;
@ -33,6 +34,7 @@ public:
int m_imgY;
bool m_bLabelingStarted;
bool m_bVisualizeClassName;
static QColor BOX_COLORS[10];
@ -46,7 +48,7 @@ public:
void setFocusObjectLabel(int);
void setFocusObjectName(QString);
void setContrastGamma(float);
bool isOpened();
QImage crop(QRect);
@ -59,6 +61,7 @@ public:
QPoint cvtRelativeToAbsolutePoint(QPointF);
QPointF cvtAbsoluteToRelativePoint(QPoint);
signals:
void Mouse_Moved();
void Mouse_Pressed();
@ -72,16 +75,21 @@ private:
double m_aspectRatioHeight;
QImage m_inputImg;
QImage m_resized_inputImg;
QPointF m_relative_mouse_pos_in_ui;
QPointF m_relatvie_mouse_pos_LBtnClicked_in_ui;
unsigned char m_gammatransform_lut[256];
QVector<QRgb> colorTable;
void setMousePosition(int , int);
void drawCrossLine(QPainter& , QColor , int thickWidth = 3);
void drawFocusedObjectBox(QPainter& , Qt::GlobalColor , 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);
};

View File

@ -8,6 +8,7 @@
#include <QShortcut>
#include <QCollator>
#include <iomanip>
#include <cmath>
using std::cout;
using std::endl;
@ -43,33 +44,36 @@ MainWindow::~MainWindow()
void MainWindow::on_pushButton_open_files_clicked()
{
bool bRetImgDir = false;
bool bRetObjFile = false;
open_img_dir(bRetImgDir);
if (!bRetImgDir) return ;
open_obj_file(bRetObjFile);
if (!bRetObjFile) return ;
if (m_objList.empty())
{
bool bRetObjFile = false;
open_obj_file(bRetObjFile);
if (!bRetObjFile) return ;
}
init();
}
void MainWindow::on_pushButton_change_dir_clicked()
{
bool bRetImgDir = false;
//void MainWindow::on_pushButton_change_dir_clicked()
//{
// bool bRetImgDir = false;
open_img_dir(bRetImgDir);
// open_img_dir(bRetImgDir);
if (!bRetImgDir) return ;
// if (!bRetImgDir) return ;
init();
}
// init();
//}
void MainWindow::init()
{
m_lastLabeledImgIndex = -1;
ui->label_image->init();
init_button_event();
@ -89,7 +93,17 @@ void MainWindow::set_label_progress(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)
@ -126,7 +140,7 @@ void MainWindow::prev_img(bool bSavePrev)
goto_img(m_imgIndex - 1);
}
void MainWindow::save_label_data()const
void MainWindow::save_label_data()
{
if(m_imgList.size() == 0) return;
@ -139,21 +153,6 @@ void MainWindow::save_label_data()const
{
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 midY = objBox.box.y() + objBox.box.height() / 2.;
double width = objBox.box.width();
@ -169,10 +168,8 @@ void MainWindow::save_label_data()const
fileOutputLabelData << " ";
fileOutputLabelData << std::fixed << std::setprecision(6) << height << std::endl;
}
m_lastLabeledImgIndex = m_imgIndex;
fileOutputLabelData.close();
ui->textEdit_log->setText(qstrOutputLabelData + " saved.");
}
}
@ -201,7 +198,7 @@ void MainWindow::remove_img()
}
else if( m_imgIndex == m_imgList.size())
{
m_imgIndex --;
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_objList = m_objList;
}
}
@ -363,11 +361,6 @@ void MainWindow::open_obj_file(bool& ret)
}
}
void MainWindow::reupdate_img_list()
{
}
void MainWindow::wheelEvent(QWheelEvent *ev)
{
if(ev->angleDelta().y() > 0) // up Wheel
@ -408,15 +401,15 @@ void MainWindow::keyPressEvent(QKeyEvent * event)
}
}
void MainWindow::on_pushButton_save_clicked()
{
save_label_data();
}
//void MainWindow::on_pushButton_save_clicked()
//{
// save_label_data();
//}
void MainWindow::on_pushButton_remove_clicked()
{
remove_img();
}
//void MainWindow::on_pushButton_remove_clicked()
//{
// remove_img();
//}
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()
{
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);
// ui->pushButton_change_dir->setEnabled(true);
}
void MainWindow::init_horizontal_slider()
@ -461,6 +450,12 @@ void MainWindow::init_horizontal_slider()
ui->horizontalSlider_images->blockSignals(true);
ui->horizontalSlider_images->setValue(0);
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()
@ -471,3 +466,18 @@ void MainWindow::init_table_widget()
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:
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_next_clicked();
@ -34,7 +30,7 @@ private slots:
void next_img(bool bSavePrev = true);
void prev_img(bool bSavePrev = true);
void save_label_data() const;
void save_label_data();
void clear_label_data();
void remove_img();
@ -46,6 +42,10 @@ private slots:
void on_horizontalSlider_images_sliderMoved(int );
void on_horizontalSlider_contrast_sliderMoved(int value);
void on_checkBox_visualize_class_name_clicked(bool checked);
private:
void init();
void init_table_widget();
@ -69,8 +69,6 @@ private:
void open_img_dir(bool&);
void open_obj_file(bool&);
void reupdate_img_list();
Ui::MainWindow *ui;
QString m_imgDir;
@ -79,6 +77,8 @@ private:
QStringList m_objList;
int m_objIndex;
int m_lastDeletedImgIndex;
int m_lastLabeledImgIndex;
protected:
void wheelEvent(QWheelEvent *);

View File

@ -6,20 +6,20 @@
<rect>
<x>0</x>
<y>0</y>
<width>1528</width>
<height>953</height>
<width>1180</width>
<height>693</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>1400</width>
<height>920</height>
<width>1180</width>
<height>640</height>
</size>
</property>
<property name="maximumSize">
@ -39,206 +39,206 @@
</property>
<widget class="QWidget" name="centralWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>1363</width>
<height>867</height>
<width>1180</width>
<height>610</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
<width>165555</width>
<height>165555</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<layout class="QVBoxLayout" name="verticalLayout_3">
<layout class="QGridLayout" name="gridLayout">
<item row="3" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_5">
<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">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>1280</width>
<height>720</height>
</size>
</property>
<property name="font">
<font>
<pointsize>18</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="cursor">
<cursorShape>CrossCursor</cursorShape>
</property>
<property name="mouseTracking">
<bool>true</bool>
</property>
<property name="styleSheet">
<string notr="true">QLabel { background-color : rgb(0, 0, 17); color : rgb(187, 255, 254);
<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>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>18</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="cursor">
<cursorShape>CrossCursor</cursorShape>
</property>
<property name="mouseTracking">
<bool>true</bool>
</property>
<property name="styleSheet">
<string notr="true">QLabel { background-color : rgb(0, 0, 17); color : rgb(187, 255, 254);
border-style: outset;
border-width: 2px;
border-color: rgb(0, 255, 255);}
</string>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="lineWidth">
<number>3</number>
</property>
<property name="text">
<string>Open Data Set Directory...</string>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="margin">
<number>-1</number>
</property>
<property name="buddy">
<cstring>label_image</cstring>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="lineWidth">
<number>3</number>
</property>
<property name="text">
<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 name="scaledContents">
<bool>true</bool>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="margin">
<number>-1</number>
</property>
<property name="buddy">
<cstring>label_image</cstring>
</property>
</widget>
</item>
<item>
<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>
<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>
<widget class="QSlider" name="horizontalSlider_images">
<property name="enabled">
@ -252,12 +252,18 @@ border-color: rgb(0, 255, 255);</string>
</property>
<property name="minimumSize">
<size>
<width>881</width>
<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::ClickFocus</enum>
<enum>Qt::NoFocus</enum>
</property>
<property name="styleSheet">
<string notr="true">
@ -302,12 +308,20 @@ QSlider::handle:horizontal {
</property>
<property name="minimumSize">
<size>
<width>211</width>
<height>21</height>
<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>
@ -335,23 +349,37 @@ border-color: rgb(0, 255, 255);</string>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<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">
<size>
<width>200</width>
<height>91</height>
<width>160</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>91</height>
<width>200</width>
<height>60</height>
</size>
</property>
<property name="baseSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
<kerning>true</kerning>
@ -369,96 +397,8 @@ border-color: rgb(0, 255, 255);</string>
<property name="text">
<string>Open Files</string>
</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">
<string/>
<string>O</string>
</property>
<property name="autoDefault">
<bool>false</bool>
@ -466,65 +406,36 @@ border-color: rgb(0, 255, 255);</string>
<property name="default">
<bool>false</bool>
</property>
<property name="flat">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_remove">
<property name="enabled">
<bool>false</bool>
<widget class="QTextEdit" name="textEdit_log">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</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>
<width>560</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>16777215</height>
<width>16777215</width>
<height>60</height>
</size>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="cursor">
<cursorShape>ArrowCursor</cursorShape>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
@ -534,140 +445,29 @@ border-style: outset;
border-width: 2px;
border-color: rgb(0, 255, 255);</string>
</property>
<property name="text">
<string>with crop</string>
<property name="tabChangesFocus">
<bool>false</bool>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
<property name="html">
<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;
&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;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Arial'; font-size:12pt; font-weight:600; font-style:normal;&quot;&gt;
&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>
</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>
</item>
<item>
<widget class="QTextEdit" name="textEdit_log">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>545</width>
<height>70</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>70</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="tabChangesFocus">
<bool>false</bool>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</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>
</widget>
</item>
<item>
<widget class="QTableWidget" name="tableWidget_label">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -675,12 +475,12 @@ border-color: rgb(0, 255, 255);</string>
<property name="minimumSize">
<size>
<width>220</width>
<height>851</height>
<height>360</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>220</width>
<width>330</width>
<height>16777215</height>
</size>
</property>
@ -744,12 +544,12 @@ QTableView {
<attribute name="horizontalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize">
<number>40</number>
</attribute>
<attribute name="horizontalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderShowSortIndicator" stdset="0">
<bool>true</bool>
</attribute>
@ -779,6 +579,32 @@ QTableView {
</item>
</layout>
</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>
</widget>
<widget class="QMenuBar" name="menuBar">
@ -786,8 +612,8 @@ QTableView {
<rect>
<x>0</x>
<y>0</y>
<width>1528</width>
<height>23</height>
<width>1180</width>
<height>21</height>
</rect>
</property>
</widget>