Python - объект IBM Watson Speech to Text «NoneType» не имеет атрибута «get_result» - PullRequest
0 голосов
/ 09 октября 2018

Я занимаюсь разработкой программы с IBM Watson Speech to Text и в настоящее время использую Python 2.7.Вот заглушка некоторого кода для разработки:

class MyRecognizeCallback(RecognizeCallback):
    def __init__(self):
        RecognizeCallback.__init__(self)

    def on_data(self, data):
        pass

    def on_error(self, error):
        pass

    def on_inactivity_timeout(self, error):
        pass

speech_to_text = SpeechToTextV1(username='*goes here*', password='*goes here*')
speech_to_text.set_detailed_response(True)

f = '/home/user/file.wav'

rate, data = wavfile.read(f)
work = data.tolist()

with open(f, 'rb') as audio_file:

                # Get IBM Watson analytics
                currentModel = "en-US_NarrowbandModel" if rate <= 8000 else "en-US_BroadbandModel"

                x = ""

                print(" - " + f)

                try:

                    # Callback info
                    myRecognizeCallback = MyRecognizeCallback()

                    # X represents the responce from Watson
                    audio_source = AudioSource(audio_file)
                    my_result = speech_to_text.recognize_using_websocket(
                                    audio_source,
                                    content_type='audio/wav',
                                    timestamps=True,
                                    recognize_callback=myRecognizeCallback,
                                    model=currentModel,
                                    inactivity_timeout=-1,
                                    max_alternatives=0)
                    x = json.loads(json.dumps(my_result, indent=2), object_hook=lambda d: n
                    namedtuple('X', d.keys())(*d.values()))

Я ожидаю, что будет возвращен объект JSON с результатами файла с указанными выше параметрами.Вместо этого я получаю сообщение об ошибке, которое выглядит следующим образом:

Error received: 'NoneType' object has no attribute 'connected'

Вот и вся трассировка - никаких других ошибок, кроме этой.Однако, когда я пытаюсь получить доступ к объекту JSON в следующем коде, я получаю эту ошибку:

Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/watson_developer_cloud/websocket/recognize_listener.py", line 96, in run
    chunk = self.audio_source.input.read(ONE_KB)
ValueError: I/O operation on closed file

Я что-то забыл или что-то поставил не в том месте?

Редактировать:

В моем исходном коде была ошибка, которую я исправил сам.Несмотря на это, я все еще получаю исходную ошибку.Вот обновление:

my_result = speech_to_text.recognize_using_websocket(
                                    audio_source,
                                    content_type='audio/wav',
                                    timestamps=True,
                                    recognize_callback=myRecognizeCallback,
                                    model=currentModel,
                                    inactivity_timeout=None,
                                    max_alternatives=None).get_result()
                    x = json.loads(json.dumps(my_result, indent=2), object_hook=lambda d: namedtuple('X', d.keys())(*d.values()))

1 Ответ

0 голосов
/ 09 октября 2018

Взгляните на object_hook=lambda d: n, в языке Python lambda d: n означает «функция, которая принимает d, игнорирует d и возвращает n».

Я предполагаю, что n установлено в None где-то еще.

Если это не сработает, отладка может оказаться проще, если вы разбиваете лямбду на отдельную функцию, возможно def to_named_tuple(object):.

...