- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在尝试使用来自 Go 1.11 的 Amazon 新的流式转录 API。目前亚马逊只提供Java SDK,所以我正在尝试低级方式。
唯一相关的文档是 here但它没有显示端点。我在 Java example 中找到了它它是https://transcribestreaming.<region>.amazonaws.com
我正在尝试爱尔兰地区,即 https://transcribestreaming.eu-west-1.amazonaws.com
.这是我打开 HTTP/2 双向流的代码:
import (
"crypto/tls"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/aws/external"
"github.com/aws/aws-sdk-go-v2/aws/signer/v4"
"golang.org/x/net/http2"
"io"
"io/ioutil"
"log"
"net/http"
"os"
"time"
)
const (
HeaderKeyLanguageCode = "x-amzn-transcribe-language-code" // en-US
HeaderKeyMediaEncoding = "x-amzn-transcribe-media-encoding" // pcm only
HeaderKeySampleRate = "x-amzn-transcribe-sample-rate" // 8000, 16000 ... 48000
HeaderKeySessionId = "x-amzn-transcribe-session-id" // For retrying a session. Pattern: [a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}
HeaderKeyVocabularyName = "x-amzn-transcribe-vocabulary-name"
HeaderKeyRequestId = "x-amzn-request-id"
)
...
region := "eu-west-1"
cfg, err := external.LoadDefaultAWSConfig(aws.Config{
Region: region,
})
if err != nil {
log.Printf("could not load default AWS config: %v", err)
return
}
signer := v4.NewSigner(cfg.Credentials)
transport := &http2.Transport{
TLSClientConfig: &tls.Config{
// allow insecure just for debugging
InsecureSkipVerify: true,
},
}
client := &http.Client{
Transport: transport,
}
signTime := time.Now()
header := http.Header{}
header.Set(HeaderKeyLanguageCode, "en-US")
header.Set(HeaderKeyMediaEncoding, "pcm")
header.Set(HeaderKeySampleRate, "16000")
header.Set("Content-type", "application/json")
// Bi-directional streaming via a pipe.
pr, pw := io.Pipe()
req, err := http.NewRequest(http.MethodPost, "https://transcribestreaming.eu-west-1.amazonaws.com/stream-transcription", ioutil.NopCloser(pr))
if err != nil {
log.Printf("err: %+v", err)
return
}
req.Header = header
_, err = signer.Sign(req, nil, "transcribe", region, signTime)
if err != nil {
log.Printf("problem signing headers: %+v", err)
return
}
// This freezes and ends after 5 minutes with "unexpected EOF".
res, err := client.Do(req)
...
问题是执行请求 (client.Do(req)
) 会卡住五分钟,然后以“意外 EOF”错误结束。
任何想法我做错了什么?有人在没有 Java SDK 的情况下成功使用了新的流式转录 API 吗?
编辑(2019 年 3 月 11 日):
我再次测试了它,现在它不会超时,而是立即返回 200 OK
回复。但是响应正文中有一个“异常”:{"Output":{"__type":"com.amazon.coral.service#SerializationException"},"Version":"1.0"}
我尝试使用 io.Pipe
打开 HTTP2 流(如上面的代码)以及文档中描述的 JSON 正文:
{
"AudioStream": {
"AudioEvent": {
"AudioChunk": ""
}
}
}
结果是一样的。
编辑(2019 年 3 月 13 日):
正如@gpeng 所述,删除content-type
from headers 将修复 SerializationException
.但是有一个IAM异常,需要添加transcription:StartStreamTranscription
您的 IAM 用户的权限。虽然这在 AWS IAM 控制台中无处可寻,但必须手动添加为自定义 JSON 权限:/
还有一个新的/另一个文档文档 here显示不正确的 host
和一个新的content-type
(不要使用 content-type
,请求将返回 404)。
删除 content-type
后,并添加新权限,现在我得到一个异常 {"Message":"A complete signal was sent without the preceding empty frame."}
.也永远写入管道 block ,所以我又被卡住了。新文档中描述的消息与旧文档中的消息不同,现在终于二进制了,但我不明白它们。任何想法如何在 Go 中发送此类 HTTP2 消息?
编辑(2019 年第 15 场比赛):*
如果您收到关于签名不匹配的 HTTP 403 错误,请不要设置 transfer-encoding
和 x-amz-content-sha256
HTTP header 。当我设置它们时,使用 AWS SDK 的 V4 签名者对请求进行签名,然后我收到 HTTP 403 The request signature we calculated does not match the signature you provided.
最佳答案
我联系了 AWS 支持,他们现在建议尽可能使用 websockets 而不是 HTTP/2(博文 here)
如果这适合您的用例,我强烈建议您查看新的示例存储库:https://github.com/aws-samples/amazon-transcribe-websocket-static它显示了 JS 中基于浏览器的解决方案。
我还注意到演示的作者在他的个人 Github 上有一个明确的示例:https://github.com/brandonmwest/amazon-transcribe-websocket-express但我还没有确认这是否有效。
感谢这些示例不在 Python 中,但我认为使用 Websocket 客户端而不是 HTTP/2 会更好(说实话,这仍然有点可怕:P)
关于amazon-web-services - 无 SDK 的 Amazon Transcribe Streaming API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53743785/
我有 wav 格式的 6 秒录音 (ar-01.wav)。我想使用亚马逊服务将音频文件转录为文本。为此,我创建了一个名为 test-voip 的存储桶,并将音频文件上传到存储桶。当我尝试将语音转换为文
我目前有代码: public class ProviderTranscribeController { private AmazonTranscribe client = Amazon
我从亚马逊流媒体 API 收到此响应。谁能帮我解决我在这里做错了什么。 b'\x00\x00\x00\xa3\x00\x00\x00ah\x10k\xe1\x0f:异常类型\x07\x00\x13Ba
嗨,我是AWS的新手。我的应用程序是使用AWS transcribe录制音频并将语音转换为文本。 因此,我正在从Web浏览器录制音频,然后将其保存到AWS S3。稍后,当我尝试在该音频文件上使用AWS
我想使用 AWS Transcribe API 将用户的实时语音转换为文本。出于某种原因,没有关于如何在 android 中完成的适当文档。 这是以低效方式执行此操作的链接 Speech to tex
我是否需要删除使用 Amazon Transcribe 服务创建的一些转录作业? 我第一次使用 amazon transcribe 从视频中获取文本,它工作正常,但我没有找到任何如何删除特定转录作业的
我是 AWS 服务的新手,我们想要构建一个简单的演示来检测一个特殊的词,并且:[1] 触发一个 Action [2] 响应(作为通话期间的语音)。 例如,如果用户说:“帮助”,我想回复“确定”并进行操
我使用无服务器 Lambda 服务通过 Amazon Transcribe 将语音转录为文本。我当前的脚本能够从 S3 转录文件并将结果作为 JSON 文件存储在 S3 中。 是否有可能直接获取结果,
我使用无服务器 Lambda 服务通过 Amazon Transcribe 将语音转录为文本。我当前的脚本能够从 S3 转录文件并将结果作为 JSON 文件存储在 S3 中。 是否有可能直接获取结果,
当 AWS Transcribe 仍在进行流式传输时,isPartial 标志将设置为 True。我想在 isPartial 标志设置为 False 后停止流传输,该怎么做? 有人做过吗? https
我已将 AWS Java SDK 集成到我的应用程序中。不幸的是,我收到“内部故障。请重试您的请求”作为响应。 这就是我实现它的方式。 使用 Maven,在 pom.xml 中添加此内容
我正在尝试使用 aws-sdk-ios 在 iOS 应用程序中使用 AWS Transcribe。该应用程序启动转录作业,我可以在 AWS 控制台上看到该作业。但应用程序无法列出作业或获取特定作业,因
我无法在 AWS .NET SDK 中找到任何关于转录流服务(从语音到文本)的引用。 它在 .NET SDK Amazon Transcribe Streaming Service 中可用吗?任何引用
尝试找到一个包来转换来自 Amazon AWS Transcribe 服务的 json 响应,但没有成功。 您可以看到an example of the JSON in the JavaScript
我正在尝试使用 AWS Java 开发工具包开发一个使用 Amazon Transcribe 服务的 ColdFusion 应用程序。不幸的是,我对 Java 的了解很少(更不用说 SDK 本身了),
我正在使用 IBM Watson speech to text iOS SDK 来转录实时音频。我已经通过 cocoa pod 安装了它。我在将音频转录为文本时遇到问题(身份验证)。 安装的STT S
我正在尝试使用来自 Go 1.11 的 Amazon 新的流式转录 API。目前亚马逊只提供Java SDK,所以我正在尝试低级方式。 唯一相关的文档是 here但它没有显示端点。我在 Java ex
我正在尝试确定 AWS Lex 是否使用 AWS Transcribe 进行提示确认。例如,Lex 询问“你的电话号码是什么?”,用户回答“1-2-3-4”。 Lex 然后问道:“你是说 1-2-3-
我正在尝试确定 AWS Lex 是否使用 AWS Transcribe 进行提示确认。例如,Lex 询问“你的电话号码是什么?”,用户回答“1-2-3-4”。 Lex 然后问道:“你是说 1-2-3-
我正在尝试将 Amazon Transcribe Streaming Service 与来自 Node.js 的 http2 请求一起使用,这是我正在关注的文档链接 Streaming request
我是一名优秀的程序员,十分优秀!