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)
  • 相关阅读:
    每日日报
    每日日报
    每日日报
    线上问题定位---jstack
    8.18Java入门--->第二十二节(ObjectOutputStream、ObjectInputStream)
    8.17Java入门--->第二十一节(IO流)
    Mybatis--->第六节一对多和多对一
    8.14Java入门--->第二十节
    8.13Java入门--->第十九节(Map嵌套)
    Java学习
  • 原文地址:https://www.cnblogs.com/fly-kaka/p/8301741.html
Copyright © 2011-2022 走看看