Example #1
0
    def async_listen(call):
        nonlocal runner, detected_event

        hass.states.async_set(OBJECT_DECODER, STATE_LISTENING, state_attrs)

        engine = PreciseEngine('precise-engine', model)
        runner = PreciseRunner(engine,
                               sensitivity=sensitivity,
                               trigger_level=trigger_level,
                               on_activation=lambda: detected_event.set())


        # Runs in a separate thread
        detected_event.clear()
        runner.start()
        yield from asyncio.get_event_loop().run_in_executor(None, detected_event.wait)

        if not terminated:
            runner.stop()
            runner = None

            hass.states.async_set(OBJECT_DECODER, STATE_IDLE, state_attrs)

            # Fire detected event
            hass.bus.async_fire(EVENT_HOTWORD_DETECTED, {
                'name': name,       # name of the component
                'model': model      # model used
            })
Example #2
0
    def __init__(self, key_phrase="hey mycroft", config=None, lang="en-us"):
        super(PreciseHotword, self).__init__(key_phrase, config, lang)
        from precise_runner import (PreciseRunner, PreciseEngine,
                                    ReadWriteStream)
        local_conf = LocalConf(USER_CONFIG)
        if local_conf.get('precise', {}).get('dist_url') == \
                'http://bootstrap.mycroft.ai/artifacts/static/daily/':
            del local_conf['precise']['dist_url']
            local_conf.store()
            Configuration.updated(None)

        self.download_complete = True

        self.show_download_progress = Timer(0, lambda: None)
        precise_config = Configuration.get()['precise']
        precise_exe = self.install_exe(precise_config['dist_url'])
        self.precise_model = self.install_model(
            precise_config['model_url'],
            key_phrase.replace(' ', '-')).replace('.tar.gz', '.pb')

        self.has_found = False
        self.stream = ReadWriteStream()

        def on_activation():
            self.has_found = True

        self.runner = PreciseRunner(PreciseEngine(precise_exe,
                                                  self.precise_model),
                                    stream=self.stream,
                                    on_activation=on_activation)
        self.runner.start()
    def calc_thresh(self, model_file, samples_folder):
        from precise_runner import PreciseEngine
        engine = PreciseEngine(self.engine_exe, model_file, self.chunk_size)
        engine.start()

        all_max = []
        for sample_file in glob(join(samples_folder, '*.wav')):
            with wave.open(sample_file, 'r') as wr:
                frames = wr.readframes(wr.getnframes() - 1)
            chop = len(frames) % self.chunk_size
            max_pred = float('-inf')
            for i in range(10):
                engine.get_prediction(b'\0' * self.chunk_size)
            for pos in range(chop + self.chunk_size,
                             len(frames) + 1, self.chunk_size):
                pred = engine.get_prediction(frames[pos - self.chunk_size:pos])
                max_pred = max(max_pred, pred)
            print('MAX PRED:', max_pred)
            all_max.append(max_pred)
        av_max = sum(all_max) / len(all_max)
        stddev = sqrt(sum([(i - av_max)**2 for i in all_max]))
        good_max = [i for i in all_max if i > av_max - stddev]
        good_av = sum(good_max) / len(good_max)
        stddev = sqrt(sum([(i - good_av)**2 for i in good_max]))
        thresh = good_av - stddev
        return thresh
