使用 httr 将 curl 命令转换为 R(特别是“--data-binary @”)
Translating a curl command to R using httr (specifically '--data-binary @')
我正在尝试使用 bing 语音转文本将一些声音文件转录为文本。
以下命令在命令行中有效(在 Windows 10 上使用 git bash):
curl -v -X POST "https://speech.platform.bing.com/speech/recognition/interactive/
cognitiveservices/v1?language=<LANG>&format=detailed" -H "Transfer-Encoding:
chunked" -H "Ocp-Apim-Subscription-Key: <MY KEY>" -H "Content-type:
audio/wav; codec=audio/pcm; samplerate=16000" --data-binary @<MY .WAV-FILE>
我已经试过了,但没用:
httr::POST(url = myURL,
add_headers("Ocp-Apim-Subscription-Key" = key,
"Content-type" = "audio/wav; codec=audio/pcm; samplerate=16000",
"Transfer-Encoding" = "chunked"),
body = (list("file" = upload_file("PATH_TO_FILE.wav"))),
verbose())
它returns这个输出:
回应
[https://speech.platform.bing.com/speech/recognition/dictation/
cognitiveservices/v1?language=<LANG>&format=detailed]
Date: 2017-11-29 13:29
Status: 200
Content-Type: text/plain
Size: 75 B
我认为该请求与 .wav 文件的解释有关,我需要以某种方式将“--data-binary”标签添加到 httr-request。我可以看到我的 "content-type" 是纯文本,尽管我已经指定了。此外:API 文档指定我需要在我的 wav 文件前加上一个 at 符号。
如有任何帮助,我们将不胜感激。
干杯。
编辑:Link 到 API 文档
https://docs.microsoft.com/da-dk/azure/cognitive-services/speech/getstarted/getstartedrest?tabs=curl#tabpanel_AFC9x30-dR_curl
我明白了。
关键是在正文中设置正确的 MIME 类型。不设置此 MIME 类型可能会导致接收端的错误解释,即使我们收到 200 返回的响应也是如此。
body <- list(file = httr::upload_file(
paste0(path, "/", f),
type = "audio/wav; codec=audio/pcm; samplerate=16000"))
其中 paste0(path, "/", f)
是音频文件的路径。
myURL <- sprintf('https://speech.platform.bing.com/speech/recognition/%s/cognitiveservices/v1?language=%s&format=%s',
"dictation",
"da-DK",
"detailed")
rs <- httr::POST(
url = myURL,
httr::add_headers(.headers = c("Ocp-Apim-Subscription-Key" = key)),
httr::add_headers(.headers = c("Transfer-Encoding" = "chunked")),
body = body)
我正在尝试使用 bing 语音转文本将一些声音文件转录为文本。
以下命令在命令行中有效(在 Windows 10 上使用 git bash):
curl -v -X POST "https://speech.platform.bing.com/speech/recognition/interactive/
cognitiveservices/v1?language=<LANG>&format=detailed" -H "Transfer-Encoding:
chunked" -H "Ocp-Apim-Subscription-Key: <MY KEY>" -H "Content-type:
audio/wav; codec=audio/pcm; samplerate=16000" --data-binary @<MY .WAV-FILE>
我已经试过了,但没用:
httr::POST(url = myURL,
add_headers("Ocp-Apim-Subscription-Key" = key,
"Content-type" = "audio/wav; codec=audio/pcm; samplerate=16000",
"Transfer-Encoding" = "chunked"),
body = (list("file" = upload_file("PATH_TO_FILE.wav"))),
verbose())
它returns这个输出: 回应
[https://speech.platform.bing.com/speech/recognition/dictation/
cognitiveservices/v1?language=<LANG>&format=detailed]
Date: 2017-11-29 13:29
Status: 200
Content-Type: text/plain
Size: 75 B
我认为该请求与 .wav 文件的解释有关,我需要以某种方式将“--data-binary”标签添加到 httr-request。我可以看到我的 "content-type" 是纯文本,尽管我已经指定了。此外:API 文档指定我需要在我的 wav 文件前加上一个 at 符号。
如有任何帮助,我们将不胜感激。
干杯。
编辑:Link 到 API 文档 https://docs.microsoft.com/da-dk/azure/cognitive-services/speech/getstarted/getstartedrest?tabs=curl#tabpanel_AFC9x30-dR_curl
我明白了。
关键是在正文中设置正确的 MIME 类型。不设置此 MIME 类型可能会导致接收端的错误解释,即使我们收到 200 返回的响应也是如此。
body <- list(file = httr::upload_file(
paste0(path, "/", f),
type = "audio/wav; codec=audio/pcm; samplerate=16000"))
其中 paste0(path, "/", f)
是音频文件的路径。
myURL <- sprintf('https://speech.platform.bing.com/speech/recognition/%s/cognitiveservices/v1?language=%s&format=%s',
"dictation",
"da-DK",
"detailed")
rs <- httr::POST(
url = myURL,
httr::add_headers(.headers = c("Ocp-Apim-Subscription-Key" = key)),
httr::add_headers(.headers = c("Transfer-Encoding" = "chunked")),
body = body)