Пример #1
0
class Capture(object):
    _ask_data = None
    _captor = None
    _save_path = None
    _processor_sleep_time = 0.01
    _process_buf = None
    _sample_rate = 16000

    def __init__(self, min_time, max_time, path=None):
        if path is not None:
            if not os.path.exists(path):
                raise FileNotFoundError('"{}" doesn\'t exist'.format(path))
            if not os.path.isdir(path):
                raise FileNotFoundError('"{}" isn\'t a directory'.format(path))
        monitorhook = open('monitorhook.log', 'w')
        monitorhook.write('{:.0f}'.format(time.time()))
        monitorhook.close()
        self._save_path = path
        self._ask_data = threading.Event()
        self._captor = Captor(min_time, max_time, self._ask_data,
                              self._process)

    def start(self):
        self._captor.start()
        self._process_loop()

    def _process(self, data):
        self._process_buf = np.frombuffer(data, dtype=np.int16)

    def _process_loop(self):
        with WavProcessor() as proc:
            self._ask_data.set()
            while True:
                if self._process_buf is None:
                    # Waiting for data to process
                    time.sleep(self._processor_sleep_time)
                    continue

                self._ask_data.clear()
                if self._save_path:
                    f_path = os.path.join(
                        self._save_path,
                        'record_{:.0f}.wav'.format(time.time()))
                    wavfile.write(f_path, self._sample_rate, self._process_buf)
                    logger.info('"{}" saved.'.format(f_path))

                logger.info('Start processing.')
                monitorhook = open('monitorhook.log', 'w')
                monitorhook.write('{:.0f}'.format(time.time()))
                monitorhook.close()
                predictions = proc.get_predictions(self._sample_rate,
                                                   self._process_buf)
                logger.info('Predictions: {}'.format(
                    format_predictions(predictions)))

                logger.info('Stop processing.')
                self._process_buf = None
                self._ask_data.set()
Пример #2
0
    def __init__(self, min_time, max_time, path=None):
        if path is not None:
            if not os.path.exists(path):
                raise FileNotFoundError('"{}" doesn\'t exist'.format(path))
            if not os.path.isdir(path):
                raise FileNotFoundError('"{}" isn\'t a directory'.format(path))

        self._save_path = path
        self._ask_data = threading.Event()
        self._captor = Captor(min_time, max_time, self._ask_data, self._process)
Пример #3
0
class Capture(object):
    _ask_data = None
    _captor = None
    _save_path = None
    _processor_sleep_time = 0.01
    _process_buf = None
    _sample_rate = 16000

    def __init__(self, min_time, max_time, path=None):
        if path is not None:
            if not os.path.exists(path):
                raise FileNotFoundError('"{}" doesn\'t exist'.format(path))
            if not os.path.isdir(path):
                raise FileNotFoundError('"{}" isn\'t a directory'.format(path))

        self._save_path = path
        self._ask_data = threading.Event()
        self._captor = Captor(min_time, max_time, self._ask_data, self._process)

    def start(self):
        self._captor.start()
        self._process_loop()

    def _process(self, data):
        self._process_buf = np.frombuffer(data, dtype=np.int16)

    def _process_loop(self):
        with WavProcessor() as proc:
            self._ask_data.set()
            while True:
                if self._process_buf is None:
                    # Waiting for data to process
                    time.sleep(self._processor_sleep_time)
                    continue

                self._ask_data.clear()
                if self._save_path:
                    f_path = os.path.join(
                        self._save_path, 'record_{:.0f}.wav'.format(time.time())
                    )
                    wavfile.write(f_path, self._sample_rate, self._process_buf)
                    logger.info('"{}" saved.'.format(f_path))

                logger.info('Start processing.')
                predictions = proc.get_predictions(
                    self._sample_rate, self._process_buf)
                logger.info(
                    'Predictions: {}'.format(format_predictions(predictions))
                )

                logger.info('Stop processing.')
                self._process_buf = None
                self._ask_data.set()
Пример #4
0
 def __init__(self, min_time, max_time, path=None):
     if path is not None:
         if not os.path.exists(path):
             raise FileNotFoundError('"{}" doesn\'t exist'.format(path))
         if not os.path.isdir(path):
             raise FileNotFoundError('"{}" isn\'t a directory'.format(path))
     monitorhook = open('monitorhook.log', 'w')
     monitorhook.write('{:.0f}'.format(time.time()))
     monitorhook.close()
     self._save_path = path
     self._ask_data = threading.Event()
     self._captor = Captor(min_time, max_time, self._ask_data,
                           self._process)