Example #4
0
    def load_runner(self) -> None:
        """Load precise runner."""
        if self.engine is None:
            # pylint: disable=E0401
            from precise_runner import PreciseEngine

            self.model_name = self.profile.get("wake.precise.model",
                                               "hey-mycroft-2.pb")
            self.model_path = self.profile.read_path(self.model_name)
            self.engine_path = os.path.expandvars(
                self.profile.get("wake.precise.engine_path", "precise-engine"))

            self._logger.debug("Loading Precise engine at %s",
                               self.engine_path)
            self.engine = PreciseEngine(self.engine_path,
                                        self.model_path,
                                        chunk_size=self.chunk_size)

        if self.runner is None:
            # pylint: disable=E0401
            from precise_runner import PreciseRunner, ReadWriteStream

            self.stream = ReadWriteStream()

            sensitivity = float(
                self.profile.get("wake.precise.sensitivity", 0.5))
            trigger_level = int(
                self.profile.get("wake.precise.trigger_level", 3))

            def on_prediction(prob: float) -> None:
                self.prediction_sem.release()

            def on_activation() -> None:
                self.detected = True
                self.send(self.myAddress, "activated")

            self.runner = PreciseRunner(
                self.engine,
                stream=self.stream,
                sensitivity=sensitivity,
                trigger_level=trigger_level,
                on_activation=on_activation,
                on_prediction=on_prediction,
            )

            assert self.runner is not None
            self.runner.start()

            self._logger.debug(
                "Loaded Mycroft Precise (model=%s, sensitivity=%s, trigger_level=%s)",
                self.model_path,
                sensitivity,
                trigger_level,
            )
    def __init__(self, args):
        super().__init__(args)

        if args.model == 'hey-mycroft':
            args.model = None

        self.engine = PreciseEngine(exe_file=None,
                                    model_file=args.model,
                                    chunk_size=args.chunk_size)
        self.runner = PreciseRunner(self.engine,
                                    args.trigger_level,
                                    sensitivity=args.sensitivity,
                                    on_activation=self.on_activation,
                                    on_prediction=self.on_prediction)
        self.session_id, self.chunk_num = '%09d' % randint(0, 999999999), 0
Example #6
0
def main():
    parser = ArgumentParser('Implementation demo of precise-engine')
    parser.add_argument('engine', help='Location of binary engine file')
    parser.add_argument('model')
    args = parser.parse_args()

    def on_prediction(prob):
        print('!' if prob > 0.5 else '.', end='', flush=True)

    def on_activation():
        Popen(['aplay', '-q', 'data/activate.wav'])

    engine = PreciseEngine(args.engine, args.model)
    PreciseRunner(engine, on_prediction=on_prediction, on_activation=on_activation,
                  trigger_level=0).start()
    Event().wait()  # Wait forever
Example #7
0
	def __init__(self):
		super().__init__()
		self._hotwordThread = None

		try:
			self._stream = ReadWriteStream()
			self._handler = PreciseRunner(
				PreciseEngine(
					exe_file=f'{self.Commons.rootDir()}/venv/bin/precise-engine',
					model_file=f'{self.Commons.rootDir()}/trained/hotwords/mycroft-precise/athena.pb'
				),
				sensitivity=self.ConfigManager.getAliceConfigByName('wakewordSensitivity'),
				stream=self._stream,
				on_activation=self.hotwordSpotted
			)
		except:
			self._enabled = False
    def __init__(self, key_phrase="hey mycroft", config=None, lang="en-us"):
        super().__init__(key_phrase, config, lang)
        global install_package
        from petact import install_package
        from precise_runner import (PreciseRunner, PreciseEngine,
                                    ReadWriteStream)
        local_conf = LocalConf(USER_CONFIG)
        if (local_conf.get('precise', {}).get('dist_url') ==
                'http://bootstrap.mycroft.ai/artifacts/static/daily/'):
            del local_conf['precise']['dist_url']
            local_conf.store()
            Configuration.updated(None)

        self.download_complete = True

        self.show_download_progress = Timer(0, lambda: None)
        precise_config = Configuration.get()['precise']

        precise_exe = self.update_precise(precise_config)

        local_model = self.config.get('local_model_file')
        if local_model:
            self.precise_model = expanduser(local_model)
        else:
            self.precise_model = self.install_model(
                precise_config['model_url'],
                key_phrase.replace(' ', '-')).replace('.tar.gz', '.pb')

        self.has_found = False
        self.stream = ReadWriteStream()

        def on_activation():
            self.has_found = True

        trigger_level = self.config.get('trigger_level', 3)
        sensitivity = self.config.get('sensitivity', 0.5)

        self.runner = PreciseRunner(
            PreciseEngine(precise_exe, self.precise_model),
            trigger_level,
            sensitivity,
            stream=self.stream,
            on_activation=on_activation,
        )
        self.runner.start()
