asr语音转写_python 腾讯/百度/讯飞 ASR 语音转文字
因为项目中有需要把微信里的语音转成文本处理, 本次只说语音转文本。
需要注意的是平台对语音的格式有要求, 所以我们需要对语音进行转换格式。
语音转换
使用的工具是ffmpeg, ffmpeg的安装和配置请自行百度。
import os
import tempfile
import subprocess
import base64
import logging
logger = logging.getLogger(__name__)
def mp3_2_wav(_path = None, _byte = None):
''' MP3转WAV
_path和_byte必须存在一个, 优先级_path > _byte
:param _path:
:param _byte:
:return: wav的字节流
'''
try:
if _path is None and _byte is None: return
temp = None
if _path is None: # 字节流存入临时文件
temp = tempfile.NamedTemporaryFile(mode="w+b", delete=False)
temp.write(_byte)
temp.seek(0)
_path = temp.name
if _path is None: return
# 根据要求进行格式转换,-t 60 最大保存60秒, 采样率 16K, 默认单声道
logger.info('mp3 ==> wav ========================')
target_file = tempfile.NamedTemporaryFile(mode="w+b", delete=False, suffix='.wav')
_perfix = r'ffmpeg'
command = [_perfix, '-y', '-t', '60', '-i', _path, '-ar', '16K', target_file.name]
return_code = subprocess.call(command)
logger.info('mp3 ==> wav ==={}====================='.format(return_code))
if return_code == 0:
target_file.seek(0)
_byte = target_file.read()
target_file.close()
os.remove(target_file.name)
if temp is not None:
temp.close()
os.remove(temp.name)
return _byte
except Exception as e:
logger.error('mp3_2_wav error [{}]'.format(e))
百度AI开放平台 API
百度的比较方便,有百度封装好的SDK使用和安装都很方便, 上面API里有详细介绍。
def BAIDU_ASR(_path):
''' 百度语音转文字
:param _path:
:return:
'''
from aip import AipSpeech
""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
result = client.asr(mp3_2_wav(_path), 'pcm', 16000, {
'dev_pid': '1537',
})
return result.get('result')[0]
讯飞开放平台API
需要把请求的IP在讯飞控制台加入白名单, 否则报错:
{"code":"10105","data":"","desc":"illegal access|illegal client_ip: xxx.xxx.xxx.xxx","sid":"....."}
把报错信息里的xxx.xxx.xxx.xxx加入白名单即可
import json
import time
import requests
def XUNFEI_ASR(_path):
''' 讯飞语音转文字
:param _path:
:return:
'''
_byte = mp3_2_wav(_path)
base64_audio = base64.b64encode(_byte)
import urllib.parse
body = urllib.parse.urlencode({'audio': base64_audio})
url = 'http://api.xfyun.cn/v1/service/v1/iat'
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
param = {"engine_type": "sms16k", "aue": "raw"}
import hashlib
x_param = base64.b64encode(json.dumps(param).replace(' ', '').encode('utf-8'))
x_time = int(int(round(time.time() * 1000)) / 1000)
_str = API_KEY + str(x_time) + x_param.decode('utf-8')
x_checksum = hashlib.md5(_str.encode('utf-8')).hexdigest()
x_header = {'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',
'X-Appid': APP_ID,
'X-CurTime': str(x_time),
'X-Param': x_param,
'X-CheckSum': x_checksum}
res = requests.post(url, body, headers = x_header)
res = res.content.decode('utf-8')
return res
腾讯AI开放平台API
腾讯平台主要是签名算法需要注意
签名算法
def get_sign_code(params, app_key):
''' 生成签名CODE
1. 计算步骤
用于计算签名的参数在不同接口之间会有差异,但算法过程固定如下4个步骤。
将请求参数对按key进行字典升序排序,得到有序的参数对列表N
将列表N中的参数对按URL键值对的格式拼接成字符串,得到字符串T(如:key1=value1&key2=value2),URL键值拼接过程value部分需要URL编码,URL编码算法用大写字母,例如%E8,而不是小写%e8
将应用密钥以app_key为键名,组成URL键值拼接到字符串T末尾,得到字符串S(如:key1=value1&key2=value2&app_key=密钥)
对字符串S进行MD5运算,将得到的MD5值所有字符转换成大写,得到接口请求签名
2. 注意事项
不同接口要求的参数对不一样,计算签名使用的参数对也不一样
参数名区分大小写,参数值为空不参与签名
URL键值拼接过程value部分需要URL编码
签名有效期5分钟,需要请求接口时刻实时计算签名信息
:param params: 参数字典
:param app_key:
:return:
'''
if params is None or type(params) != dict or len(params) == 0: return
try:
params = sorted(params.items(), key=lambda x:x[0])
_str = ''
for item in params:
key = item[0]
value = item[1]
if value == '': continue
_str += urllib.parse.urlencode({key: value}) + '&'
_str += 'app_key=' + app_key
_str = hashlib.md5(_str.encode('utf-8')).hexdigest()
return _str.upper()
except Exception as e:
logger.error('tencen get_sign_code error [{}]'.format(e))
ASR
def TencenASR(_path):
''' 腾讯语音转文字
:param _path:
:return:
'''
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
_byte = mp3_2_wav(_path)
base64_audio = base64.b64encode(_byte)
url = 'https://api.ai.qq.com/fcgi-bin/aai/aai_asr'
params = {'app_id': APP_ID, 'time_stamp':int(time.time()), 'nonce_str': 'fa577ce340859f9fe', 'format': 2, 'speech': base64_audio, 'rate': 16000}
sign = get_sign_code(params, API_KEY)
params['sign'] = sign
rt = requests.post(url, data=params)
jsonData = json.loads(rt.text)
if jsonData.get('ret') == 0:
rt = jsonData.get('data').get('text')
logger.info('Tencen ==> wav ===> {}'.format(rt))
return rt
至此关键代码开发完成。 比较效果使用。
asr语音转写_python 腾讯/百度/讯飞 ASR 语音转文字相关推荐
- python语音播报天气预报_python让生活更有趣--来个语音天气助手吧
须知说明 天气来源 DT阿凡达数据,需要api_key 腾讯天气,无需key 语音来源 百度Ai开放平台(需要申请key,在线合成mp3文件,文本长度有限制,但声音好听) pyttsx3语音库(不用在 ...
- 科大讯飞/百度/阿里/腾讯(BAT)智能语音识别(ASR)性能对比选择预计价格分享 - pytorch中文网...
最近在做智能客服的时候需要使用到语音识别,所以了解和对比了各家平台的语音识别对比和分析! 一.科大讯飞 1.语音听写即在线音识别查看Demo 把语音(≤60秒)转换成对应的文字信息,让机器能够&quo ...
- 科大讯飞/百度/阿里/腾讯(BAT)智能语音识别(ASR)性能对比选择预计价格分享
最近在做智能客服的时候需要使用到语音识别,所以了解和对比了各家平台的语音识别对比和分析! 一.科大讯飞 1.语音听写即在线音识别查看Demo 把语音(≤60秒)转换成对应的文字信息,让机器能够&quo ...
- Unity 讯飞实时语音转写(二)—— 接收转写结果
目录 Unity 讯飞实时语音转写(一)-- 使用WebSocket连接讯飞语音服务器 Unity 讯飞实时语音转写(二)-- 接收转写结果 Unity 讯飞实时语音转写(三)-- 分析转写结果 正文 ...
- 讯飞实时语音转写 python3.6.1 可完美运行 解析返回的json字符串 输出所获语音文字
百度语音识别对录音要求较高(可能是我的问题,sdk和在线api都试过了(滑稽保命)),失败后选择讯飞语音,官方提供的文档是python2版本的 ,经过修改后可在python3中运行 ,解析返回的jso ...
- 讯飞智能语音鼠标G50:AI语音、转写翻译、记录截图一键搞定!
随着互联网的发展,智能鼠标已经成为我们生活和工作中不可或缺的组成部分.然而,鼠标滚轮异响.按键失灵.驱动难用.手感不合适等一系列问题仍时有发生,所以选择一款智能鼠标尤为重要,它不仅可以提高我们的工作效 ...
- python分割语音端点检测_python的webrtc库如何实现语音端点检测 科大讯飞输入法PC体验版下载:语音+手写+...
python的webrtc库如何实现语音端点检测 科大讯飞输入法PC体验版下载:语音+手写+ 2018-03-05 出处:网络 整理:zhishizhan.net 延伸:科大讯飞输入法PC体验版下载: ...
- AI赋能日常生活:讯飞语音转写在会议、采编、上课等场景中的应用
人工智能在日常生活中的应用已经非常广泛了.除了ChatGPT这种对话生成式AI,语音转文字技术也可以在很多场景中派上用场.比如,奔波于各种会议之间的打工人.经常采访的媒体从业者以及要上网课的学生们,每 ...
- asr语音转写_语音识别(ASR)--语音转文字
语音识别(Automatic Speech Recognition)是以语音为研究对象,通过语音信号处理和模式识别让机器自动识别和理解人类口述的语.语音识别技术就是让机器通过识别和理解过程把语音信号转 ...
最新文章
- 【Linux】备份与压缩命令命令
- openresty url重写
- 关于如何开办餐饮店?
- 微服务架构Spring Cloud和Dubbo 还有EDAS
- generate random or regular test data in R
- 限制鼠标在窗体中的移动
- 数据库元数据数据字典查询_9_列出给定表的所有约束
- Spring boo系列--jpa和thymeleaf
- .NET Core 集成JWT认证
- python程序化 k线指定时间更新_Python之路 14 K线时间序列管理器
- 今晚直播丨国产数据库入门:openGauss数据库的基本管理和SQL语句入门
- vue - rimraf
- Code4Fun: 通过XML模板系统实现对象的灵活序列化
- 远程桌面无法启动Matlab的解决方案
- 如何深入浅出地讲解麦克斯韦方程组
- Microsoft SQL Server 2005安装
- webtrends 分析
- matlab中除法的错误使用
- SpaceSniffer(磁盘大小扫描分析) 彻底解决C盘爆满问题 清理C盘必备软件
- 英语口语html5源码,5篇英语经典美文赏析,可以当口语练习素材哦