因为项目中有需要把微信里的语音转成文本处理, 本次只说语音转文本。

需要注意的是平台对语音的格式有要求, 所以我们需要对语音进行转换格式。

语音转换

使用的工具是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 语音转文字相关推荐

  1. python语音播报天气预报_python让生活更有趣--来个语音天气助手吧

    须知说明 天气来源 DT阿凡达数据,需要api_key 腾讯天气,无需key 语音来源 百度Ai开放平台(需要申请key,在线合成mp3文件,文本长度有限制,但声音好听) pyttsx3语音库(不用在 ...

  2. 科大讯飞/百度/阿里/腾讯(BAT)智能语音识别(ASR)性能对比选择预计价格分享 - pytorch中文网...

    最近在做智能客服的时候需要使用到语音识别,所以了解和对比了各家平台的语音识别对比和分析! 一.科大讯飞 1.语音听写即在线音识别查看Demo 把语音(≤60秒)转换成对应的文字信息,让机器能够&quo ...

  3. 科大讯飞/百度/阿里/腾讯(BAT)智能语音识别(ASR)性能对比选择预计价格分享

    最近在做智能客服的时候需要使用到语音识别,所以了解和对比了各家平台的语音识别对比和分析! 一.科大讯飞 1.语音听写即在线音识别查看Demo 把语音(≤60秒)转换成对应的文字信息,让机器能够&quo ...

  4. Unity 讯飞实时语音转写(二)—— 接收转写结果

    目录 Unity 讯飞实时语音转写(一)-- 使用WebSocket连接讯飞语音服务器 Unity 讯飞实时语音转写(二)-- 接收转写结果 Unity 讯飞实时语音转写(三)-- 分析转写结果 正文 ...

  5. 讯飞实时语音转写 python3.6.1 可完美运行 解析返回的json字符串 输出所获语音文字

    百度语音识别对录音要求较高(可能是我的问题,sdk和在线api都试过了(滑稽保命)),失败后选择讯飞语音,官方提供的文档是python2版本的 ,经过修改后可在python3中运行 ,解析返回的jso ...

  6. 讯飞智能语音鼠标G50:AI语音、转写翻译、记录截图一键搞定!

    随着互联网的发展,智能鼠标已经成为我们生活和工作中不可或缺的组成部分.然而,鼠标滚轮异响.按键失灵.驱动难用.手感不合适等一系列问题仍时有发生,所以选择一款智能鼠标尤为重要,它不仅可以提高我们的工作效 ...

  7. python分割语音端点检测_python的webrtc库如何实现语音端点检测 科大讯飞输入法PC体验版下载:语音+手写+...

    python的webrtc库如何实现语音端点检测 科大讯飞输入法PC体验版下载:语音+手写+ 2018-03-05 出处:网络 整理:zhishizhan.net 延伸:科大讯飞输入法PC体验版下载: ...

  8. AI赋能日常生活:讯飞语音转写在会议、采编、上课等场景中的应用

    人工智能在日常生活中的应用已经非常广泛了.除了ChatGPT这种对话生成式AI,语音转文字技术也可以在很多场景中派上用场.比如,奔波于各种会议之间的打工人.经常采访的媒体从业者以及要上网课的学生们,每 ...

  9. asr语音转写_语音识别(ASR)--语音转文字

    语音识别(Automatic Speech Recognition)是以语音为研究对象,通过语音信号处理和模式识别让机器自动识别和理解人类口述的语.语音识别技术就是让机器通过识别和理解过程把语音信号转 ...

最新文章

  1. 【Linux】备份与压缩命令命令
  2. openresty url重写
  3. 关于如何开办餐饮店?
  4. 微服务架构Spring Cloud和Dubbo 还有EDAS
  5. generate random or regular test data in R
  6. 限制鼠标在窗体中的移动
  7. 数据库元数据数据字典查询_9_列出给定表的所有约束
  8. Spring boo系列--jpa和thymeleaf
  9. .NET Core 集成JWT认证
  10. python程序化 k线指定时间更新_Python之路 14 K线时间序列管理器
  11. 今晚直播丨国产数据库入门:openGauss数据库的基本管理和SQL语句入门
  12. vue - rimraf
  13. Code4Fun: 通过XML模板系统实现对象的灵活序列化
  14. 远程桌面无法启动Matlab的解决方案
  15. 如何深入浅出地讲解麦克斯韦方程组
  16. Microsoft SQL Server 2005安装
  17. webtrends 分析
  18. matlab中除法的错误使用
  19. SpaceSniffer(磁盘大小扫描分析) 彻底解决C盘爆满问题 清理C盘必备软件
  20. 英语口语html5源码,5篇英语经典美文赏析,可以当口语练习素材哦

热门文章

  1. sql修改日期不改变时间
  2. 超级计算机算宇宙,宇宙就是一台超级计算机
  3. 【PS】60款天空背景叠层纹理素材
  4. java模块化架构启动,邮储银行Java笔试
  5. 图像高频信号低频信号
  6. 沈阳地区十大市场调查研究咨询公司排名
  7. 幕布使用教程原自B站
  8. asp.net831社区医院网站门诊挂号系统
  9. UPC--6360: 词韵【字典树树上DP】
  10. delphi中的单元