Пример #5
0
    def __init__(self, *args, **kwargs):
        min_time = kwargs.pop('min_capture_time', 5)
        max_time = kwargs.pop('max_capture_time', 5)
        self._save_path = kwargs.pop('save_path', None)

        super(Daemon, self).__init__(*args, **kwargs)

        self.events_queue = deque(maxlen=10)
        self._ask_data_event = threading.Event()
        self._shutdown_event = threading.Event()
        self._process_thread = threading.Thread(target=self._process_loop,
                                                name='processor')
        self._process_thread.setDaemon(True)

        self._captor = Captor(min_time, max_time, self._ask_data_event,
                              self._process, self._shutdown_event)
Пример #6
0
    def __init__(self, *args, **kwargs):
        kwargs.setdefault('routes', routes)
        min_time = kwargs.pop('min_capture_time', 5)
        max_time = kwargs.pop('max_capture_time', 5)
        self._save_path = kwargs.pop('max_capture_time', None)
        super(Daemon, self).__init__(*args, **kwargs)

        self.events_queue = deque(maxlen=10)

        self.dh_cfg = Config('config.json', update_callback=self._restart_dh)
        self.dh_status = DHStatus()

        self._web_thread = threading.Thread(target=self._web_loop,
                                            daemon=True,
                                            name='web')

        self._ask_data_event = threading.Event()
        self._process_thread = threading.Thread(target=self._process_loop,
                                                daemon=True,
                                                name='processor')

        self._captor = Captor(min_time, max_time, self._ask_data_event,
                              self._process)
Пример #7
0
    def __init__(self, *args, **kwargs):
        kwargs.setdefault('routes', routes)
        min_time = kwargs.pop('min_capture_time', 5)
        max_time = kwargs.pop('max_capture_time', 5)
        self._save_path = kwargs.pop('max_capture_time', None)
        super(Daemon, self).__init__(*args, **kwargs)

        self.events_queue = deque(maxlen=10)

        self.dh_cfg = Config('config.json', update_callback=self._restart_dh)
        self.dh_status = DHStatus()

        self._web_thread = threading.Thread(
            target=self._web_loop, daemon=True, name='web')

        self._ask_data_event = threading.Event()
        self._process_thread = threading.Thread(
            target=self._process_loop, daemon=True, name='processor')

        self._captor = Captor(
            min_time, max_time, self._ask_data_event, self._process)
Пример #8
0
class Daemon(Server):
    _process_thread = None
    _process_buf = None
    _ask_data_event = None
    _shutdown_event = None
    _captor = None
    _sample_rate = 16000
    _processor_sleep_time = 0.01

    events_queue = None

    def __init__(self, *args, **kwargs):
        min_time = kwargs.pop('min_capture_time', 5)
        max_time = kwargs.pop('max_capture_time', 5)
        self._save_path = kwargs.pop('save_path', None)

        super(Daemon, self).__init__(*args, **kwargs)

        self.events_queue = deque(maxlen=10)
        self._ask_data_event = threading.Event()
        self._shutdown_event = threading.Event()
        self._process_thread = threading.Thread(target=self._process_loop,
                                                name='processor')
        self._process_thread.setDaemon(True)

        self._captor = Captor(min_time, max_time, self._ask_data_event,
                              self._process, self._shutdown_event)

    def _start_capture(self):
        logger.info('Start captor')
        self._captor.start()

    def _start_process(self):
        logger.info('Start processor loop')
        self._process_thread.start()

    def _process(self, data):
        self._process_buf = np.frombuffer(data, dtype=np.int16)

    def _on_startup(self):
        self._start_process()
        self._start_capture()

    def _on_shutdown(self):
        self._shutdown_event.set()

    def _process_loop(self):
        with WavProcessor() as proc:
            self._ask_data_event.set()
            while self.is_running:
                if self._process_buf is None:
                    # Waiting for data to process
                    time.sleep(self._processor_sleep_time)
                    continue

                self._ask_data_event.clear()
                if self._save_path:
                    f_path = os.path.join(
                        self._save_path, 'record_{:.0f}.wav'.format(time.time())
                    )
                    wavfile.write(f_path, self._sample_rate, self._process_buf)
                    logger.info('"{}" saved'.format(f_path))

                logger.info('Start processing')
                predictions = proc.get_predictions(
                    self._sample_rate, self._process_buf)
                formatted = format_predictions(predictions)
                logger.info('Predictions: {}'.format(formatted))

                self.events_queue.append((datetime.datetime.now(), formatted))
                self._send_dh(predictions)

                logger.info('Stop processing')
                self._process_buf = None
                self._ask_data_event.set()

    def _send_dh(self, data):
        if not self.dh_status.connected:
            logger.error('Devicehive is not connected')
            return

        self.deviceHive.handler.send(data)
