Azure-Samples / SpeechToText-WebSockets-Javascript

SDK & Sample to do speech recognition using websockets in Javascript
MIT License
216 stars 151 forks source link

Web Socket connection get closed #87

Open DineshGuptaa opened 6 years ago

DineshGuptaa commented 6 years ago

Hi,

I want to make hands-free service for the mobile user so that user can speak and that should convert into text. I am implementing using Golang. I am refering https://docs.microsoft.com/en-us/azure/cognitive-services/speech/api-reference-rest/websocketprotocol

I am creation Gorilla WebSocket connection & getting the response as:

101 Switching Protocols 101 HTTP/1.1 1 1 map[X-Xss-Protection:[1; mode=block] X-Content-Type-Options:[nosniff] Referrer-Policy:[strict-origin-when-cross-origin] X-Msedge-Ref:[Ref A: 15D9AB468CB24BEB99668649AF797A71 Ref B: BOM02EDGE0322 Ref C: 2018-06-26T06:58:40Z] Connection:[Upgrade] Sec-Websocket-Accept:[xA4dpm5gNAwD17GxUXDq/+cXVjg=] X-Frame-Options:[DENY] Content-Security-Policy:[object-src 'none'; form-action 'self'; frame-ancestors 'none'] Date:[Tue, 26 Jun 2018 06:58:39 GMT] Upgrade:[websocket] Strict-Transport-Security:[max-age=31536000]] {0xc0421f3ec0} 0 [] false false map[]

After that I am sending the text message

 path: speech.config
 x-requestid: 7D3CD165552546CF850A480FEBD62007
 x-timestamp: 2018-06-06T06:58:41.990Z
 content-type: application/json

 {"Context":{"system":{"version":"1.0.1"},"os":{"platform":"x86_64","name":"windows","version":"10.0.17134.112"},"device":{"manufacturer":"SpeechSample","model":"SpeechSample","version":"1.0.1"}}}

After sending above message I am getting below error message

read tcp 100.64.145.14:59102->13.107.21.200:443: use of closed network connection

Please help me MS STT implemetion in Golang

Thanks Dinesh Gupta

DineshGuptaa commented 6 years ago

Hi All,

I tried to make websocket connection from a single file I used code from here https://github.com/gorilla/websocket/blob/master/examples/echo/client.go and after making a connection I sent the config but I receive the error. code is as below

textMsg := msrecognize.GetHeaders("speech.config", "547578238432049")
config, err := msrecognize.GetSpeechConfig()
textMsg = fmt.Sprintf("%s\n%s", textMsg, config)
err = c.WriteMessage(websocket.TextMessage, []byte(textMsg))

and

func GetSpeechConfig() (string,error) {
    gi := goInfo.GetInfo()
    device := Device{Manufacturer:"JioSample",Model:"JioSample",Version:version}
    os := OS{Platform:"x86_64", Name: gi.GoOS, Version:gi.Core}
    system := System{Version: version}
        context := Context{System: system,OS:os, Device:device}
        config := SpeechConfig{Context:context}
        byt, err := json.Marshal(config)
        if err == nil{
        return string(byt), err
       }else{
          return "", err
      }
  }
 func GetHeaders(params... string) string{
header := fmt.Sprintf("path: %s\n", params[0])
header += fmt.Sprintf("x-requestid: %s\n",params[1])//request id
header += fmt.Sprintf("x-timestamp: %s\n",GetTimestamp())// timestamp
header += fmt.Sprintf("content-type: %s\n","application/json; charset=utf-8")////content type
return header
}

And received below response from service:

  connecting to wss://speech.platform.bing.com/speech/recognition/interactive/cognitiveservices/v1? format=simple&language=en-US&Ocp-Apim-Subscription-Key=e140575af9064bd8a2e5e47a0b5e829a&X- ConnectionId=9AD09FD5DD244BBCBCA2B8DC8AB91A9B
  read: websocket: close 1007 (invalid payload data): Incorrect message format. Text message contains no header separator

Please help me on the same or suggest me any implementation on Golang. I am stuck here unable to proceed.

Regards, Dinesh Gupta

DineshGuptaa commented 6 years ago

Hi All, Now I am able correct format so that can be accepted by speech.config

textMsg := msrecognize.GetHeaders("speech.config", "547578238432049", "application/json; charset=utf-8")
config, err := msrecognize.GetSpeechConfig()
textMsg = fmt.Sprintf("%s\n%s", textMsg, config)
 -->s := strings.Replace(textMsg, "\n", "\r\n", -1)
err = c.WriteMessage(websocket.TextMessage, []byte(s))

Now I am have different issue. As I am sending the text message, same way I tried to send binary data

textMsg1 := msrecognize.GetHeaders("audio", "547578238432049", "audio/x-wav")
_, err1 := ioutil.ReadFile("C:/Users/dinesh/Desktop/Test.wav")
textMsg = fmt.Sprintf("%s\n%s", textMsg1, string("RIFF,"))
ss := strings.Replace(textMsg, "\n", "\r\n", -1)\
err1 = c.WriteMessage(websocket.BinaryMessage, []byte(ss))

I am getting below repsonse from service:

websocket: close 1007 (invalid payload data): Incorrect message format. Binary message has invalid header size

Please help me to send send the binary data to speech websocket

Regards, Dinesh Gupta