| |
|
|
| import unittest |
| import sys, os |
| from pocketsphinx import Decoder |
|
|
| DATADIR = os.path.join(os.path.dirname(__file__), "../../test/data") |
|
|
|
|
| class TestKWS(unittest.TestCase): |
| def test_kws(self): |
| |
| stream = open(os.path.join(DATADIR, "goforward.raw"), "rb") |
|
|
| |
| decoder = Decoder(kws=os.path.join(DATADIR, "goforward.kws"), |
| loglevel="INFO", |
| lm=None) |
| decoder.start_utt() |
| keywords = ["forward", "meters"] |
| while keywords: |
| buf = stream.read(1024) |
| if buf: |
| decoder.process_raw(buf) |
| else: |
| break |
| if decoder.hyp() != None: |
| print( |
| [ |
| (seg.word, seg.prob, seg.start_frame, seg.end_frame) |
| for seg in decoder.seg() |
| ] |
| ) |
| print("Detected keyphrase, restarting search") |
| for seg in decoder.seg(): |
| self.assertTrue(seg.end_frame > seg.start_frame) |
| self.assertEqual(seg.word, keywords.pop(0)) |
| decoder.end_utt() |
| decoder.start_utt() |
| stream.close() |
| decoder.end_utt() |
|
|
| |
| stream = open(os.path.join(DATADIR, "goforward.raw"), "rb") |
| decoder.start_utt() |
| decoder.process_raw(stream.read(), full_utt=True) |
| decoder.end_utt() |
| print( |
| [ |
| (seg.word, seg.prob, seg.start_frame, seg.end_frame) |
| for seg in decoder.seg() |
| ] |
| ) |
| self.assertEqual(decoder.hyp().hypstr, "forward meters") |
| self.assertEqual(["forward", "meters"], |
| [seg.word for seg in decoder.seg()]) |
|
|
|
|
| if __name__ == "__main__": |
| unittest.main() |
|
|