Ejemplo n.º 1
0
def rasa_nlu():
    m1 = MicrophoneModule(5000)
    m2 = GoogleASRModule("en-US")
    m3 = CallbackModule(callback=lambda x: print("%s (%f) - %s" % (
        x.text, x.confidence, x.final)))
    m4 = RasaNLUModule("data/rasa/models/nlu/default/current")
    m5 = CallbackModule(callback=lambda x: print(x.act, "-", x.concepts))

    m1.subscribe(m2)
    m2.subscribe(m3)
    m2.subscribe(m4)
    m4.subscribe(m5)

    m4.setup()
    m2.setup()
    m1.setup()
    m3.setup()
    m5.setup()

    print("All setup")

    m1.run(run_setup=False)
    m2.run(run_setup=False)
    m3.run(run_setup=False)
    m4.run(run_setup=False)
    m5.run(run_setup=False)

    input()

    m1.stop()
    m2.stop()
    m3.stop()
    m4.stop()
    m5.stop()
Ejemplo n.º 2
0
def repeat_demo():
    m1 = MicrophoneModule(5000)
    m2 = GoogleASRModule("en-US")
    m3 = TextDispatcherModule()
    m4 = GoogleTTSModule("en-US", "en-US-Wavenet-A")
    m5 = AudioDispatcherModule(5000)
    m6 = StreamingSpeakerModule(5000)

    m1.subscribe(m2)
    m2.subscribe(m3)
    m3.subscribe(m4)
    m4.subscribe(m5)
    m5.subscribe(m6)

    m1.setup()
    m2.setup()
    m3.setup()
    m4.setup()
    m5.setup()
    m6.setup()

    print("All setup")

    m1.run(run_setup=False)
    m2.run(run_setup=False)
    m3.run(run_setup=False)
    m4.run(run_setup=False)
    m5.run(run_setup=False)
    m6.run(run_setup=False)

    input()

    m1.stop()
    m2.stop()
    m3.stop()
    m4.stop()
    m5.stop()
    m6.stop()
Ejemplo n.º 3
0
class Hearing(object):
    """
    The Hearing component of the Spoken Dialog System.

    Components:
        - MicrophoneModule
        - ASRModule
        - IncrementalizeASRModule
    """

    CACHE_DIR = "/tmp"

    def __init__(
        self,
        chunk_time=None,
        chunk_size=None,
        sample_rate=16000,
        bytes_per_sample=2,
        language="en-US",
        nchunks=20,
        use_asr=True,
        use_iasr=False,
        record=False,
        debug=False,
        bypass=False,
        cache_dir="/tmp",
    ):
        self.sample_rate = sample_rate
        assert (chunk_time is not None or chunk_size
                is not None), "please provide either chunk_time or chunk_size"

        if chunk_size is not None:
            self.chunk_size = int(chunk_size)
            self.chunk_time = chunk_size / sample_rate
        else:
            self.chunk_time = chunk_time
            self.chunk_size = int(chunk_time * sample_rate)

        self.bytes_per_sample = bytes_per_sample
        self.use_asr = use_asr
        self.use_iasr = use_iasr
        self.record = record
        self.debug = debug

        self.cache_dir = cache_dir

        if self.use_iasr:
            self.use_asr = True

        # Components that are always used
        if bypass:
            self.in_mic = MicrophoneOutputBypass(
                chunk_size=self.chunk_size,
                rate=self.sample_rate,
                sample_width=self.bytes_per_sample,
            )
        else:
            self.in_mic = MicrophoneModule(
                chunk_size=self.chunk_size,
                rate=self.sample_rate,
                sample_width=self.bytes_per_sample,
            )
        self.vad_frames = VADFrames(
            chunk_time=self.chunk_time,
            sample_rate=self.sample_rate,
            mode=3,
            debug=debug,
        )
        self.in_mic.subscribe(self.vad_frames)

        # Optional Components
        if self.use_asr:
            self.asr = GoogleASRModule(
                language=language,
                nchunks=nchunks,  # m chunks to trigger a new prediction
                rate=self.sample_rate,
            )
            self.in_mic.subscribe(self.asr)

        if self.use_iasr:
            self.iasr = IncrementalizeASRModule(
                threshold=0.8
            )  # Gets only the newly added words at each increment
            self.asr.subscribe(self.iasr)

        if self.record:
            self.cache_dir = join(cache_dir, "hearing")
            makedirs(self.cache_dir, exist_ok=True)
            print("Hearing: ", self.cache_dir)
            wav_filename = join(self.cache_dir, "user_audio.wav")
            self.audio_record = AudioRecorderModule(
                wav_filename, rate=sample_rate, sample_width=bytes_per_sample)
            self.in_mic.subscribe(self.audio_record)

        if self.debug:
            self.asr_debug = ASRDebugModule()
            if self.use_asr:
                self.asr.subscribe(self.asr_debug)

        logging.info(f"{self.name}: Initialized @ {time.time()}")

    @property
    def name(self):
        return self.__class__.__name__

    def __repr__(self):
        s = "\n" + "=" * 40
        s += "\n" + self.__class__.__name__
        s += f"\nsample_rate: {self.sample_rate}"
        s += f"\nchunk_time: {self.chunk_time}"
        s += f"\nchunk_size: {self.chunk_size}"
        s += f"\nbytes_per_sample: {self.bytes_per_sample}"
        s += f"\nrecord: {self.record}"
        s += f"\nuse_asr: {self.use_asr}"
        s += f"\ndebug: {self.debug}"
        s += "\n" + "=" * 40
        return s

    def setup(self, **kwargs):
        self.in_mic.setup(**kwargs)
        if self.use_asr:
            self.asr.setup(**kwargs)
        if self.use_iasr:
            self.iasr.setup(**kwargs)
        if self.record:
            self.audio_record.setup(**kwargs)
        logging.info(f"{self.name}: Setup")

    def run(self, **kwargs):
        self.in_mic.run(**kwargs)
        self.vad_frames.run(**kwargs)

        if self.use_asr:
            self.asr.run(**kwargs)

        if self.use_iasr:
            self.iasr.run(**kwargs)

        if self.record:
            self.audio_record.run(**kwargs)

        if self.debug:
            if self.use_asr:
                self.asr_debug.run(**kwargs)
                # self.iasr_debug.run(run_setup=run_setup)
        logging.info(f"{self.name}: run @ {time.time()}")

    def stop(self, **kwargs):
        self.in_mic.stop(**kwargs)
        self.vad_frames.stop(**kwargs)

        if self.use_asr:
            self.asr.stop(**kwargs)

        if self.use_iasr:
            self.iasr.stop(**kwargs)

        if self.record:
            self.audio_record.stop(**kwargs)

        if self.debug:
            if self.use_asr:
                self.asr_debug.stop(**kwargs)
        logging.info(f"{self.name}: stop_components @ {time.time()}")