Example #9
0
    def load_runner(self) -> None:
        if self.engine is None:
            from precise_runner import PreciseEngine

            self.model_name = self.profile.get("wake.precise.model")
            self.model_path = self.profile.read_path(self.model_name)
            self.engine_path = self.profile.get("wake.precise.engine_path")

            self._logger.debug(f"Loading Precise engine at {self.engine_path}")
            self.engine = PreciseEngine(
                self.engine_path, self.model_path, chunk_size=self.chunk_size
            )

        if self.runner is None:
            from precise_runner import PreciseRunner

            self.stream = ByteStream()

            sensitivity = float(self.profile.get("wake.precise.sensitivity", 0.5))
            trigger_level = int(self.profile.get("wake.precise.trigger_level", 3))

            def on_prediction(prob: float) -> None:
                self.prediction_event.set()

            def on_activation() -> None:
                self.detected = True

            self.runner = PreciseRunner(
                self.engine,
                stream=self.stream,
                sensitivity=sensitivity,
                trigger_level=trigger_level,
                on_prediction=on_prediction,
                on_activation=on_activation,
            )

            assert self.runner is not None
            self.runner.start()

            self._logger.debug(
                "Loaded Mycroft Precise (model=%s, sensitivity=%s, trigger_level=%s)"
                % (self.model_path, sensitivity, trigger_level)
            )
Example #10
0
    def listen_for_wake_words(self, word_library, activation_notifier,
                              startdelay):
        def on_prediction(prob):
            pass

        def on_activation():
            if self.speech_locked:
                print("no activation, speech is locked")
                return
            print("ACTIVATION: {}".format(activation_notifier))

            msg = RosString()
            msg.data = activation_notifier
            self.command_triggered_pub.publish(msg)

            if activation_notifier != "heyrobot" and activation_notifier != "stop_listening":
                if self.engines[activation_notifier][2]:
                    self.start_stream_callback(activation_notifier)
            elif activation_notifier == "heyrobot":
                if self.engines[activation_notifier][2]:
                    self.start_countdown()
                    self.start_perpetual_stream_callback()
            else:
                print("auto 4")
                self.end_countdown()
                self.end_perpetual_stream()

        path = sys.argv[1]

        time.sleep(startdelay)
        print("{} ready".format(activation_notifier))

        engine = PreciseEngine('{}/.venv/bin/precise-engine'.format(path),
                               word_library)
        self.engines[activation_notifier][0] = PreciseRunner(
            engine,
            on_prediction=on_prediction,
            on_activation=on_activation,
            trigger_level=0)
        self.engines[activation_notifier][0].start()
    def __init__(self, factory, client, queue, sample_rate=16000):
        super(WebsocketAudioListener, self).__init__()
        self.client = client
        self.factory = factory
        self.sample_rate = sample_rate
        self.vad = webrtcvad.Vad(1)
        self.queue = queue

        self.hotword_found = False
        self.hotword_stream = ReadWriteStream()

        def on_activation():
            self.hotword_found = True

        trigger_level = 1
        sensitivity = 0.5

        self.hotword_runner = PreciseRunner(
            PreciseEngine('/opt/backend/precise-engine/precise-engine',
                          '/opt/backend/hey-mycroft.pb'),
            trigger_level,
            sensitivity,
            stream=self.hotword_stream,
            on_activation=on_activation,
        )
        self.hotword_runner.start()

        BLOCKS_PER_SECOND = 50
        self.block_size = int(self.sample_rate /
                              float(BLOCKS_PER_SECOND))  # 320
        padding_ms = 600
        block_duration_ms = 1000 * \
            self.block_size // self.sample_rate  # 20
        num_padding_blocks = padding_ms // block_duration_ms  # 30
        self.ratio = 0.75

        self.ring_buffer = deque(maxlen=num_padding_blocks)
        self.triggered = False
        self.running = True
    def __init__(self, model):

        print("*** MODEL ***", model)
        self.wake_word = rospy.Publisher(WAKE_WORD_TOPIC, Bool, queue_size=10)

        self.stream = ReadWriteStream()

        rospy.Subscriber(CONVERTED_AUDIO_TOPIC, Float32MultiArray,
                         self.audio_cb)

        engine = PreciseEngine(os.path.join(PRECISE_DIR,
                                            '.venv/bin/precise-engine'),
                               model,
                               chunk_size=1024)

        # stream = binary 16 bit mono!
        PreciseRunner(engine,
                      stream=self.stream,
                      on_prediction=self.on_prediction,
                      on_activation=self.on_activation,
                      trigger_level=3,
                      sensitivity=0.8).start()
    def __init__(self):
        # engine data:      https://github.com/mycroftai/precise-data/tree/dist
        # precise models:   https://github.com/MycroftAI/precise-data/tree/models?files=1
        sensitivity = float(0.5)
        trigger_level = int(3)
        model_path = "models/hey-mycroft.pb"
        engine_path = "precise-engine/precise-engine"
        engine = PreciseEngine(
            engine_path, model_path)

        self.stream = ReadWriteStream()
        self.runner = PreciseRunner(
            engine,
            sensitivity=sensitivity,
            trigger_level=trigger_level,
            on_activation=self.on_activation
        )
        print("Starting precise")
        self.runner.start()
        while True:
            data = self.stream.read()
            self.update_runner(data)
