Google 使用 base64 的语音 bash 脚本: 意外的标记。\n
Google Speech bash script with base64 : Unexpected token.\n
我使用以下代码:https://github.com/sararob/ml-talk-demos/blob/master/speech/request.sh
适合我自己的 bash 脚本。
cat <<EOF > $JSONFILENAME
{
"config": {
"encoding":"LINEAR16",
"sampleRateHertz":8000,
"languageCode": "nl-NL",
"speechContexts": {
"phrases": ['']
},
"maxAlternatives": 1
},
"audio": {
"content":
}
}
EOF
base64 -w 0 > $SOUNDFILE.base64
#MYBASE64=$(base64 -w 0)
sed -i $JSONFILENAME -e "/\"content\":/r $SOUNDFILE.base64"
#sed -i $JSONFILENAME -e "/\"content\":/r $MYBASE64"
curl -s -X POST -H "Content-Type: application/json" --data-binary @${JSONFILENAME} https://speech.googleapis.com/v1/speech:recognize?key=$API_KEY
base64 输出由 sed 命令正确填写,但也添加了换行符。
这是 Google API 响应:
{
"error": {
"code": 400,
"message": "Invalid JSON payload received. Unexpected token.\n\": {\n \"content\":\nUklGRqTIAgBXQVZFZm10\n ^",
"status": "INVALID_ARGUMENT"
}
}
如何确保我的 JSON-object 中的 "content" 是连续的 base64 字符串?
您应该避免使用 sed
更新 JSON 数据。
如果您有有效的 JSON 数据(即您必须修复行 "phrases": []
和 "content": ""
,您可以使用 jq
代替:
jq ".audio.content = \"$(base64 -w 0 "")\"" "$JSONFILENAME"
我不推荐sed
,但在这种情况下必须附加一个大的条目,你可以试试这个:
echo \"$(base64 -w 0 "")\" > "$SOUNDFILE.base64"
sed -i "$JSONFILENAME" -e "/\"content\":/r $SOUNDFILE.base64"
您收到的 google 错误可能是由于该字符串未被双引号引起的。
我使用以下代码:https://github.com/sararob/ml-talk-demos/blob/master/speech/request.sh 适合我自己的 bash 脚本。
cat <<EOF > $JSONFILENAME
{
"config": {
"encoding":"LINEAR16",
"sampleRateHertz":8000,
"languageCode": "nl-NL",
"speechContexts": {
"phrases": ['']
},
"maxAlternatives": 1
},
"audio": {
"content":
}
}
EOF
base64 -w 0 > $SOUNDFILE.base64
#MYBASE64=$(base64 -w 0)
sed -i $JSONFILENAME -e "/\"content\":/r $SOUNDFILE.base64"
#sed -i $JSONFILENAME -e "/\"content\":/r $MYBASE64"
curl -s -X POST -H "Content-Type: application/json" --data-binary @${JSONFILENAME} https://speech.googleapis.com/v1/speech:recognize?key=$API_KEY
base64 输出由 sed 命令正确填写,但也添加了换行符。
这是 Google API 响应:
{
"error": {
"code": 400,
"message": "Invalid JSON payload received. Unexpected token.\n\": {\n \"content\":\nUklGRqTIAgBXQVZFZm10\n ^",
"status": "INVALID_ARGUMENT"
}
}
如何确保我的 JSON-object 中的 "content" 是连续的 base64 字符串?
您应该避免使用 sed
更新 JSON 数据。
如果您有有效的 JSON 数据(即您必须修复行 "phrases": []
和 "content": ""
,您可以使用 jq
代替:
jq ".audio.content = \"$(base64 -w 0 "")\"" "$JSONFILENAME"
我不推荐sed
,但在这种情况下必须附加一个大的条目,你可以试试这个:
echo \"$(base64 -w 0 "")\" > "$SOUNDFILE.base64"
sed -i "$JSONFILENAME" -e "/\"content\":/r $SOUNDFILE.base64"
您收到的 google 错误可能是由于该字符串未被双引号引起的。