首页 > 解决方案 > python javascript IBMCloud remake Watson-voice-bot for Japanese

问题描述

很抱歉在您忙碌时打扰您。我不介意任何提示或期望,所以如果你能告诉我,我将不胜感激。这是我第一次在这里提问。我是一名日本学生。

这一次,我想将 IBM Cloud 的开源代码 watson-voice-bot 重新制作为日语。但是,我尝试了很长时间,但他们只会说英语。我会继续挑战,但如果有人能给我一些建议,我会很高兴。

此代码是使用三个服务的 api 编写的:语音转文本、文本转语音和 watson 助手。主要功能是一个聊天机器人,它在网站上获取人声,人工智能通过语音做出响应。

https://www.youtube.com/watch?v=umf5egQPPRI

现在可以确定的是在源代码中设置外语的url,将其转换为英文。

所以我尝试正确设置环境变量,但我仍然会说英语。当然,自然语言数据集有日语。

recorder.js 和welcome.py 等尝试了各种方法,例如更改我认为可疑的值,但聊天机器人本身不起作用。

特别是在recorder.js中,我认为像recordeng这样的值会导致一个解决方案,但我无法提出一个明确的解决方案,因为我对Javascript没有足够的了解。

recorder.js 的一部分

  recorder.setupDownload = function(blob){

    if($('#isRecording').prop('value')=='recordEng')
    {
      window.postEnglishAudio(blob);
      var url = (window.URL || window.webkitURL).createObjectURL(blob);
      var link = document.getElementById("saveEnglish");
      link.href = url;
      link.download = 'EnglishRecording.wav';
      link.target = '_blank';
    }
    else {
      window.postHindiAudio(blob);
      var url = (window.URL || window.webkitURL).createObjectURL(blob);
      var link = document.getElementById("saveHindi");
      link.href = url;
      link.download = 'HindiRecording.wav';
      link.target = '_blank';

    }
    document.getElementById("isRecording").value="none";
    // var url = (window.URL || window.webkitURL).createObjectURL(blob);
    // var link = document.getElementById("save");
    // link.href = url;
    // link.download = filename || 'output.wav';

  }

Welcome.py 的一部分

@app.route('/api/text-to-speech', methods=['POST'])
def getSpeechFromText():
    tts_kwargs = {
            'username': textToSpeechUser,
            'password': textToSpeechPassword,
            'iam_apikey': textToSpeechIAMKey,
            'url': textToSpeechUrl
    }

    inputText = request.form.get('text')
    ttsService = TextToSpeechV1(**tts_kwargs)

    def generate():
        audioOut = ttsService.synthesize(
            inputText,
            'audio/wav',
            'ja-JP_EmiVoice').get_result()

        data = audioOut.content

        yield data

    return Response(response=generate(), mimetype="audio/x-wav")

标签: javascriptpythonibm-cloudibm-watsonibm-cloud-infrastructure

解决方案


请显示您的 TTS 代码,因为该错误很可能是因为您没有正确设置 STT 识别方法中的语言模型。

在您展示的 TTS Synthesize 方法中,可以看出您做错了什么。您正在指定位置参数,但如果您查看 Python SDK - https://github.com/watson-developer-cloud/python-sdk/blob/master/ibm_watson/text_to_speech_v1.py

 def synthesize(self,
                text,
                voice=None,
                customization_id=None,
                accept=None,
                **kwargs):

顺序是文字,然后是语音。您应该将参数指定为关键字,如 API 文档中所示 - https://cloud.ibm.com/apidocs/text-to-speech?code=python#synthesize-audio-get

所以在你的情况下:

 audioOut = ttsService.synthesize(
          inputText,
          accept = 'audio/wav',
          voice = 'ja-JP_EmiVoice').get_result()

有关如何使用 Python SDK for Watson 的完整示例,请查看 API 文档 - https://cloud.ibm.com/apidocs/text-to-speech?code=python#synthesize-audio

您的代码应类似于 -


from ibm_watson import TextToSpeechV1

@app.route('/api/text-to-speech', methods=['POST'])
def getSpeechFromText():
    tts_kwargs = {
            'username': textToSpeechUser,
            'password': textToSpeechPassword,
            'iam_apikey': textToSpeechIAMKey,
            'url': textToSpeechUrl
    }

    inputText = request.form.get('text')
    ttsService = TextToSpeechV1(
                    iam_apikey=textToSpeechIAMKey,
                    url=textToSpeechUrl
                  )

    def generate():
        audioOut = ttsService.synthesize(
            inputText,
            voice='ja-JP_EmiVoice',
            accept='audio/wav').get_result()

        data = audioOut.content

        yield data

    return Response(response=generate(), mimetype="audio/x-wav")



推荐阅读