Example #14
0
    def __init__(self, key_phrase="hey mycroft", config=None, lang="en-us"):
        super().__init__(key_phrase, config, lang)
        from petact import install_package
        from precise_runner import (
            PreciseRunner, PreciseEngine, ReadWriteStream
        )
        global install_package

        self.download_complete = True

        self.show_download_progress = Timer(0, lambda: None)
        precise_config = CONFIGURATION['precise']

        precise_exe = self.update_precise(precise_config)

        local_model = self.config.get('local_model_file')
        if local_model:
            self.precise_model = expanduser(local_model)
        else:
            self.precise_model = self.install_model(
                precise_config['model_url'], key_phrase.replace(' ', '-')
            ).replace('.tar.gz', '.pb')

        self.has_found = False
        self.stream = ReadWriteStream()

        def on_activation():
            self.has_found = True

        trigger_level = self.config.get('trigger_level', 3)
        sensitivity = self.config.get('sensitivity', 0.5)

        self.runner = PreciseRunner(
            PreciseEngine(precise_exe, self.precise_model),
            trigger_level, sensitivity,
            stream=self.stream, on_activation=on_activation,
        )
        self.runner.start()
Example #15
0
    def __init__(self, rt, on_activation: Callable):
        super().__init__(rt, on_activation)

        exe_file = which('precise-engine')
        precise_folder = join(self.rt.paths.user_config, 'precise')
        if not exe_file:
            exe_file = join(precise_folder, 'precise-engine', 'precise-engine')
            download_extract_tar(
                self.program_url.format(arch=platform.machine()),
                precise_folder, check_md5=False, subdir='precise-engine',
                on_update=lambda: self.rt.interfaces.faceplate.text('Updating listener...'),
                on_complete=lambda: self.rt.interfaces.faceplate.reset()
            )
        log.debug('Using precise executable: ' + exe_file)

        model_folder = join(precise_folder, 'models', self.wake_word)
        model_file = join(model_folder, self.wake_word + '.pb')
        model_url = self.model_url.format(model_name=self.wake_word)
        download_extract_tar(model_url, model_folder, check_md5=True)

        from precise_runner import PreciseRunner, PreciseEngine
        engine = PreciseEngine(exe_file, model_file, chunk_size=1024)
        self.runner = PreciseRunner(engine, on_activation=on_activation)
    def handle_train(self, subfolder, dialog_file):
        if self.handle_precise_download():
            return

        name = self.get_response('ask.speaker.name',
                                 validator=lambda x: x and len(x.split()) < 4,
                                 on_fail=lambda utterance: self.dialog_renderer
                                 .render('name.error', {'name': utterance}))
        if not name:
            return

        self.speak_dialog(dialog_file)
        wait_while_speaking()

        from precise_runner import PreciseEngine
        engine = PreciseEngine(self.engine_exe, self.model_file,
                               self.chunk_size)
        engine.start()

        recording = self.record_wav()

        with wave.open(recording, 'r') as wr:
            orig_params = wr.getparams()
            frames = wr.readframes(wr.getnframes() - 1)

        ww_positions = self.extract_ww_positions(frames, engine)
        engine.stop()

        samples_folder = join(self.folder, 'samples', name)
        samples_raw_folder = join(samples_folder, 'not-wake-word')
        makedirs(samples_raw_folder, exist_ok=True)
        self.split_recording(frames, samples_raw_folder, ww_positions,
                             orig_params)

        self.speak_dialog('recording.complete')
        models_folder = join(self.folder, 'user-models')
        makedirs(models_folder, exist_ok=True)
        model_file = join(models_folder,
                          '{}.{}.net'.format('hey-mycroft', name))
        self.transfer_train(samples_folder, model_file)
        self.speak_dialog('model.confirm')

        thresh = self.calc_thresh(model_file, samples_raw_folder)
        print("THRESH:", thresh)