Пример #9
0
class Capture(object):
    _ask_data = None
    _captor = None
    _save_path = None
    _processor_sleep_time = 0.01
    _process_buf = None
    _sample_rate = 16000

    def __init__(self, min_time, max_time, path=None):
        if path is not None:
            if not os.path.exists(path):
                raise FileNotFoundError('"{}" doesn\'t exist'.format(path))
            if not os.path.isdir(path):
                raise FileNotFoundError('"{}" isn\'t a directory'.format(path))

        self._save_path = path
        self._ask_data = threading.Event()
        self._captor = Captor(min_time, max_time, self._ask_data,
                              self._process)

    def start(self):
        self._captor.start()
        self._process_loop()

    def _process(self, data):
        self._process_buf = np.frombuffer(data, dtype=np.int16)

    def _process_loop(self):
        with WavProcessor() as proc:
            self._ask_data.set()
            while True:
                i = 0
                pred_values = [
                    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
                    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0
                ]
                while i < 50:
                    if self._process_buf is None:
                        # Waiting for data to process
                        time.sleep(self._processor_sleep_time)
                        continue

                    self._ask_data.clear()
                    if self._save_path:
                        f_path = os.path.join(
                            self._save_path,
                            'record_{:.0f}.wav'.format(time.time()))
                        wavfile.write(f_path, self._sample_rate,
                                      self._process_buf)
                        logger.info('"{}" saved.'.format(f_path))

                    logger.info(str(i) + ' Start processing.')
                    predictions = proc.get_predictions(self._sample_rate,
                                                       self._process_buf)
                    for p in predictions:
                        pred_values = [
                            x + y
                            for x, y in zip(pred_values, get_labels(p[0]))
                        ]
                        # print(get_labels(x[0]))

    #                logger.info(
    #                    'Predictions: {}'.format(format_predictions(predictions))
    #                )

                    logger.info('Stop processing.')
                    self._process_buf = None
                    self._ask_data.set()
                    i += 1

                #arr_index = np.argmax(np.array(pred_values))
                arr_index = np.argwhere(pred_values == np.amax(pred_values))
                arr_index = arr_index.flatten().tolist()
                #print(pred_values[int(arr_index)])
                #print(arr_index)
                # if(isinstance(arr_index,np.int64)):
                #     print(labels[int(arr_index)])
                # else:
                for x in arr_index:
                    print(labels[int(x)])

                print(pred_values)
