def __init__(self, parent=None):
        super(FaceDection, self).__init__(parent)

        # gui connections
        self.ui = Ui_FaceDetection()
        self.ui.setupUi(self)
        self.ui.speed_dial.sliderMoved.connect(self.set_fan_speed)
        self.ui.horizontal_speed.sliderReleased.connect(self.horizontal_stop)
        self.ui.vertical_speed.sliderReleased.connect(self.vertical_stop)
        self.ui.horizontal_speed.valueChanged.connect(self.set_hor_speed)
        self.ui.vertical_speed.valueChanged.connect(self.set_ver_speed)
        self.ui.serial_select.currentIndexChanged.connect(self.port_select)
        self.ui.command_edit.returnPressed.connect(self.command_send)

        # video and face recognition
        self.faces = []
        self.ui.video.face_callback = self.video_face_callback
        self.ui.video.image_callback = self.video_image_callback

        # serial connection
        self.serial = SerialConnection()
        for port in self.serial.list_ports():
            self.ui.serial_select.addItem(port)
        self.listener_timer = QTimer(self)
        self.listener_timer.timeout.connect(self.serial_read)
        self.listener_timer.start(50)
    def __init__(self, parent=None):
        super(FaceDection, self).__init__(parent)

        # gui connections
        self.ui = Ui_FaceDetection()
        self.ui.setupUi(self)
        self.ui.speed_dial.sliderMoved.connect(self.set_fan_speed)
        self.ui.horizontal_speed.sliderReleased.connect(self.horizontal_stop)
        self.ui.vertical_speed.sliderReleased.connect(self.vertical_stop)
        self.ui.horizontal_speed.valueChanged.connect(self.set_hor_speed)
        self.ui.vertical_speed.valueChanged.connect(self.set_ver_speed)
        self.ui.serial_select.currentIndexChanged.connect(self.port_select)
        self.ui.command_edit.returnPressed.connect(self.command_send)

        # video and face recognition
        self.faces = []
        self.ui.video.face_callback = self.video_face_callback
        self.ui.video.image_callback = self.video_image_callback

        # serial connection
        self.serial = SerialConnection()
        for port in self.serial.list_ports():
            self.ui.serial_select.addItem(port)
        self.listener_timer = QTimer(self)
        self.listener_timer.timeout.connect(self.serial_read)
        self.listener_timer.start(50)
class FaceDection(QMainWindow):
    def __init__(self, parent=None):
        super(FaceDection, self).__init__(parent)

        # gui connections
        self.ui = Ui_FaceDetection()
        self.ui.setupUi(self)
        self.ui.speed_dial.sliderMoved.connect(self.set_fan_speed)
        self.ui.horizontal_speed.sliderReleased.connect(self.horizontal_stop)
        self.ui.vertical_speed.sliderReleased.connect(self.vertical_stop)
        self.ui.horizontal_speed.valueChanged.connect(self.set_hor_speed)
        self.ui.vertical_speed.valueChanged.connect(self.set_ver_speed)
        self.ui.serial_select.currentIndexChanged.connect(self.port_select)
        self.ui.command_edit.returnPressed.connect(self.command_send)

        # video and face recognition
        self.faces = []
        self.ui.video.face_callback = self.video_face_callback
        self.ui.video.image_callback = self.video_image_callback

        # serial connection
        self.serial = SerialConnection()
        for port in self.serial.list_ports():
            self.ui.serial_select.addItem(port)
        self.listener_timer = QTimer(self)
        self.listener_timer.timeout.connect(self.serial_read)
        self.listener_timer.start(50)

    def set_fan_speed(self, speed, update_dial=False):
        self.ui.speed_label.setText("%d %%" % speed)
        self.serial.send("VENT " + str(speed))
        if update_dial:
            self.ui.speed_dial.setValue(speed)

    def horizontal_stop(self):
        self.serial.send("STOP")
        self.ui.horizontal_speed.setValue(0)  # snap back

    def vertical_stop(self):
        self.serial.send("STOP")
        self.ui.vertical_speed.setValue(0)  # snap back

    def set_hor_speed(self, value):
        if not value == 0:
            self.serial.send("IBASE " + str(value))

    def set_ver_speed(self, value):
        if not value == 0:
            self.serial.send("IELBOW " + str(value))

    def serial_read(self):
        message_queue = self.serial.queue
        while not message_queue.empty():
            message = message_queue.get_nowait()
            if message[0] == "#":
                self.ui.log.append("<b>" + message + "</b>")
            elif message[0] == "!":
                self.ui.log.append("<font color=red>" + message + "</font>")
            message_queue.task_done()

    def command_send(self):
        command = self.ui.command_edit.text()
        self.serial.send(command)
        self.ui.command_edit.clear()

    def port_select(self, index):
        # disconnect
        if index == 0:
            self.serial.stop()
            self.ui.log.clear()
            self.ui.command_edit.clear()
            self.ui.command_edit.setEnabled(False)
            self.ui.fanbox.setEnabled(False)
            self.ui.movementbox.setEnabled(False)
        # connect
        else:
            try:
                port = self.ui.serial_select.currentText()
                self.serial.connect(port=port, baud=19200)
                self.ui.command_edit.setEnabled(True)
                self.ui.fanbox.setEnabled(True)
                self.ui.movementbox.setEnabled(True)
            except Exception, e:
                QMessageBox.warning(self, "Error", e.message)
