Как отправить текстовый ввод в SDK Google Assistant в Python

при преобразовании текста в аудио и последующей отправке в Google Ассистент pushtalk не дает точного результата. Поэтому мне нужно предложение, как я могу отправить текстовые данные в textinput помощника Google, чтобы получить более точный результат. Или любое другое предложение, которое может повысить мою точность в python

это то, что я сейчас установлен

"pip install --upgrade setuptools wheel \ google-assistant-library \ google-assistant-sdk [samples] \ google-auth-oauthlib [tool]"

это то, что я сейчас использую для преобразования текста в аудио, а затем отправки в Google-помощник

    def post(self):
        args = request.get_json()
        text_received = str(args['assitant_text'])
        file_name = str(args['google_file_name'])
        project_id = str(args['project_id'])
        device_model_id = str(args['device_model_id'])
        refresh_token = str(args['refresh_token'])
        client_id = str(args['client_id'])
        client_secret = str(args['client_secret'])
        voice = str(args['voice'])
        text_received = "WHat is the capital of karnataka"
        logger.emit("Received request parameters from api",
                        {
                            "api": "/google",
                            "args": args
                        }
                    )
        token = {"refresh_token": refresh_token, "token_uri": "https://accounts.google.com/o/oauth2/token", "client_id": client_id, "client_secret": client_secret, "scopes": ["https://www.googleapis.com/auth/assistant-sdk-prototype"]}
        with open('credentials.json', 'w') as outfile:
            json.dump(token, outfile)
        status = subprocess.call('aws polly synthesize-speech --output-format mp3 --voice-id %s --text "%s"  %s.mp3' %(voice, text_received, file_name), shell=True, stdout=subprocess.PIPE)
        logger.emit("Calling aws polly",
                        {
                            "api": "/google",
                            "status_code": status
                        }
                    )
        tf = open("%s.mp3" % file_name, 'r')
        _input = AudioSegment.from_file(tf.name)
        tf = tempfile.NamedTemporaryFile(suffix=".wav", delete=True)
        output = _input.set_channels(1).set_frame_rate(16000)
        f = output.export(tf.name, format="wav")
        status = subprocess.call('googlesamples-assistant-pushtotalk --credentials credentials.json --device-config device_config.json --project-id %s --device-model-id %s -i %s -o %s_output.wav' %(project_id, device_model_id, f.name, file_name), shell=True, stdout=subprocess.PIPE)
        logger.emit("Calling google samples assistant pushtotalk",
                        {
                            "api": "/google",
                            "status": status
                        }
                    )
        as_output = AudioSegment.from_file("%s_output.wav" %file_name)

        kf = tempfile.NamedTemporaryFile(suffix=".wav")
        output = as_output.set_channels(2)
        f = output.export(kf.name, format="wav")
        r = sr.Recognizer()
        with sr.AudioFile(f.name) as source:
          output_audio = r.record(source)
        text = r.recognize_google(output_audio)
        f.close()
        kf.close()
        os.remove("%s_output.wav" %file_name)
        os.remove("%s.mp3" %file_name)
        logger.emit("api completed successfully",
                        {
                            "api": "/google",
                            "status": "completed"
                        }
                    )
        return jsonify({"response": text})


person puja garg    schedule 12.09.2019    source источник


Ответы (1)


Вы можете отправлять текстовые запросы, используя API напрямую, вместо того, чтобы пытаться преобразовать аудио.

Также есть образец ввода текста, к которому вы сможете получить доступ, если загрузите образец проекта:

cd google-assistant-sdk/googlesamples/assistant/grpc

python -m textinput --device-id 'my-device-identifier' --device-model-id 'my-model-identifier'

person Nick Felker    schedule 12.09.2019
comment
См. github.com/googlesamples/assistant-sdk-python/blob/master/ - person Nick Felker; 13.09.2019
comment
Ссылка выше является примером. - person Nick Felker; 17.09.2019
comment
status = subprocess.call('googlesamples-assistant-pushtotalk --credentials credentials.json --device-config device_config.json --project-id %s --device-model-id %s -i %s -o %s_output.wav' %(project_id, device_model_id, f.name, file_name), shell=True, stdout=subprocess.PIPE). Как я могу вызвать ввод текста указанным выше способом - person puja garg; 18.09.2019
comment
Вам нужно будет запустить скрипт python напрямую, так как экспортируемого имени нет. - person Nick Felker; 18.09.2019
comment
Вы можете отправить _ 1_ вместо AudioInConfig - person Nick Felker; 19.09.2019
comment
Привет, @Nick Felker, я попробовал `` python -m googlesamples.assistant.grpc.textinput --device-id 'abc' --device-model-id 'abc', он просит меня ввести запрос с помощью клавиатуры, но для большинства из вопросов я не получаю ответа. - person puja garg; 20.09.2019
comment
не могли бы вы привести мне пример, где мне нужно отправить text_query вместо AudioInConfig - person puja garg; 20.09.2019
comment
textinput.py не возвращает никакого ответа на такое количество запросов, например, я спросил, что это за веб-сайт Shake Shack в Нью-Йорке? , какой адрес у торгового центра Brookfield?. Он возвращает NONE для всех этих запросов. - person puja garg; 23.09.2019
comment
Поле supplemental_display_text не является текстовым ответом. - person Nick Felker; 23.09.2019
comment
Спасибо за уделенное время @Nick Felker. Еще одна небольшая помощь, на самом деле я получаю большую часть ответа в pushtalk. Итак, вы можете предложить мне более точный способ отправки текста в pushtotalk, преобразовав его в файл wav и снова преобразовав ответ в текст, чтобы я мог повысить точность ответов - person puja garg; 24.09.2019
comment
Нет хорошего способа преобразовать текст и затем отправить его в pushtotalk. Вы получите большую точность, просто отправив текст напрямую через textinput.py - person Nick Felker; 24.09.2019
comment
Но тогда я не получаю ответа от textinput.py на свои вопросы. В основном моя задача - задать вопрос о бизнесе, например, каков их средний рейтинг, каков их адрес, открыты ли они сейчас и т. Д. - person puja garg; 25.09.2019