Beispiel #1
0
    def load_car(self):
        ip, okPressed = QInputDialog.getText(self, "Car IP Address",
                                             "Enter IP Address",
                                             QLineEdit.Normal, "192.168.137.2")
        if okPressed:
            try:
                socket.inet_aton(ip)  # throw exception in invalid ip

                car_link = "ws://{}:{}".format(ip, "8000")

                action_link = "{}/action".format(car_link)
                state_link = "{}/state".format(car_link)

                self.add_log("Action Link: " + action_link)
                self.add_log("State Link: " + state_link)

                self.car = Car(action_link, url_state=state_link)
                self.rps_counter = RPSCounter()
                self.car.set_state_callback(self._handle_dataset_response)

                self.ui.startButton.setText('Started')
            except socket.error:
                pass  # leave the condition
        else:
            self.ui.startButton.setText('Start')
            self.ui.startButton.setEnabled(False)
Beispiel #2
0
class MyWindowClass(QMainWindow):
    def __init__(self, parent=None):
        super(self.__class__, self).__init__()
        self.car = None
        self.rps_counter = None

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ui.forwardBtn.clicked.connect(self.forward_clicked)
        self.ui.backBtn.clicked.connect(self.backward_clicked)
        self.ui.leftBtn.clicked.connect(self.left_clicked)
        self.ui.rightBtn.clicked.connect(self.right_clicked)
        self.ui.stopBtn.clicked.connect(self.stop_clicked)
        self.ui.startButton.clicked.connect(self.start_clicked)

        self.ui.actionOpen_Writer.triggered.connect(self.open_writer)
        self.ui.actionExit.triggered.connect(self.exit)
        self.ui.actionAbout.triggered.connect(self.about)

        self.img_left = self.ui.img_left
        self.img_right = self.ui.img_right
        self.img_center = self.ui.img_center

        self.camera_label = {
            'camera_r': self.img_left,
            'camera_c': self.img_center,
            'camera_l': self.img_right
        }

        self.sensor_label = {
            'left': self.ui.sensor_left,
            'center': self.ui.sensor_center,
            'right': self.ui.sensor_right
        }

        self.add_log("DrivingMatter GUI Started.")
        self.show_image()

    def open_writer(self):
        self.add_log("OpenWriter called")
        self.writer = Writer(self.car)
        self.writer.setWindowTitle('Driving Matter - Writer')
        self.writer.show()

    def exit(self):
        self.add_log("Exit called")

    def about(self):
        self.add_log("About called")

    def add_log(self, message):
        from datetime import datetime
        message = str(
            datetime.now().strftime('%Y-%m-%d %H:%M:%S')) + ": " + message
        self.ui.logdata.appendPlainText(message)

        #scroll log textedit to bottom
        self.ui.logdata.verticalScrollBar().setValue(
            self.ui.logdata.verticalScrollBar().maximum())

    def load_car(self):
        ip, okPressed = QInputDialog.getText(self, "Car IP Address",
                                             "Enter IP Address",
                                             QLineEdit.Normal, "192.168.137.2")
        if okPressed:
            try:
                socket.inet_aton(ip)  # throw exception in invalid ip

                car_link = "ws://{}:{}".format(ip, "8000")

                action_link = "{}/action".format(car_link)
                state_link = "{}/state".format(car_link)

                self.add_log("Action Link: " + action_link)
                self.add_log("State Link: " + state_link)

                self.car = Car(action_link, url_state=state_link)
                self.rps_counter = RPSCounter()
                self.car.set_state_callback(self._handle_dataset_response)

                self.ui.startButton.setText('Started')
            except socket.error:
                pass  # leave the condition
        else:
            self.ui.startButton.setText('Start')
            self.ui.startButton.setEnabled(False)

    def stop_clicked(self):
        self.car.stop()

    def backward_clicked(self):
        self.add_log("Car::backward()")
        self.car.backward()

    def right_clicked(self):
        self.add_log("Car::right()")
        self.car.forwardRight()

    def left_clicked(self):
        self.add_log("Car::left()")
        self.car.forwardLeft()

    def forward_clicked(self):
        self.add_log("Car::forward()")
        self.car.forward()

    def start_clicked(self):
        global running
        running = True
        self.ui.startButton.setEnabled(False)
        self.ui.startButton.setText('Starting...')
        self.load_car()

    def show_image(self):
        qim = QtGui.QImage("../images/no-image.png")  # PNG only
        qim = qim.scaled(200,
                         200,
                         aspectRatioMode=QtCore.Qt.KeepAspectRatio,
                         transformMode=QtCore.Qt.SmoothTransformation)
        self.ui.img_left.setPixmap(QtGui.QPixmap.fromImage(qim))
        self.ui.img_right.setPixmap(QtGui.QPixmap.fromImage(qim))
        self.ui.img_center.setPixmap(QtGui.QPixmap.fromImage(qim))
        self.ui.img_left.adjustSize()

        self.add_log("Showing default images.")

    def _handle_dataset_response(self, data, ws):
        current_datavector = json.loads(data)

        pc_rps = self.rps_counter.get()

        #logger.debug("PC RPS: " + str(pc_rps) + "\n\nCar RPS: " + str(car_rps) + "\n\nTotal: " + str(total_requests))
        sensors = current_datavector['sensors']

        for key, value in sensors.items():
            self.sensor_label[key].setText(str(value))

            if value:
                self.sensor_label[key].setStyleSheet('color: red')
            else:
                self.sensor_label[key].setStyleSheet('color: green')

        camera_names = [
            key for key in current_datavector if key.startswith('camera')
        ]
        for name in camera_names:
            frame_data = current_datavector[name]  # [type, array, shape]

            frame = BytesIO(base64.decodestring(frame_data.encode("utf-8")))
            frame = np.asarray(Image.open(frame))

            qim = QtGui.QImage(
                frame.data, frame.shape[1], frame.shape[0], frame.strides[0],
                QImage.Format_RGB888)  # https://gist.github.com/smex/5287589
            qim = qim.scaled(200,
                             200,
                             aspectRatioMode=QtCore.Qt.KeepAspectRatio,
                             transformMode=QtCore.Qt.SmoothTransformation)

            self.camera_label[name].setPixmap(QtGui.QPixmap.fromImage(qim))
            self.camera_label[name].adjustSize()

            self.add_log("Received dataset. RPS: " + str(int(pc_rps)))