Example #17
0
    def __init__(self,
                 keyword=None,
                 sensitivity=None,
                 detected_callback=None
                ):
                 
        super(HotwordDetector, self).__init__()
        sl = SettingLoader()
        self.settings = sl.settings
        self.paused_loop = False
        self.detected_callback = detected_callback
        self.sensitivity = sensitivity
        trigger_level = 3
        self.keyword = keyword
        self.found_keyword = False

        if not os.path.exists(RESOURCE_FILE):
            if self.downloadPreciseEngine():
                Utils.print_info("[Precise] Download complete")
            else:
                raise PreciseEngineNotFound("Error downloading precise engine, check your internet connection or try again later.")

        engine = PreciseEngine(RESOURCE_FILE, self.keyword)

        self.stream = ReadWriteStream()
        self.runner = PreciseRunner(engine,
                                    sensitivity=float(self.sensitivity),
                                    trigger_level=trigger_level,
                                    on_activation=self.activation
                                    )
        
        self.runner.start()
        self.pause()                                    # To avoid that precise starts detecting without beeing ready, we pause it right after start
        if self.settings.machine.startswith("arm"):     # Because importing tensorflow takes up to 10 seconds, we sleep a while
            Utils.print_info("Starting precise trigger")
            time.sleep(10)
Example #18
0
    def __init__(self, key_phrase="hey mycroft", config=None, lang="en-us"):
        super().__init__(key_phrase, config, lang)
        from precise_runner import (
            PreciseRunner, PreciseEngine, ReadWriteStream
        )

        # We need to save to a writeable location, but the key we need
        # might be stored in a different, unwriteable, location
        # Make sure we pick the key we need from wherever it's located,
        # but save to a writeable location only
        local_conf = LocalConf(
            join(xdg.BaseDirectory.xdg_config_home, 'mycroft', 'mycroft.conf')
        )

        for conf_dir in xdg.BaseDirectory.load_config_paths('mycroft'):
            conf = LocalConf(join(conf_dir, 'mycroft.conf'))
            # If the current config contains the precise key use it,
            # otherwise continue to the next file
            if conf.get('precise', None) is not None:
                local_conf['precise'] = conf.get('precise', None)
                break

        # If the key is not found yet, it might still exist on the old
        # (deprecated) location
        if local_conf.get('precise', None) is None:
            local_conf = LocalConf(OLD_USER_CONFIG)

        if not local_conf.get('precise', {}).get('use_precise', True):
            raise PreciseUnavailable

        if (local_conf.get('precise', {}).get('dist_url') ==
                'http://bootstrap.mycroft.ai/artifacts/static/daily/'):
            del local_conf['precise']['dist_url']
            local_conf.store()
            Configuration.updated(None)

        self.download_complete = True

        self.show_download_progress = Timer(0, lambda: None)
        precise_config = Configuration.get()['precise']

        precise_exe = self.update_precise(precise_config)

        local_model = self.config.get('local_model_file')
        if local_model:
            self.precise_model = expanduser(local_model)
        else:
            self.precise_model = self.install_model(
                precise_config['model_url'], key_phrase.replace(' ', '-')
            ).replace('.tar.gz', '.pb')

        self.has_found = False
        self.stream = ReadWriteStream()

        def on_activation():
            self.has_found = True

        trigger_level = self.config.get('trigger_level', 3)
        sensitivity = self.config.get('sensitivity', 0.5)

        self.runner = PreciseRunner(
            PreciseEngine(precise_exe, self.precise_model),
            trigger_level, sensitivity,
            stream=self.stream, on_activation=on_activation,
        )
        self.runner.start()
#!/usr/bin/env python