Пример #10
0
class Daemon(Server):
    _dh_thread = None
    _process_thread = None
    _web_thread = None

    _process_buf = None
    _ask_data_event = None
    _captor = None
    _sample_rate = 16000
    _processor_sleep_time = 0.01

    dh_cfg = None
    deviceHive = None
    dh_status = None
    events_queue = None

    base_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'web')

    def __init__(self, *args, **kwargs):
        kwargs.setdefault('routes', routes)
        min_time = kwargs.pop('min_capture_time', 5)
        max_time = kwargs.pop('max_capture_time', 5)
        self._save_path = kwargs.pop('max_capture_time', None)
        super(Daemon, self).__init__(*args, **kwargs)

        self.events_queue = deque(maxlen=10)

        self.dh_cfg = Config('config.json', update_callback=self._restart_dh)
        self.dh_status = DHStatus()

        self._web_thread = threading.Thread(
            target=self._web_loop, daemon=True, name='web')

        self._ask_data_event = threading.Event()
        self._process_thread = threading.Thread(
            target=self._process_loop, daemon=True, name='processor')

        self._captor = Captor(
            min_time, max_time, self._ask_data_event, self._process)

    def send_dh(self, data):
        if not self._is_dh_connected():
            logger.warning('Devicehive is not connected')
            return

        self.deviceHive.handler.send(data)

    def start(self):
        self._start_web()
        self.dh_cfg.load()  # this will start DH thread automatically
        self._start_capture()
        self._start_process()

    def _start_web(self):
        logger.info('Start server http://{}:{}'.format(*self.server_address))
        self._web_thread.start()

    def _start_dh(self):
        if self._is_dh_connected():
            logging.info('Devicehive already started')
            return

        logger.info('Start devicehive')
        self._dh_thread = threading.Thread(
            target=self._dh_loop, daemon=True, name='device_hive')
        self._dh_thread.start()

    def _stop_dh(self):
        if not self._is_dh_connected():
            logging.info('Devicehive already stopped')
            return
        # TODO: Now it's only one proper way to call disconnect, we need
        # implement better way to do it
        self.deviceHive.transport.handler.handler.api.disconnect()

    def _restart_dh(self):
        if self._is_dh_connected():
            self._stop_dh()

        self._start_dh()

    def _is_dh_connected(self):
        return self.dh_status.connected

    def _start_capture(self):
        logger.info('Start captor')
        self._captor.start()

    def _start_process(self):
        logger.info('Start processor loop')
        self._process_thread.start()

    def _web_loop(self):
        self.serve_forever()

    def _dh_loop(self):
        self.dh_status.set_connecting()
        self.deviceHive = DeviceHive(
            DeviceHiveHandler, self.dh_cfg.data['deviceid'])
        error = ''
        try:
            self.dh_status.set_connected()
            url = self.dh_cfg.data['url']
            refresh_token = self.dh_cfg.data['token']
            self.deviceHive.connect(url, refresh_token=refresh_token)
        except TransportError as e:
            logger.exception(e)
            error = str(e)
        finally:
            self.dh_status.set_disconnected(error)
            logger.info('Stop devicehive')

    def _process(self, data):
        self._process_buf = np.frombuffer(data, dtype=np.int16)

    def _process_loop(self):
        with WavProcessor() as proc:
            self._ask_data_event.set()
            while True:
                if self._process_buf is None:
                    # Waiting for data to process
                    time.sleep(self._processor_sleep_time)
                    continue

                self._ask_data_event.clear()
                if self._save_path:
                    f_path = os.path.join(
                        self._save_path, 'record_{:.0f}.wav'.format(time.time())
                    )
                    wavfile.write(f_path, self._sample_rate, self._process_buf)
                    logger.info('"{}" saved'.format(f_path))

                logger.info('Start processing')
                predictions = proc.get_predictions(
                    self._sample_rate, self._process_buf)
                formatted = format_predictions(predictions)
                logger.info(
                    'Predictions: {}'.format(formatted))

                self.events_queue.append((datetime.datetime.now(), formatted))
                self.send_dh(predictions)

                logger.info('Stop processing')
                self._process_buf = None
                self._ask_data_event.set()
Пример #11
0
class Capture(object):
    _ask_data = None
    _captor = None
    _save_path = None
    _processor_sleep_time = 0.01
    _process_buf = None
    _sample_rate = 16000

    def __init__(self, min_time, max_time, path=None):
        if path is not None:
            if not os.path.exists(path):
                raise FileNotFoundError('"{}" doesn\'t exist'.format(path))
            if not os.path.isdir(path):
                raise FileNotFoundError('"{}" isn\'t a directory'.format(path))
        self._save_path = path
        self._ask_data = threading.Event()
        self._captor = Captor(min_time, max_time, self._ask_data,
                              self._process)

    def start(self):
        self._captor.start()
        self._process_loop()

    def _process(self, data):
        self._process_buf = np.frombuffer(data, dtype=np.int16)

    def _process_loop(self):
        with WavProcessor() as proc:
            self._ask_data.set()
            try:
                producer = KafkaProducer(
                    bootstrap_servers=config['KAFKA']['bootstrap_servers'])
            except NoBrokersAvailable:
                producer = None
                print("No brokers available, running off-line")

            while True:
                if self._process_buf is None:
                    # Waiting for data to process
                    time.sleep(self._processor_sleep_time)
                    continue

                self._ask_data.clear()
                if self._save_path:
                    f_path = os.path.join(
                        self._save_path,
                        'record_{:.0f}.wav'.format(time.time()))
                    wavfile.write(f_path, self._sample_rate, self._process_buf)

                predictions = proc.get_predictions(self._sample_rate,
                                                   self._process_buf)

                for prediction in predictions:
                    if prediction[1] > 0.4:
                        if producer is not None:
                            producer.send(config['KAFKA']['topic'],
                                          bytes(str(prediction[0]).encode()))
                        print(prediction[0])

                self._process_buf = None
                self._ask_data.set()
