Mycroft-core: Tes untuk fallback fonem yang tidak valid gagal pada pocketsphinx terbaru

Dibuat pada 6 Mei 2020  ·  18Komentar  ·  Sumber: MycroftAI/mycroft-core

Saya menjalankan tes di Alpine Linux menggunakan paket sistem dan Python 3.8.

Saat ini saya memiliki semua tes yang berhasil kecuali PocketSphinxTest.testInvalid dan LocalRecognizerInitTest.testListenerConfig . Tampaknya penggantian untuk fonem yang tidak valid tidak berfungsi.

============================================================= FAILURES ==============================================================
___________________________________________________ PocketSphinxTest.testInvalid ____________________________________________________

self = <test.unittests.client.test_hotword_factory.PocketSphinxTest testMethod=testInvalid>

    def testInvalid(self):
        config = {
            'hey Zeds': {
                'module': 'pocketsphinx',
                'phonemes': 'ZZZZZZZZZ',
                'threshold': 1e-90
            }
        }
        p = HotWordFactory.create_hotword('hey Zeds', config)
>       self.assertEqual(p.phonemes, 'HH EY . M AY K R AO F T')
E       AssertionError: 'ZZZZZZZZZ' != 'HH EY . M AY K R AO F T'
E       - ZZZZZZZZZ
E       + HH EY . M AY K R AO F T

test/unittests/client/test_hotword_factory.py:43: AssertionError
------------------------------------------------------- Captured stdout call --------------------------------------------------------
2020-05-06 14:10:53.204 | INFO     |  7488 | mycroft.client.speech.hotword_factory:load_module:386 | Loading "hey Zeds" wake word via pocketsphinx
____________________________________________ LocalRecognizerInitTest.testListenerConfig _____________________________________________

self = <test.unittests.client.test_local_recognizer.LocalRecognizerInitTest testMethod=testListenerConfig>
mock_config_get = <MagicMock name='get' id='139759354767968'>

    @patch.object(Configuration, 'get')
    def testListenerConfig(self, mock_config_get):
        """Ensure that the fallback method collecting phonemes etc.
        from the listener config works.
        """
        test_config = base_config()
        mock_config_get.return_value = test_config

        # Test "Hey Mycroft"
        rl = RecognizerLoop()
        self.assertEqual(rl.wakeword_recognizer.key_phrase, "hey mycroft")

        # Test "Hey Victoria"
        test_config['listener']['wake_word'] = 'hey victoria'
        test_config['listener']['phonemes'] = 'HH EY . V IH K T AO R IY AH'
        test_config['listener']['threshold'] = 1e-90
        rl = RecognizerLoop()
        self.assertEqual(rl.wakeword_recognizer.key_phrase, "hey victoria")

        # Test Invalid"
        test_config['listener']['wake_word'] = 'hey victoria'
        test_config['listener']['phonemes'] = 'ZZZZZZZZZZZZ'
        rl = RecognizerLoop()
>       self.assertEqual(rl.wakeword_recognizer.key_phrase, "hey mycroft")
E       AssertionError: 'hey victoria' != 'hey mycroft'
E       - hey victoria
E       + hey mycroft

test/unittests/client/test_local_recognizer.py:76: AssertionError

Semua 18 komentar

Python 3.8 melewati semua tes di Travis , akan mengujinya secara lokal juga untuk mengonfirmasi.

Tahukah Anda versi pocketsphinx dan python-pocketsphinx mana yang digunakan?

0.1.15, yang mungkin menjadi masalah di sini, karena 15 poin rilis lebih lanjut :wink:

Melakukan tes cepat dan memutakhirkan pocketsphinx yang mengakibatkan saya mendapatkan masalah yang sama persis, jadi pasti masalahnya.

Keren, setidaknya sekarang saya tahu di mana mencarinya. Aku akan menyelidiki!

Sejujurnya saya kagum ini adalah satu-satunya masalah yang muncul dengan versi yang lebih baru, melihat seberapa ketat Mycroft biasanya menjaga ketergantungannya

Halah ya, saya juga! Kami memiliki bagian kerusakan yang adil ketika melakukan pembaruan (py2 ke 3 kasar, dan meningkatkan dari versi tornado misterius ke yang lebih baru cukup mengganggu)

