为什么语音 REST API 响应与 go SDK API 响应不同?

通过 REST 调用 Speech-To-Text API 时,响应结构与使用 Golang SDK 调用时略有不同。


例如,我通过 golang SDK 提交了一个异步语音作业。然后在下面我显示了通过 2 种不同的方法查询谷歌云的转录作业结果的结果,REST 和 go SDK 的结果略有不同。


方法一:REST调用


GET https://speech.googleapis.com/v1/operations/{id}


{id} 是操作 id,例如 (2593790426826555555)


string结果 1,具有类型化属性的驼峰式属性startTime endTime。


"words": [

  {

    "startTime": "0s",

    "endTime": "0.400s",

    "word": "We",

    "confidence": 0.98762906

  },

...

方法二:去SDK


// omitting err handling,

client, err := speech.NewClient(ctx)

op, err := client.LROClient.GetOperation(ctx, &lropb.GetOperationRequest{Name: id})

resp := new(speechpb.LongRunningRecognizeResponse)

err = op.GetResponse().UnmarshalTo(resp)

js, err := json.Marshal(resp)

ioutil.WriteFile("sdk-response.json", js, 0644)

结果 2,snake_cased 对象类型为start_time/end_time


"words": [

{

  "start_time": {},

  "end_time": {

    "nanos": 400000000

  },

  "word": "We",

  "confidence": 0.98762906

},

...

如果您在 SDK 代码中查找类型信息,它会start_time用作 json 标记,所以我想这是预期的行为。或者我可能错误地解组了响应op.GetResponse().UnmarshalTo(resp)?任何帮助或建议表示赞赏。


StartTime *durationpb.Duration `protobuf:"bytes,1,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"`

使用 go 1.18.1 和cloud.google.com/go/speech v1.4.0


更新,详细说明问题的基本原理我有 2 套成绩单是通过不同的方法(存储桶与 SDK)下载的。一个是从 Google 云存储桶中提取的,这些存储桶由 Google 在桶中以 camcelCased 的形式保存(与 REST API 的格式相同)。我有另一组从 SDK API 中提取并使用 golang 中的 json 编码保留的转录本,它根据 SDK 的结构布局应用 snake_casing。


编写一些代码来纠正/规范化为单一格式并不是什么大不了的事情,但在我看来这有点不一致。提出问题以了解我是否做错了什么并且可以纠正或者是否可以预期。


Smart猫小萌
浏览 100回答 1
1回答

RISEBY

JSON 编组的 Golang(结构)是 protobufs(snake_case'd 字段和时间是google.protobuf.Timestamp)。您能否尝试使用 Golang protobufprotojson包而不是 encoding/json,因为这应该双射映射 JSON 和 Golang protobuf 结构。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go