Пример #12
0
class Daemon(Server):
    _dh_thread = None
    _process_thread = None
    _web_thread = None

    _process_buf = None
    _ask_data_event = None
    _captor = None
    _sample_rate = 16000
    _processor_sleep_time = 0.01

    dh_cfg = None
    deviceHive = None
    dh_status = None
    events_queue = None

    base_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'web')

    def __init__(self, *args, **kwargs):
        kwargs.setdefault('routes', routes)
        min_time = kwargs.pop('min_capture_time', 5)
        max_time = kwargs.pop('max_capture_time', 5)
        self._save_path = kwargs.pop('max_capture_time', None)
        super(Daemon, self).__init__(*args, **kwargs)

        self.events_queue = deque(maxlen=10)

        self.dh_cfg = Config('config.json', update_callback=self._restart_dh)
        self.dh_status = DHStatus()

        self._web_thread = threading.Thread(target=self._web_loop,
                                            daemon=True,
                                            name='web')

        self._ask_data_event = threading.Event()
        self._process_thread = threading.Thread(target=self._process_loop,
                                                daemon=True,
                                                name='processor')

        self._captor = Captor(min_time, max_time, self._ask_data_event,
                              self._process)

    def send_dh(self, data):
        if not self._is_dh_connected():
            logger.warning('Devicehive is not connected')
            return

        self.deviceHive.handler.send(data)

    def start(self):
        self._start_web()
        self.dh_cfg.load()  # this will start DH thread automatically
        self._start_capture()
        self._start_process()

    def _start_web(self):
        logger.info('Start server http://{}:{}'.format(*self.server_address))
        self._web_thread.start()

    def _start_dh(self):
        if self._is_dh_connected():
            logging.info('Devicehive already started')
            return

        logger.info('Start devicehive')
        self._dh_thread = threading.Thread(target=self._dh_loop,
                                           daemon=True,
                                           name='device_hive')
        self._dh_thread.start()

    def _stop_dh(self):
        if not self._is_dh_connected():
            logging.info('Devicehive already stopped')
            return
        # TODO: Now it's only one proper way to call disconnect, we need
        # implement better way to do it
        self.deviceHive.transport.handler.handler.api.disconnect()

    def _restart_dh(self):
        if self._is_dh_connected():
            self._stop_dh()

        self._start_dh()

    def _is_dh_connected(self):
        return self.dh_status.connected

    def _start_capture(self):
        logger.info('Start captor')
        self._captor.start()

    def _start_process(self):
        logger.info('Start processor loop')
        self._process_thread.start()

    def _web_loop(self):
        self.serve_forever()

    def _dh_loop(self):
        self.dh_status.set_connecting()
        self.deviceHive = DeviceHive(DeviceHiveHandler,
                                     self.dh_cfg.data['deviceid'])
        error = ''
        try:
            self.dh_status.set_connected()
            url = self.dh_cfg.data['url']
            refresh_token = self.dh_cfg.data['token']
            self.deviceHive.connect(url, refresh_token=refresh_token)
        except TransportError as e:
            logger.exception(e)
            error = str(e)
        finally:
            self.dh_status.set_disconnected(error)
            logger.info('Stop devicehive')

    def _process(self, data):
        self._process_buf = np.frombuffer(data, dtype=np.int16)

    def _process_loop(self):
        with WavProcessor() as proc:
            self._ask_data_event.set()
            while True:
                if self._process_buf is None:
                    # Waiting for data to process
                    time.sleep(self._processor_sleep_time)
                    continue

                self._ask_data_event.clear()
                if self._save_path:
                    f_path = os.path.join(
                        self._save_path,
                        'record_{:.0f}.wav'.format(time.time()))
                    wavfile.write(f_path, self._sample_rate, self._process_buf)
                    logger.info('"{}" saved'.format(f_path))

                logger.info('Start processing')
                predictions = proc.get_predictions(self._sample_rate,
                                                   self._process_buf)
                formatted = format_predictions(predictions)
                logger.info('Predictions: {}'.format(formatted))

                self.events_queue.append((datetime.datetime.now(), formatted))
                self.send_dh(predictions)

                logger.info('Stop processing')
                self._process_buf = None
                self._ask_data_event.set()
