zoukankan      html  css  js  c++  java
  • 微信小程序语音识别

    语音识别现在已经发展的很成熟了,经过比对发现百度对开发者比较友好,提供很多种语言的SDK,对python来说直接安装 pip install baidu-aip 文档写的也不错  具体参考:http://ai.baidu.com/docs#/ASR-Online-Python-SDK/top

    也看了讯飞的语音,发现讯飞对开发者的支持不是太好,调用起来不方便

    其实最关键的是微信小程序的语音格式是silk,两家都不能识别silk,需要将silk格式转为wav或者pcm格式,音频格式的转换遇到了麻烦,搞了两天才算转换成功,测试发现将语音文件转为wav识别起来成功率高

    看到其他人的博客说是silk其实是base64加密后的webm格式,说是需要先将base64解密,还需要自己写解密的代码,参考:http://blog.csdn.net/rjliulei/article/details/77800760

    自己比较懒,总是想找成熟的解决方案,终于找到一个很棒的方案:

    需要安装FFmpeg和 silk-v3-decoder

    FFmpeg找下安装教程即可

     silk-v3-decoder的安装参考:https://www.imooc.com/article/21550?block_id=tuijian_wz

    再就是转码的命令了,参考:http://blog.csdn.net/m0_37730244/article/details/78615427

    命令转码的时候有个地方看了半天才看懂 silk/decoder  /data/test.silk  /data/1.pcm

    编译 silk-v3-decoder后会在里面生成一个silk的目录,里面有个decoder程序,这是转换的关键 用它执行音频格式转换

    测试了好几个wav和pcm识别的效果,发现还是wav识别率高,我用的是 ffmpeg -y -f s16le -ar 24000 -ac 1 -i  /data/1.pcm  -f wav -ar 16000 -b:a 16 -ac 1  /data/1.wav 

    将pcm转为wav的命令,最后调用百度的识别sdk

    下面是识别的接口

    # coding=utf-8
    from aip import AipSpeech
    import os


    class ConvertVoice(object):
    """百度语音识别"""

    def __init__(self):
    super(ConvertVoice, self).__init__()
    self.APP_ID = '用的时候需要换成自己申请的内容'
    self.API_KEY = '用的时候需要换成自己申请的内容'
            self.SECRET_KEY = '用的时候需要换成自己申请的内容'
            self.client = AipSpeech(self.APP_ID, self.API_KEY, self.SECRET_KEY)

    def get_file_content(self, filePath):
    '''
    读取文件
    :param filePath: 文件的绝对路径
    :return:
    '''
    try:
    with open(filePath, 'rb') as fp:
    return fp.read()
    except Exception as error_msg:
    print(error_msg)
    return error_msg

    def get_str_from_voice(self, filePath):
    '''
    识别本地文件
    :param filePath: 文件的绝对路径
    :return:
    '''
    try:
    if os.path.exists(filePath):
    rt = self.client.asr(self.get_file_content(filePath), 'wav', 16000, {
    'lan': 'zh'})
    return rt
    else:
    return {"err_no": 2000, "err_msg": "文件不存在"}
    except Exception as error_msg:
    print(error_msg)
    return error_msg


    if __name__ == '__main__':
    cv = ConvertVoice()
    rt = cv.get_str_from_voice("F:/19.wav")
    print(rt)
  • 相关阅读:
    Selenium简单测试页面加载速度的性能(Page loading performance)
    Selenium Page object Pattern usage
    Selenium如何支持测试Windows application
    UI Automation的两个成熟的框架(QTP 和Selenium)
    分享自己针对Automation做的两个成熟的框架(QTP 和Selenium)
    敏捷开发中的测试金字塔(转)
    Selenium 的基础框架类
    selenium2 run in Jenkins GUI testing not visible or browser not open but run in background浏览器后台运行不可见
    eclipse与SVN 结合(删除SVN中已经上传的问题)
    配置Jenkins的slave节点的详细步骤适合windows等其他平台
  • 原文地址:https://www.cnblogs.com/fly-kaka/p/8301741.html
Copyright © 2011-2022 走看看