class FaceDection(QMainWindow):
    def __init__(self, parent=None):
        super(FaceDection, self).__init__(parent)

        # gui connections
        self.ui = Ui_FaceDetection()
        self.ui.setupUi(self)
        self.ui.speed_dial.sliderMoved.connect(self.set_fan_speed)
        self.ui.horizontal_speed.sliderReleased.connect(self.horizontal_stop)
        self.ui.vertical_speed.sliderReleased.connect(self.vertical_stop)
        self.ui.horizontal_speed.valueChanged.connect(self.set_hor_speed)
        self.ui.vertical_speed.valueChanged.connect(self.set_ver_speed)
        self.ui.serial_select.currentIndexChanged.connect(self.port_select)
        self.ui.command_edit.returnPressed.connect(self.command_send)

        # video and face recognition
        self.faces = []
        self.ui.video.face_callback = self.video_face_callback
        self.ui.video.image_callback = self.video_image_callback

        # serial connection
        self.serial = SerialConnection()
        for port in self.serial.list_ports():
            self.ui.serial_select.addItem(port)
        self.listener_timer = QTimer(self)
        self.listener_timer.timeout.connect(self.serial_read)
        self.listener_timer.start(50)

    def set_fan_speed(self, speed, update_dial=False):
        self.ui.speed_label.setText("%d %%" % speed)
        self.serial.send("VENT " + str(speed))
        if update_dial:
            self.ui.speed_dial.setValue(speed)

    def horizontal_stop(self):
        self.serial.send("STOP")
        self.ui.horizontal_speed.setValue(0)  # snap back

    def vertical_stop(self):
        self.serial.send("STOP")
        self.ui.vertical_speed.setValue(0)  # snap back

    def set_hor_speed(self, value):
        if not value == 0:
            self.serial.send("IBASE "+str(value))

    def set_ver_speed(self, value):
        if not value == 0:
            self.serial.send("IELBOW "+str(value))

    def serial_read(self):
        message_queue = self.serial.queue
        while not message_queue.empty():
            message = message_queue.get_nowait()
            if message[0] == "#":
                self.ui.log.append("<b>"+message+"</b>")
            elif message[0] == "!":
                self.ui.log.append("<font color=red>"+message+"</font>")
            message_queue.task_done()

    def command_send(self):
        command = self.ui.command_edit.text()
        self.serial.send(command)
        self.ui.command_edit.clear()

    def port_select(self, index):
        # disconnect
        if index == 0:
            self.serial.stop()
            self.ui.log.clear()
            self.ui.command_edit.clear()
            self.ui.command_edit.setEnabled(False)
            self.ui.fanbox.setEnabled(False)
            self.ui.movementbox.setEnabled(False)
        # connect
        else:
            try:
                port = self.ui.serial_select.currentText()
                self.serial.connect(port=port, baud=19200)
                self.ui.command_edit.setEnabled(True)
                self.ui.fanbox.setEnabled(True)
                self.ui.movementbox.setEnabled(True)
            except Exception, e:
                QMessageBox.warning(self, "Error", e.message)