def __init__(self):
        """
        Build user interface
        """
        QWidget.__init__(self)

        # Create a timer.
        self.timer = QTimer()
        self.timer.timeout.connect(self.nextFrameSlot)

        # Create a layout.
        layout = QVBoxLayout()

        # Add a button
        self.btn = QPushButton("Load an image")
        self.btn.clicked.connect(self.pickFile)
        layout.addWidget(self.btn)

        # Add a button for saving model
        saveButton = QPushButton("Save Model")
        saveButton.clicked.connect(self.saveModel)
        layout.addWidget(saveButton)

        # Add a button
        button_layout = QHBoxLayout()

        btnCamera = QPushButton("Start camera")
        btnCamera.clicked.connect(self.openCamera)
        button_layout.addWidget(btnCamera)

        btnCamera = QPushButton("Stop camera")
        btnCamera.clicked.connect(self.stopCamera)
        button_layout.addWidget(btnCamera)

        layout.addLayout(button_layout)

        center_layout = QHBoxLayout()
        left_layout = QVBoxLayout()
        right_layout = QVBoxLayout()

        # Add a label to hold raw image
        self.raw_frame = QLabel()
        self.raw_frame.setFixedSize(640, 360)
        left_layout.addWidget(self.raw_frame)

        # Add a label to hold filtered image
        self.filtered_frame = QLabel()
        self.filtered_frame.setFixedSize(640, 360)
        left_layout.addWidget(self.filtered_frame)

        # Set last frame
        self.last_frame = None

        # Create controller
        self.det_controller = DetectionController()

        # Create radio buttons
        for i, comp in enumerate(self.det_controller.object.components.keys()):
            radiobutton = QRadioButton(comp)
            if i == 0:
                radiobutton.setChecked(False)
                self.det_controller.selected_component = comp
            radiobutton.component = comp
            radiobutton.toggled.connect(self.compChanged)
            right_layout.addWidget(radiobutton)

        # Create morphology sliders
        slider_stats = self.det_controller.get_slider_values()
        self.sliders = {}
        for slider_name in slider_stats.keys():
            slider_label = QLabel()
            slider_label.setText(slider_name)
            slider = QSlider(Qt.Horizontal)
            slider.setFocusPolicy(Qt.StrongFocus)
            slider.setTickPosition(QSlider.TicksBelow)
            slider.setTickInterval(10)
            slider.setSingleStep(2)
            slider.slider_name = slider_name
            slider.valueChanged.connect(self.sliderChanged)
            slider.setValue(slider_stats[slider_name])
            self.sliders[slider_name] = slider
            right_layout.addWidget(slider_label)
            right_layout.addWidget(slider)

        # Add store contour button
        clearBtn = QPushButton("Clear data for color")
        clearBtn.pressed.connect(self.clearColor)
        right_layout.addWidget(clearBtn)

        # Add store contour button
        sizeBtn = QPushButton("Save contour")
        sizeBtn.pressed.connect(self.saveContour)
        right_layout.addWidget(sizeBtn)

        # Add store contour button
        sizeBtn = QPushButton("Clear contours")
        sizeBtn.pressed.connect(self.clearContour)
        right_layout.addWidget(sizeBtn)

        # Add a text area
        self.results = QTextEdit()
        right_layout.addWidget(self.results)

        # Add click message field
        self.click_text = QLabel("")
        left_layout.addWidget(self.click_text)

        # Merge layouts
        center_layout.addLayout(left_layout)
        center_layout.addLayout(right_layout)
        layout.addLayout(center_layout)

        # Set the layout
        self.setLayout(layout)
        self.setWindowTitle("Leprechaun Detector")
        self.setFixedSize(1000, 900)