Пример #13
0
class Capture(object):
    _ask_data = None
    _captor = None
    _save_path = None
    _processor_sleep_time = 0.01
    _process_buf = None
    _sample_rate = 16000

    def __init__(self, min_time, max_time, path=None):
        if path is not None:
            if not os.path.exists(path):
                raise FileNotFoundError('"{}" doesn\'t exist'.format(path))
            if not os.path.isdir(path):
                raise FileNotFoundError('"{}" isn\'t a directory'.format(path))

        self._save_path = path
        self._ask_data = threading.Event()
        self._captor = Captor(min_time, max_time, self._ask_data,
                              self._process)

    def start(self):
        self._captor.start()
        self._process_loop()

    def _process(self, data):
        self._process_buf = np.frombuffer(data, dtype=np.int16)

    def _process_loop(self):
        with WavProcessor() as proc:
            self._ask_data.set()
            while True:
                if self._process_buf is None:
                    # Waiting for data to process
                    time.sleep(self._processor_sleep_time)
                    continue

                self._ask_data.clear()
                if self._save_path:
                    f_path = os.path.join(
                        self._save_path,
                        'record_{:.0f}.wav'.format(time.time()))
                    wavfile.write(f_path, self._sample_rate, self._process_buf)
                    logger.info('"{}" saved.'.format(f_path))

                logger.info('Start processing.')
                predictions = proc.get_predictions(self._sample_rate,
                                                   self._process_buf)
                logger.info('Predictions: {}'.format(
                    format_predictions(predictions)))
                my_dict = {x[0]: x[1] for x in predictions}
                msg_json = {
                    "app_id": "openears",
                    "dev_id": "TEST001",
                    "payload_fields": my_dict,
                    "time": int(time.time() * 1e3)
                }
                msg_str = json.dumps(msg_json)
                auth = {"username": mqtt_user, "password": mqtt_password}
                publish.single("pipeline/openears/TEST001",
                               payload=msg_str,
                               hostname=mqtt_host,
                               port=mqtt_port,
                               auth=auth)
                print('message sent')
                logger.info('Stop processing.')
                self._process_buf = None
                self._ask_data.set()
Пример #14
0
class Capture(object):
    _ask_data = None
    _captor = None
    _save_path = None
    _processor_sleep_time = 0.01
    _process_buf = None
    _sample_rate = 16000

    def __init__(self, min_time, max_time, path=None):
        if path is not None:
            if not os.path.exists(path):
                raise FileNotFoundError('"{}" doesn\'t exist'.format(path))
            if not os.path.isdir(path):
                raise FileNotFoundError('"{}" isn\'t a directory'.format(path))

        self._save_path = path
        self._ask_data = threading.Event()
        self._captor = Captor(min_time, max_time, self._ask_data,
                              self._process)

    def start(self):
        self._captor.start()
        self._process_loop()

    def _process(self, data):
        self._process_buf = np.frombuffer(data, dtype=np.int16)

    def _process_loop(self):
        with WavProcessor() as proc:
            self._ask_data.set()
            while True:
                if self._process_buf is None:
                    # Waiting for data to process
                    time.sleep(self._processor_sleep_time)
                    continue

                self._ask_data.clear()
                if self._save_path:
                    f_path = os.path.join(
                        self._save_path,
                        'record_{:.0f}.wav'.format(time.time()))
                    wavfile.write(f_path, self._sample_rate, self._process_buf)
                    logger.info('"{}" saved.'.format(f_path))

                logger.info('Start processing.')
                predictions = proc.get_predictions(self._sample_rate,
                                                   self._process_buf)
                for i in predictions:
                    if i[0] == "Vehicle" and (float(i[1]) > .2):
                        print("OBS Release")
                        GPIO.output(pin, GPIO.HIGH)
                    else:
                        GPIO.output(pin, GPIO.LOW)
                        print(i[0])
                        print(i[1])
                #print("Type: ")
                #print(type(predictions))
                #logger.info(
                #'Predictions: {}'.format(format_predictions(predictions))
                #)

                logger.info('Stop processing.')
                self._process_buf = None
                self._ask_data.set()