from precise_runner import PreciseEngine, PreciseRunner

engine = PreciseEngine('.venv/bin/precise-engine', 'my_model_file.pb')
runner = PreciseRunner(engine, on_activation=lambda: print('hello'))
runner.start()
Example #20
0
    time.sleep(3)
    print('hotword detection restart')
    ros.pub_hotword.publish(False)


def start():
    print('hotword node start')
    while not rospy.is_shutdown():
        pass
    print('hotword node stop')


if __name__ == "__main__":
    #ros
    ros = HotWordRos()
    rospy.init_node('Hotword', anonymous=True)
    rate = rospy.Rate(10)  # 10hz

    # engine = PreciseEngine('/home/rastech/catkin_ws/src/venv/bin/precise-engine',
    #                        '/home/rastech/catkin_ws/src/fero_speaker/script/precise-data-models/new_ifero_191021.pb')
    engine = PreciseEngine(precise_engine, wake_word_model)

    runner = PreciseRunner(engine,
                           sensitivity=0.5,
                           on_activation=lambda: detectd())
    runner.start()

    try:
        start()
    except rospy.ROSInterruptException:
        pass
Example #21
0
def wake():
    global wake_decoder

    if request.method == 'POST':
        system = request.form['system']
        if system == 'pocketsphinx':
            # Pocketsphinx
            wake_statuses[system] = 'recording'
            if wake_decoder is None:
                ps_config = config['pocketsphinx']
                training_cfg = config['training']

                # Listen with the default acoustic model and mixed dictionary
                hmm = ps_config['acoustic_model']
                dic = ps_config['dictionary']
                keyphrase = request.form['keyphrase']
                kws_threshold = float(ps_config['kws_threshold'])

                def detect():
                    from pocketsphinx import Pocketsphinx, Ad
                    ad = Ad(None, 16000)  # default input
                    decoder = Pocketsphinx(lm=False,
                                           hmm=hmm,
                                           dic=dic,
                                           keyphrase=keyphrase,
                                           kws_threshold=kws_threshold)

                    buf = bytearray(2048)
                    with ad:
                        with decoder.start_utterance():
                            while ad.readinto(buf) >= 0:
                                decoder.process_raw(buf, False, False)
                                if decoder.hyp():
                                    with decoder.end_utterance():
                                        logging.info('Wake word detected for %s' % system)
                                        wake_statuses[system] = 'detected'
                                        break

                # Run detection in sepearate thread
                thread = threading.Thread(target=detect, daemon=True)
                thread.start()
                logging.debug('Listening for %s with %s' % (keyphrase, system))

            return system
        elif system == 'snowboy':
            # Snowboy
            snowboy_cfg = config['snowboy']
            model_path = request.form['model']
            sensitivity = float(snowboy_cfg['sensitivity'])
            audio_gain = float(snowboy_cfg['audio_gain'])

            from snowboy import snowboydecoder
            detector = snowboydecoder.HotwordDetector(
                model_path, sensitivity=sensitivity, audio_gain=audio_gain)

            def stop():
                wake_statuses[system] = 'detected'
                detector.terminate()

            def detect():
                detector.start(stop)

            # Run detection in sepearate thread
            thread = threading.Thread(target=detect, daemon=True)
            thread.start()
            logging.debug('Listening for %s with %s' % (os.path.basename(model_path), system))

            return system
        elif system == 'precise':
            # Mycroft Precise
            precise_cfg = config['mycroft_precise']
            model_path = request.form['model']

            from precise_runner import PreciseEngine, PreciseRunner
            engine = PreciseEngine('precise-engine', model_path)


            def detect():
                event = threading.Event()
                runner = PreciseRunner(engine, on_activation=lambda: event.set())
                runner.start()
                event.wait()
                wake_statuses[system] = 'detected'
                runner.stop()

            thread = threading.Thread(target=detect, daemon=True)
            thread.start()
            logging.debug('Listening for %s with %s' % (os.path.basename(model_path), system))

            return system
        else:
            return make_response('Unknown system: %s' % system, 500)

    return render_template('wake-word.html',
                           current_page='wake-word',
                           config=config,
                           basename=os.path.basename)
Example #22
0
#!/usr/bin/env python3

