当前位置: 首页 > news >正文

踩大坑:json格式存储wav二进制内容

需求描述:

需要将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?executor=api_executor&module=asr_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_content==content):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?executor=api_executor&module=asr_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中了!

http://www.lryc.cn/news/13834.html

相关文章:

  • 加入CSDN的一年,我收获了这些……
  • 【Python学习笔记】44.Python3 MongoDB和urllib
  • LVS中的keepalived高可用
  • 【Vue3】组件数据懒加载
  • 基于 SmartX 分布式存储的 iSCSI 与两种 NVMe-oF 技术与性能对比
  • Anaconda 安装 Pytorch
  • 从零开始使用MMSegmentation训练Segformer
  • 会利用信息差赚钱的人才是聪明人
  • 【机器学习】Adaboost
  • 深度学习神经网络基础知识(二)权重衰减、暂退法(Dropout)
  • [面试直通版]网络协议面试核心之HTTP,HTTPS,DNS-DNS安全
  • 【OJ】A+B=X
  • Python实现性能自动化测试,还可以如此简单
  • Leetcode力扣秋招刷题路-0080
  • Java实现JDBC工具类DbUtils的抽取及程序实现数据库的增删改操作
  • 【docker】拉取镜像环境报错解决#ERROR: Get https://registry-1.docker.io/v2/
  • java中NumberFormat 、DecimalFormat的介绍及使用,java数字格式化,BigDecimal数字格式化
  • 2023什么是分销商城系统?营销,核心功能
  • 天翼数字生活C++客户端实习
  • Java 接口
  • 【React】react-router 路由详解
  • DaVinci 偏好设置:系统 - 内存和 GPU
  • 视频知识点(22)- 教你认清楚YUV420P和YUV420SP的真正差异在哪里
  • 企业电子招标采购系统源码Spring Cloud + Spring Boot + MybatisPlus + Redis + Layui
  • 面试常问-Alpha测试和Beta测试
  • html理论基础
  • 【安卓开发】数据存储全方案--详解持久化技术
  • Vue项目实战
  • Github 学生优惠包 -- 最新防踩坑指南
  • 2023年美国大学生数学建模A题:受干旱影响的植物群落建模详解+模型代码(二)