Rilis yang cukup menarik 0.1.5 hingga 0.1.15 dilakukan dalam waktu 3 hari, dan pengujian masih dilakukan pada 0.1.3 yang merupakan rilis pertama yang tersedia di PyPi setelah 1.0.

0.1.0 sebenarnya dari Juni 2016, jadi saya kira dep tidak pernah ditingkatkan di mycroft-core sejak rilis publik? Setidaknya sekarang saya tahu kerusakan itu terjadi antara tanggal 4 Juni 2016 dan 12 September 2016 (antara 0.1.0 dan 0.1.3).

Hmpf, masalahnya bukan di pocketsphinx-python itu sendiri, itu ada di submodule pocketsphinx yang digunakannya. Jika saya menggunakan pocketsphinx-python 0.1.0 tetapi dengan submodul yang lebih baru, pengujiannya juga gagal. Tetapi jika saya menggunakannya dengan submodul yang disertakan dengan rilis itu, itu berfungsi dengan baik. Saya kira itu adalah masalah menggunakan perpustakaan tanpa rilis ...

Faktanya, kerusakannya adalah antara https://github.com/cmusphinx/pocketsphinx/commits/ec89abd9d2e976019338ecae7d6cafeecdb95eb2 dan https://github.com/cmusphinx/pocketsphinx/commits/a60982363101704eca342e90cd

pocketsphinx-python 0.1.15 dengan submodul dari 0.1.0 benar-benar membuat tes ini berhasil!

Gotcha, https://github.com/cmusphinx/pocketsphinx/commit/08e367ef349983095ed5fd73f874329069628ac6 adalah komit yang merusaknya. Saya tidak yakin bagaimana ini merusak segalanya, tetapi mungkin itu jelas bagi seseorang?

Ah, sepertinya https://github.com/MycroftAI/mycroft-core/blob/dev/mycroft/client/speech/hotword_factory.py#L108 sudah usang dan sekarang seharusnya config.set_string('-kws', <path to some kws file>) .

https://github.com/cmusphinx/pocketsphinx/commit/08e367ef349983095ed5fd73f874329069628ac6#diff -0376830e1b8c31e50aa1f84206085a41

Temuan yang bagus, jadi alih-alih meneruskan frasa kunci, kita perlu menulis frasa kunci dan ambang batas ke file tmp dan meneruskannya? Atau entah bagaimana mirip dengan file -dict yang digunakan untuk meneruskan fonem dan pemetaan kata (saya pikir itu setidaknya)?

Nah file tes yang digunakan oleh pocketsphinx hanya berisi beberapa hal:

anything /1e-10/
something
bad line / here
just bad line /
forward

non_existign_word

Jadi sepertinya bisa file tmp, tapi saya tidak yakin, saya tidak tahu pocketsphinx :joy:

Saya melakukan tes mengubah -keyphrase menjadi -kws dan file serupa tetapi mendapatkan masalah yang sama. Saya ingin tahu apakah ada cara untuk memverifikasi validitas fonem secara eksplisit selain mengharapkan kesalahan dari pembuatan Decoder. Tapi saya mungkin juga melakukan sesuatu yang salah

Hmm https://cmusphinx.github.io/wiki/faq/ menyarankan bahwa -keyphrase masih valid...

Hmm mungkin. Saya kira -keyphrase selalu berupa frasa tunggal, di mana -kws dapat berisi beberapa frasa.

Maka mungkin salah dalam memverifikasi frasa kunci yang diteruskan, karena logika itu telah berubah.

Jika Anda memiliki hal lain untuk digali, saya dapat mencoba meluangkan waktu untuk menemukan solusi untuk ini besok atau lebih.

Aku punya banyak hal yang harus dilakukan haha. Masalah utama di sini adalah bahwa ini sedikit di luar kemampuan saya, jadi saya akan senang jika Anda bisa melihatnya.

@forslund apakah Anda beruntung dengan ini?

Saya belum sepenuhnya melewatinya. Saya mungkin memiliki solusi yang setengah selesai (jika berhasil)

Apakah halaman ini membantu?
0 / 5 - 0 peringkat