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

标签 go google-cloud-platform google-cloud-speech

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

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

方法 1:REST 调用

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

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

结果 1,具有 string 类型的 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,start_time/end_time的snake_cased对象类型

"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。

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

最佳答案

JSON 编码的 Golang(结构)是 protobuf(snake_case'd 字段,时间为 google.protobuf.Timestamp )。

你能尝试使用Golang protobuf protojson package 而不是encoding/json,因为这应该双射映射 JSON 和 Golang protobuf 结构。

关于go - 为什么语音 REST API 响应与 go SDK API 响应不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72625170/

相关文章:

go - 将方法参数传递给函数

google-app-engine - 为什么我的谷歌应用引擎有域名 'my-project.df.r.appspot.com' ?

python - 通过命令行将 GCP 凭据添加到 Airflow

go - 在 Go 中创建具有约束的自定义类型

go - 所有的 goroutines 都睡着了——死锁! - - - - 错误

google-app-engine - 尽管 readiness_check 返回 200 状态响应,但 Google App Engine 应用程序部署失败

java - Android v1p1beta1 语音 - java.lang.NoSuchMethodError : No static method decodeBase64

speech-recognition - 谷歌云语音 : Distinguish Voices?

logging - 去哪里记录错误