mirror of
https://github.com/cmusphinx/pocketsphinx.git
synced 2026-05-17 12:20:35 +00:00
c532fccc0b
in case someone wants to use them as examples. pypocketsphinx_test not updated because it is a backwards compatibility test
88 lines
3.1 KiB
Python
88 lines
3.1 KiB
Python
#!/usr/bin/python
|
|
|
|
import os
|
|
from pocketsphinx import Decoder
|
|
import unittest
|
|
|
|
DATADIR = os.path.join(os.path.dirname(__file__), "../../test/data")
|
|
|
|
|
|
class TestDecoder(unittest.TestCase):
|
|
def _run_decode(self, decoder, expect_fail=False):
|
|
with open(os.path.join(DATADIR, "goforward.raw"), "rb") as fh:
|
|
buf = fh.read()
|
|
decoder.start_utt()
|
|
decoder.process_raw(buf, no_search=False, full_utt=True)
|
|
decoder.end_utt()
|
|
self._check_hyp(decoder.hyp().hypstr, decoder.seg(), expect_fail)
|
|
|
|
def _check_hyp(self, hyp, hypseg, expect_fail=False):
|
|
if expect_fail:
|
|
self.assertNotEqual(hyp, "go forward ten meters")
|
|
else:
|
|
self.assertEqual(hyp, "go forward ten meters")
|
|
words = []
|
|
try:
|
|
for seg in hypseg:
|
|
if seg.word not in ("<s>", "</s>", "<sil>", "(NULL)"):
|
|
words.append(seg.word)
|
|
except AttributeError:
|
|
for word, start, end in hypseg:
|
|
if word not in ("<s>", "</s>", "<sil>", "(NULL)"):
|
|
words.append(word)
|
|
if expect_fail:
|
|
self.assertNotEqual(words, "go forward ten meters".split())
|
|
else:
|
|
self.assertEqual(words, "go forward ten meters".split())
|
|
|
|
def test_decoder(self):
|
|
decoder = Decoder()
|
|
print("log(1e-150) = ", decoder.logmath.log(1e-150))
|
|
print("Pronunciation for word 'hello' is ", decoder.lookup_word("hello"))
|
|
self.assertEqual("HH AH L OW", decoder.lookup_word("hello"))
|
|
print("Pronunciation for word 'abcdf' is ", decoder.lookup_word("abcdf"))
|
|
self.assertEqual(None, decoder.lookup_word("abcdf"))
|
|
|
|
self._run_decode(decoder)
|
|
|
|
# Access N best decodings.
|
|
print("Best 10 hypothesis: ")
|
|
for best, i in zip(decoder.nbest(), range(10)):
|
|
print(best.hypstr, best.score)
|
|
|
|
with open(os.path.join(DATADIR, "goforward.mfc"), "rb") as stream:
|
|
stream.read(4)
|
|
buf = stream.read(13780)
|
|
decoder.start_utt()
|
|
decoder.process_cep(buf, False, True)
|
|
decoder.end_utt()
|
|
hypothesis = decoder.hyp()
|
|
print(
|
|
"Best hypothesis: ",
|
|
hypothesis.hypstr,
|
|
" model score: ",
|
|
hypothesis.best_score,
|
|
" confidence: ",
|
|
hypothesis.prob,
|
|
)
|
|
self.assertEqual("go forward ten meters", decoder.hyp().hypstr)
|
|
|
|
def test_reinit(self):
|
|
decoder = Decoder()
|
|
decoder.add_word("_forward", "F AO R W ER D", True)
|
|
self._run_decode(decoder)
|
|
# should preserve dict words, but make decoding fail
|
|
decoder.config["samprate"] = 48000
|
|
decoder.reinit_feat()
|
|
self.assertEqual("F AO R W ER D", decoder.lookup_word("_forward"))
|
|
self._run_decode(decoder, expect_fail=True)
|
|
decoder.config["samprate"] = 16000
|
|
# should erase dict words
|
|
decoder.reinit()
|
|
self.assertEqual(None, decoder.lookup_word("_forward"))
|
|
self._run_decode(decoder)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|