空港经济区内的建设工程网站,广西网站推广优化,汽车门户网站管理系统的详细设计与实现,济南seo整站外包需求描述#xff1a;
需要将wav音频文件以二进制的形式读出#xff0c;存放到 json 中#xff0c;发送post请求到服务#xff0c;服务解析json#xff0c;得到二进制内容后放进ASR模型得出转录结果。
记一次坑#xff1a;
# 将wav以二进制形式读出存放到json中
f ope…需求描述
需要将wav音频文件以二进制的形式读出存放到 json 中发送post请求到服务服务解析json得到二进制内容后放进ASR模型得出转录结果。
记一次坑
# 将wav以二进制形式读出存放到json中
f open(zh_test_16k.wav,rb)
content f.read()
request_dict[audio] str(content)
with open(request.json, w) as file:file.write(json.dumps(request_dict))
f.close()通过 curl管道传输request.json中的内容 (网上的命令杂七杂八,记录正确命令为 -X -d参数房放前面,url放后面,且url用引号) curl -X POST -d request64.json --header “Content-Type:application/json” ‘localhost:7000/foundry_module/executor?executorapi_executormoduleasr_uni’ # 从服务端得到数据
datas self.rfile.read(int(self.headers[content-length]))
datas json.loads(datas)
wav_content datas[audio].encode()encode():str转为bytes decode():bytes转为str
wav_content # type(wav_content) bytes
f open(zh_test_16k.wav,rb)
content f.read()
# type(content) bytes
if(wav_contentcontent):print(相等)始终不能输出相等,此时已经快调疯了
解决办法
先将二进制内容通过base64编码
# import foundry;
import base64;
import hashlib;
import jsonencoded base64.b64encode(open(zh_test_16k.wav, rb).read());
#decoded base64.b64decode(encoded)
request_dict {}
f open(zh_test_16k.wav,rb)
sound_wav_rb f.read()
request_dict[audio] str(encoded)
request_dict[audio_format] 0
request_dict[sample_rate] 0
request_dict[lang] 0
with open(request64.json, w) as file:file.write(json.dumps(request_dict))
f.close()传输request64.json文件内容 curl -X POST -d request64.json --header “Content-Type:application/json” ‘localhost:7000/foundry_module/executor?executorapi_executormoduleasr_uni’ 字符串截取base64编码不包含’b’ 和引号的内容,再解码,最后放入模型
datas self.rfile.read(int(self.headers[content-length]))
datas json.loads(datas)
wav_content datas[audio][2:-1]
wav_content base64.b64decode(wav_content)踩坑原因
json存在编译格式的问题会导致原二进制文件内容多加 ”/“因此不与原wav文件的二进制内容一致
下次不要直接以二进制读的方式,将内容存到json中了!