Beispiel #3
0
#     logging.debug (car_data)
#     logging.debug ("="*80)
#     sys.exit()

#car_link = "ws://{}:{}".format(car_data['address'], car_data['port'])
#car_link = "ws://{}:{}".format("192.168.137.2", "8000")
#car_link = "ws://{}:{}".format("192.168.0.120", "8000")
car_link = "ws://{}:{}".format("192.168.8.103", "8000")

action_link = "{}/action".format(car_link)
state_link = "{}/state".format(car_link)

logging.debug("Action Link: " + action_link)
logging.debug("State Link: " + state_link)

car = Car(action_link, url_state=state_link)

rps_counter = RPSCounter()


def handle_state(data, ws):
    global rps_counter

    current_datavector = pickle.loads(data)

    pc_rps = rps_counter.get()

    #print ("PC RPS: " + str(pc_rps) + "\n\nCar RPS: " + str(car_rps) + "\n\nTotal: " + str(total_requests))

    sensors = current_datavector['sensors']
loaded_model.compile(loss='categorical_crossentropy',
                  optimizer='adadelta',
                  metrics=['accuracy'])

logging.debug("Model loaded")
"""

car_link = "ws://{}:{}".format("192.168.137.2", "8000")

action_link = "{}/action".format(car_link)
state_link = "{}/state".format(car_link)

logging.debug("Action Link: " + action_link)
logging.debug("State Link: " + state_link)

car = Car(action_link, url_state=state_link)

rps_counter = RPSCounter()

logger.debug("ACTIONS = " + str(ACTIONS))


def handle_state(data, ws):
    global rps_counter, loaded_model, car

    print(len(data))

    current_datavector = json.loads(data)

    pc_rps = rps_counter.get()