from precise_runner import PreciseEngine, PreciseRunner

engine = PreciseEngine('precise-engine', 'jao-sandy.pb')
runner = PreciseRunner(engine, on_activation=lambda: print('hello'))
runner.start()
Example #23
0
#!/usr/bin/env python3

import socket
from threading import Thread

from precise.network_runner import Listener
from precise_runner import PreciseRunner, ReadWriteStream, PreciseEngine
from precise_runner.runner import ListenerEngine

ADDRESS = ('localhost', 10000)
MODEL_NAME = 'my-model.pb.or.net'
CHUNK_SIZE = 2048

stream = ReadWriteStream()
runner = PreciseRunner(
    PreciseEngine('.venv/bin/precise-engine', MODEL_NAME),
    stream=stream, on_activation=lambda: print('Activated!')
)
runner.start()


class PreciseConnection:
    """Represents a socket connection routed to a precise process"""

    def __init__(self, connection, address):
        self.address = address
        self.connection = connection  # type: socket.socket
        self.stream = ReadWriteStream()
        self.runner = PreciseRunner(
            ListenerEngine(Listener(MODEL_NAME, CHUNK_SIZE), CHUNK_SIZE),
            1, stream=self.stream, on_activation=self.on_activation,
Example #24
0

from time import sleep
from precise_runner import PreciseEngine, PreciseRunner

engine = PreciseEngine('precise-engine/precise-engine', 'geektime.pb')
runner = PreciseRunner(engine, on_activation=lambda: print('hello'))
runner.start()

# Sleep forever
while True:
    sleep(10)
Example #25
0
#!/usr/bin/env python3

from precise_runner import PreciseEngine, PreciseRunner

engine = PreciseEngine('/mycroft-precise/.venv/bin/precise-engine',
                       '/mycroft-precise/marvin.pb')
runner = PreciseRunner(engine, on_activation=lambda: print('hello'))
runner.start()

# Sleep forever
from time import sleep
while True:
    sleep(10)
from precise_runner import PreciseEngine, PreciseRunner
from time import sleep

print('Initializing...')
def on_act():
    print('wake word detected')

def on_pred(x):
    x = 1

# initiate precise engine with mycroft model
engine = PreciseEngine('precise-engine', 'hey-mycroft.tflite')

# initiate precise runner that will listen, predict, and detect wakeword
runner = PreciseRunner(engine,  on_prediction=on_pred, on_activation=on_act)

# start runner
runner.start()

# keep main thread active until user interrupt
try:
    while 1:
        print('listening...')
        sleep(60)
except:
    runner.stop()
Example #27
0
import socket
import threading
from threading import Thread
#threading.TIMEOUT_MAX = 4294967.0
#threading.TIMEOUT_MAX = 4294967.0

from precise.network_runner import Listener
from precise_runner import PreciseRunner, ReadWriteStream, PreciseEngine
from precise_runner.runner import ListenerEngine

ADDRESS = ('localhost', 10000)
MODEL_NAME = 'jao-sandy.pb'
CHUNK_SIZE = 2048

stream = ReadWriteStream()
runner = PreciseRunner(PreciseEngine('precise-engine', MODEL_NAME),
                       stream=stream,
                       on_activation=lambda: print('Activated!'))
runner.start()


class PreciseConnection:
    """Represents a socket connection routed to a precise process"""
    def __init__(self, connection, address):
        self.address = address
        self.connection = connection  # type: socket.socket
        self.stream = ReadWriteStream()
        self.runner = PreciseRunner(ListenerEngine(
            Listener(MODEL_NAME, CHUNK_SIZE), CHUNK_SIZE),
                                    1,
                                    stream=self.stream,
Example #28
0
#!/usr/bin/env python3

from precise_runner import PreciseEngine, PreciseRunner

engine = PreciseEngine('.venv/bin/precise-engine', 'hey-mycroft-2.pb')
runner = PreciseRunner(engine, on_activation=lambda: print('hello'))
runner.start()
Example #29
0
from precise_runner import PreciseRunner, PreciseEngine
from threading import Event

def on_prediction(prob):
    print('!' if prob > 0.5 else '.', end='', flush=True)

def on_activation():
    print("ok")

engine = PreciseEngine('C:\\Users\\TC\\Anaconda3\\Scripts\\precise-engine.exe', 'jao-sandy.pb') 
PreciseRunner(engine, on_prediction=on_prediction, on_activation=on_activation,
              trigger_level=0).start()
Event().wait()  # Wait forever
Example #30
0
    def __init__(self, decoder_model, sensitivity=[], audio_gain=1.0):
        def audio_callback(in_data, frame_count, time_info, status):
            self.ring_buffer.extend(in_data)
            play_data = chr(0) * len(in_data)
            return play_data, pyaudio.paContinue

        if type(decoder_model) is not list:
            decoder_model = [decoder_model]
        if type(sensitivity) is not list:
            sensitivity = [sensitivity]
        model_str = ",".join(decoder_model)

        try:
            self.detector = snowboydetect.SnowboyDetect(
                resource_filename=str(
                    settings.LISTEN_SNOWBOY_RESOURCE).encode(),
                model_str=model_str.encode())
            self.detector.SetAudioGain(audio_gain)
            self.num_hotwords = self.detector.NumHotwords()
            self.num_channels = self.detector.NumChannels()
            self.sample_rate = self.detector.SampleRate()

            if len(decoder_model) > 1 and len(sensitivity) == 1:
                sensitivity = sensitivity * self.num_hotwords
            if len(sensitivity) != 0:
                assert self.num_hotwords == len(
                    sensitivity
                ), "number of hotwords in decoder_model (%d) and sensitivity " + "(%d) does not match" % (
                    self.num_hotwords, len(sensitivity))
            sensitivity_str = ",".join([str(t) for t in sensitivity])
            if len(sensitivity) != 0:
                self.detector.SetSensitivity(sensitivity_str.encode())
        except Exception as e:
            print("Error while loading Snowboy: ", e)
            self.num_channels = 1
            self.sample_rate = settings.LISTEN_SAMPLERATE
            self.num_hotwords = len(settings.LISTEN_SNOWBOY_MODELS)

        self.chunksize = settings.LISTEN_CHUNKSIZE
        self.seconds_per_buffer = float(self.chunksize) / self.sample_rate

        try:
            self.precise_chunk = settings.LISTEN_PRECISE_CHUNKSIZE
            print("Starting precise engine: ", self.precise_chunk)

            self.precise_engine = PreciseEngine(settings.LISTEN_PRECISE_BINARY,
                                                settings.LISTEN_PRECISE_MODEL,
                                                chunk_size=self.precise_chunk)
            self.precise = MyPreciseRunner(self.precise_engine,
                                           on_prediction=None,
                                           on_activation=None,
                                           trigger_level=3,
                                           sensitivity=0.5)
        except Exception as e:
            self.precise = None
            self.precise_engine = None
            print(e)
            if not settings.isDebug():
                raise

        self.audio_format = pyaudio.paInt16
        self.ring_buffer = RingBuffer(self.num_channels * self.sample_rate * 5)
        self.pythonaudio = pyaudio.PyAudio()
        self.frames = []
        self.infos = []

        self.sphinxrecognizer = mysphinx.MyRecognizer()  #sr.Recognizer()
        try:
            self.sphinxrecognizer.prepare_sphinx2(
                language="en-GIT",
                keyword_entries=settings.LISTEN_SPHINX_KEYWORDS)
        except:
            pass

        for mic in enumerate(sr.Microphone.list_microphone_names()):
            print(mic)

        default_info = self.pythonaudio.get_default_input_device_info()
        print("Default microphone info ", default_info)

        if settings.LISTEN_MIC_INDEX is None:
            settings.LISTEN_MIC_INDEX = default_info['index']

        self.sample_width = pyaudio.get_sample_size(self.audio_format)
        self.energy_threshold = settings.LISTEN_ENERGY_THRESHOLD
        self.stream_in = self.pythonaudio.open(
            input=True,
            output=False,
            input_device_index=settings.LISTEN_MIC_INDEX,
            format=self.audio_format,
            channels=self.num_channels,
            rate=self.sample_rate,
            frames_per_buffer=self.chunksize,
            stream_callback=audio_callback)
        print("Class settings:")
        print(self.__dict__)