Mycroft-core: تفشل اختبارات الملفات الصوتية الاحتياطية غير الصالحة في أحدث pocketsphinx

تم إنشاؤها على ٦ مايو ٢٠٢٠  ·  18تعليقات  ·  مصدر: MycroftAI/mycroft-core

أقوم بإجراء الاختبارات على Alpine Linux باستخدام حزم النظام و Python 3.8.

نجحت حاليًا جميع الاختبارات باستثناء PocketSphinxTest.testInvalid و LocalRecognizerInitTest.testListenerConfig . يبدو أن احتياطي الصوتيات غير الصالحة لا يعمل.

============================================================= 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

ال 18 كومينتر

يجتاز Python 3.8 جميع الاختبارات على Travis ، وسوف نقوم باختباره محليًا أيضًا للتأكيد.

هل تعرف أي إصدار من pocketsphinx و python-pocketsphinx يتم استخدامه؟

0.1.15 ، والتي ربما تكون هي المشكلة هنا ، حيث يتم إصدار 15 نقطة أخرى: غمزة:

لقد أجرى اختبارًا سريعًا وقم بترقية pocketsphinx مما أدى إلى حصولي على نفس المشكلة بالضبط ، لذا فهي بالتأكيد المشكلة.

رائع ، على الأقل أعرف الآن أين أنظر. سأحقق!

لأكون صادقًا ، أنا مندهش من أن هذه هي المشكلة الوحيدة التي تأتي مع الإصدارات الأحدث ، حيث أرى كيف تحافظ Mycroft الصارمة عادةً على تبعياتها

لول نعم ، وأنا أيضًا! لقد حصلنا على نصيبنا العادل من الكسر على الرغم من ذلك عند إجراء التحديثات (كانت py2 إلى 3 صعبة ، وكانت الترقية من إصدار الإعصار الغامض إلى الإصدار الأحدث مزعجًا للغاية)

الإصدار المثير للاهتمام بما يكفي من 0.1.5 إلى 0.1.15 تم إجراؤه في غضون 3 أيام ، ولا تزال الاختبارات تخترق 0.1.3 والذي كان أول إصدار متاح على PyPi بعد 1.0.

الإصدار 0.1.0 هو في الواقع من يونيو 2016 ، لذلك أعتقد أن القسم لم تتم ترقيته مطلقًا في mycroft-core منذ الإصدار العام؟ على الأقل الآن أعرف أن الكسر يقع في مكان ما بين 4 يونيو 2016 و 12 سبتمبر 2016 (بين 0.1.0 و 0.1.3).

Hmpf ، المشكلة ليست في pocketsphinx-python نفسها ، إنها في جيوب الوحدة الفرعية التي تستخدمها. إذا استخدمت pocketsphinx-python 0.1.0 ولكن مع الوحدات الفرعية الأحدث ، فإن الاختبارات تنكسر بنفس الطريقة. ولكن إذا استخدمته مع الوحدات الفرعية التي تأتي مع هذا الإصدار ، فإنه يعمل بشكل جيد. أعتقد أن هذه هي مشكلة استخدام المكتبات بدون إصدارات ...

في الواقع ، يكون الكسر بين https://github.com/cmusphinx/pocketsphinx/commits/ec89abd9d2e976019338ecae7d6cafeecdb95eb2 و https://github.com/cmusphinx/pocketsphinx/commits/a60982363101704eca342e7e0920920

pocketsphinx-python 0.1.15 مع الوحدات الفرعية من 0.1.0 تجعل هذه الاختبارات تنجح بالفعل!

مسكتك ، https://github.com/cmusphinx/pocketsphinx/commit/08e367ef349983095ed5fd73f874329069628ac6 هو الالتزام الذي كسرها. لست متأكدًا من كيفية كسر هذا للأشياء ، لكن ربما يكون ذلك واضحًا لشخص ما؟

آه ، يبدو أن https://github.com/MycroftAI/mycroft-core/blob/dev/mycroft/client/speech/hotword_factory.py#L108 قديم ويجب أن يكون الآن config.set_string('-kws', <path to some kws file>) .

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

اكتشاف جيد ، لذا بدلاً من تمرير عبارة رئيسية ، نحتاج إلى كتابة العبارة الرئيسية والعتبة إلى ملف tmp وتمريرها؟ أم أنه مشابه إلى حد ما لملف -dict الذي يستخدم لتمرير الصوتيات وتعيينات الكلمات (أعتقد أنه على الأقل)؟

حسنًا ، يحتوي ملف الاختبار الذي يستخدمه pocketsphinx على بعض الأشياء فقط:

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

non_existign_word

لذلك يبدو أنه يمكن أن يكون ملف tmp ، لكنني لست متأكدًا ، لا أعرف pocketsphinx: joy:

لقد أجريت اختبارًا لتغيير -keyphrase إلى -kws وملفًا مشابهًا ولكن حصل على نفس المشكلة. أتساءل عما إذا كانت هناك طريقة للتحقق صراحة من صلاحية الصوتيات بخلاف توقع خطأ من إنشاء وحدة فك التشفير. لكن قد أفعل شيئًا خاطئًا أيضًا

يقترح Hmm https://cmusphinx.github.io/wiki/faq/ أن -keyphrase لا يزال صالحًا ...

هممم ربما. أعتقد أن -keyphrase دائمًا عبارة واحدة ، حيث قد يحتوي -kws على عبارات متعددة.

ثم من المحتمل أن يحدث خطأ في التحقق من العبارة الرئيسية التي تم تمريرها ، لأن هذا المنطق قد تغير.

إذا كان لديك أشياء أخرى للبحث فيها ، يمكنني محاولة قضاء بعض الوقت في إيجاد حل لهذا غدًا أو نحو ذلك.

لدي الكثير من الأشياء لأفعلها هاها. المشكلة الرئيسية هنا هي أن هذا خارج نطاق دوري ، لذا أود أن ألقي نظرة عليه.

forslund هل لديك أي حظ مع هذا بأي فرصة؟

أنا لم أنجح في ذلك. قد يكون لدي حل بديل نصف مكتمل (إذا كان يعمل)

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

forslund picture forslund  ·  6تعليقات

tmajibon picture tmajibon  ·  9تعليقات

AMDphreak picture AMDphreak  ·  10تعليقات

fxdgear picture fxdgear  ·  6تعليقات

beemorris picture beemorris  ·  6تعليقات