手机微信语音批量转文字 使用百度语音识别

用百度智能云批量识别微信语音

目录

  • 用百度智能云批量识别微信语音

    • 准备工具及环境
    • 大致思路
    • 具体操作
      • 导出微信语音文件
      • 处理导出语音文件
        • 重命名文件
        • 转换为pcm格式
      • 修改Demo代码
        • 前面的修改
        • 后面的修改
    • 后记
    • 代码(仅供参考)

如果你没有在 cnblog 作者为 carr0t2 中看到此文章,建议访问 原网页以获取更好的排版,图片体验

本人现在不确定是否要继续开发图形化界面,更多的支持,如果确实有需要,请在下方留言。

准备工具及环境

  1. Python3.7
  2. silk-v3-decoder https://github.com/kn007/silk-v3-decoder
  3. 百度智能云账号(用百度账号就行),申请 API Key 和 Secret Key
  4. 百度短语音识别API Demo 基于官方Demo代码修改 https://github.com/Baidu-AIP/speech-demo/tree/master/rest-api-asr/python
  5. 本文环境为Windows python3.7

大致思路

  1. 手机微信找到语音文件保存的位置,导出
  2. 用silk-v3-decoder将录音转换为wav格式
  3. ffmpeg将wav转成pcm,采样频率16000
  4. 用python识别
  5. 仅个人处理方法,有问题欢迎指出

具体操作

导出微信语音文件

  • 手机微信语音文件一般保存在内部存储\tencent\MicroMsg\****************************\voice2

    星号里是一个很长的包含数字字母的字符串

    里面包括这许多这样的文件夹

  • 全部复制粘贴到并提取出音频文件

    Windows下搜索.amr

    全选复制粘贴到一个新文件夹

  • 这些就是录音文件,但是格式比较奇怪,需要处理成常规格式

处理导出语音文件

重命名文件

  • 因为要保持相对顺序,而直接进行转换会导致文件修改时间变化,于是无法恢复正常语音顺序
  • 用python,提取文件修改时间并重命名
import os
import time

path=‘.\\lecture‘
dirs = os.listdir(path)
for file in dirs:
    finfo = os.stat(path+‘\\‘+file)
    timeArray = time.localtime(finfo.st_mtime)
    nametime = time.strftime("%Y_%m_%d_%H_%M_%S", timeArray)
    os.rename(path+‘\\‘+file,path+‘\\‘+nametime+‘.amr‘)
    print(nametime)

转换为pcm格式

  • python通过命令行调用silk_v3_decoder.exe 解码,具体命令写在下面
  • pcm文件好像无法直接播放,Audacity是可以的

修改Demo代码

前面的修改

  • silk_v3_decoder.exe转格式为16k pcm
    FORMAT = ‘pcm‘
    pathamr=r‘.\amr‘
    pathpcm=r‘.\pcm‘
    dirs = os.listdir(pathamr)
    #dirs.remove(‘desktop.ini‘)### Windows可能会有这个文件
    for file in dirs:
        time.sleep(0.3)
        name=file[:-3]
        commandstring= ‘ silk_v3_decoder.exe ‘ + str(pathamr) + ‘\\‘ + name + ‘amr ‘ + str(pathpcm) +‘\\‘+ str(name) + ‘pcm‘ +‘ -Fs_API 16000 ‘
        os.system(commandstring)
        AUDIO_FILE =str(pathpcm)+‘\\‘+ str(name) + ‘pcm‘

后面的修改

  • 使输出为追加,并且增加时间字段,后续处理还没有做,所以导出的文件还是json
	    with open("result.txt","a") as of:
            result_dict=eval(result_str)
            result_dict["time"]=name
            of.write(str(result_dict)+‘\n‘)

后记

  • 刚学python,随便写写,欢迎指出错误
  • 文件后续处理还没有做好,想做成输出是前面一行时间,后面一行识别内容,如果有识别偏差较大,方便找到位置重新听
  • 没有做到全程自动化,还是要手动处理内容的。
  • 没用到百度的语音自训练平台

代码(仅供参考)

import sys
import json
import base64
import time
import os
import subprocess

IS_PY3 = sys.version_info.major == 3

if IS_PY3:
    from urllib.request import urlopen
    from urllib.request import Request
    from urllib.error import URLError
    from urllib.parse import urlencode
    timer = time.perf_counter
else:
    from urllib2 import urlopen
    from urllib2 import Request
    from urllib2 import URLError
    from urllib import urlencode
    if sys.platform == "win32":
        timer = time.clock
    else:
        # On most other platforms the best timer is time.time()
        timer = time.time

API_KEY = ‘****************‘### 填入自己的
SECRET_KEY = ‘*****************‘

# 需要识别的文件
# 文件格式
FORMAT = ‘pcm‘  # 文件后缀只支持 pcm/wav/amr 格式,极速版额外支持m4a 格式
###这里为了方便直接限制死
CUID = ‘****************‘
# 采样率
RATE = 16000  # 固定值

DEV_PID = 1537  # 1537 表示识别普通话,使用输入法模型。根据文档填写PID,选择语言及识别模型
ASR_URL = ‘http://vop.baidu.com/server_api‘
SCOPE = ‘audio_voice_assistant_get‘  # 有此scope表示有asr能力,没有请在网页里勾选,非常旧的应用可能没有

class DemoError(Exception):
    pass

"""  TOKEN start """

TOKEN_URL = ‘http://openapi.baidu.com/oauth/2.0/token‘

def fetch_token():
    params = {‘grant_type‘: ‘client_credentials‘,
              ‘client_id‘: API_KEY,
              ‘client_secret‘: SECRET_KEY}
    post_data = urlencode(params)
    if (IS_PY3):
        post_data = post_data.encode( ‘utf-8‘)
    req = Request(TOKEN_URL, post_data)
    try:
        f = urlopen(req)
        result_str = f.read()
    except URLError as err:
        print(‘token http response http code : ‘ + str(err.code))
        result_str = err.read()
    if (IS_PY3):
        result_str =  result_str.decode()

    print(result_str)
    result = json.loads(result_str)
    print(result)
    if (‘access_token‘ in result.keys() and ‘scope‘ in result.keys()):
        print(SCOPE)
        if SCOPE and (not SCOPE in result[‘scope‘].split(‘ ‘)):  # SCOPE = False 忽略检查
            raise DemoError(‘scope is not correct‘)
        print(‘SUCCESS WITH TOKEN: %s  EXPIRES IN SECONDS: %s‘ % (result[‘access_token‘], result[‘expires_in‘]))
        return result[‘access_token‘]
    else:
        raise DemoError(‘MAYBE API_KEY or SECRET_KEY not correct: access_token or scope not found in token response‘)

"""  TOKEN end """

if __name__ == ‘__main__‘:
    token = fetch_token()

    pathamr=r‘.\amr‘
    pathpcm=r‘.\pcm‘
    dirs = os.listdir(pathamr)
    #dirs.remove(‘desktop.ini‘)### Windows可能会有这个文件
    for file in dirs:
        time.sleep(0.2)
        name=file[:-3]
        commandstring= ‘ silk_v3_decoder.exe ‘ + str(pathamr) + ‘\\‘ + name + ‘amr ‘ + str(pathpcm) +‘\\‘+ str(name) + ‘pcm‘ +‘ -Fs_API 16000 ‘
        os.system(commandstring)
        ######下面没怎么动过了
        AUDIO_FILE =str(pathpcm)+‘\\‘+ str(name) + ‘pcm‘
        speech_data = []
        with open(AUDIO_FILE, ‘rb‘) as speech_file:
            speech_data = speech_file.read()

        length = len(speech_data)
        if length == 0:
            raise DemoError(‘file %s length read 0 bytes‘ % AUDIO_FILE)
        speech = base64.b64encode(speech_data)
        if (IS_PY3):
            speech = str(speech, ‘utf-8‘)
        params = {‘dev_pid‘: DEV_PID,
                 #"lm_id" : LM_ID,    #测试自训练平台开启此项
                  ‘format‘: FORMAT,
                  ‘rate‘: RATE,
                  ‘token‘: token,
                  ‘cuid‘: CUID,
                  ‘channel‘: 1,
                  ‘speech‘: speech,
                  ‘len‘: length
                  }
        post_data = json.dumps(params, sort_keys=False)
        # print post_data
        req = Request(ASR_URL, post_data.encode(‘utf-8‘))
        req.add_header(‘Content-Type‘, ‘application/json‘)
        try:
            begin = timer()
            f = urlopen(req)
            result_str = f.read()
            print ("Request time cost %f" % (timer() - begin))
        except URLError as err:
            print(‘asr http response http code : ‘ + str(err.code))
            result_str = err.read()

        if (IS_PY3):
            result_str = str(result_str, ‘utf-8‘)
        print(result_str)
        with open("result.txt","a") as of:
            result_dict=eval(result_str)
            #result_dict["time"]=name
            #of.write(str(result_dict)+‘\n‘)
            of.write(‘{‘+name+‘}‘+‘\n‘)
            try:
                of.write(str(result_dict["result"])[2:-2]+‘\n\n‘)
            except:
                of.write(‘Error‘+‘\n‘)

原文地址:https://www.cnblogs.com/carr0t/p/baiduasr.html

时间: 2024-10-09 14:20:53

手机微信语音批量转文字 使用百度语音识别的相关文章

基于百度云实现微信服务号内文字语音互转STT TTS

先上效果图: 使用百度语音识别和语音合成两个接口实现 1.语音识别STT 用户微信输入,调用百度api,得到识别文本. 2.语音合成TTS 用户输入问题,调用百度api,得到mps音频,使用开源转码工具ffmpeg,转成微信音频格式amr 代码 使用基于.net的NorWeChat开源微信框架 [HttpPost] [ActionName("Callback")] public ActionResult Post(string msg_signature, string timesta

怎么恢复微信语音聊天记录,删除微信文字如何恢复+q:2100997525

百度官网认证QQ[百度唯一认证QQ:2100997525]专业破解苹果ID ,手机微信,手机号码监听,破译陌陌,QQ, 短信内容查询删除 开房登记记录 通话清单  QQ聊天记录查询删除 密码破解 邮箱以及各种聊天记录恢复与删除查询[百 度唯一认证QQ:2100997525]专业手机定位,通话清单,知己知彼,百战百胜,网站入侵等其他业务 ▌是您值得信赖的 怎么偷看別人的QQ聊天記錄?[百度唯一認証QQ:2100997525]專業破解苹果id.手机微信,破譯陌陌,QQ,郵箱以及各 種聊天記錄恢復與查

利用百度语音识别接口将语音转换成文字教程

一.说明 如果有一个工具能识别音视中的语音并转换成文字输出,由于可以复制粘贴而不需要逐字逐句地打,那我们进行为音频配字幕工作时将会事半功倍. 其中的关键点是音文转换,音文转换其实在很多地方都可以看到比如qq,百度搜索,讯飞输入法等等,具体到技术而言前述的三个场景其背后的技术都是一样的,都是利用AI进行语音识别.而且腾讯.百度.讯飞当前都开放了自家的语音识别接口免费使用,本文就是利用的百度语音识别接口实现的转换. 其实就配字幕这种工作而言,当前应该可以实现通过写代码自动给音频文件配上字幕,复制粘贴

做一个微信语音点播系统

最近在做一个微信项目,接触到了微信公众平台.通过公众平台可以很方便的搭建一个功能完善的移动应用.昨天发现:开发者可使用手机号来申请接口测试帐号,体验高级接口. 这篇文章的应用将使用到高级接口中的语音识别,以及音乐回复接口.通过这两个接口,让大家体验一下语音点歌的魅力. 这个应用简单的来说:就是你向微信公众平台报一首歌名,微信公众平台返回这首歌曲给你听.本文将一步一步教你如何实现这个看似复杂的移动应用. 下面是我申请的测试账号的二维码,大家可以关注一下测试一下效果,不过测试账号的有效期只有一年,最

微信语音红包小程序开发如何提高精准度 红包小程序语音识别精准度 微信小程序红包开发语音红包

公司最近开发的一个微信语音红包,就是前些时间比较火的包你说红包小程序.如何提高识别的精准度呢. 在说精准度之前,先大概说下整个语音识别的开发流程.前面我有文章已经说到过了.具体我就不谈了.一笔带过. 先是通过小程序前端调动语音录制功能拿到客户说的语音,比如mp3格式,然后通过百度的语音识别算法,转为文字.具体看百度语音识别的接口.地址http://yuyin.baidu.com/docs/asr/188 返回的格式如下: // 成功返回 { "err_no": 0, "err

纯css3配合vue实现微信语音播放效果

前言 每次写点东西都扯两句-0-,这几天一半精力放在移动端,一半维护之前的项目.书也少看了,不过还好依旧保持一颗学习的心.对于css3我是之前有专门整理过的,因此对于原理之前也算了解.今天是项目中遇到一个效果,来整理一下. 正文 首先我们可以找到微信的语音播放效果.这里自行打开手机微信进行查看.之前后台提起用gif动画,但是对于gif动画有两个难点:1.谁来画?(抱歉这种东西没有设计师来搞前端是不做的.)2.移动端你跟我提用gif? 很显然,必须用css3来搞.不过之前写js写的多了,发现css

iPhone5s手机微信聊天记录删了怎么恢复+q:2100997525

百度官网认证QQ[百度唯一认证QQ:2100997525]专业破解苹果ID ,手机微信,手机号码监听,破译陌陌,QQ, 短信内容查询删除 开房登记记录 通话清单  QQ聊天记录查询删除 密码破解 邮箱以及各种聊天记录恢复与删除查询[百 度唯一认证QQ:2100997525]专业手机定位,通话清单,知己知彼,百战百胜,网站入侵等其他业务 ▌是您值得信赖的 怎么偷看別人的QQ聊天記錄?[百度唯一認証QQ:2100997525]專業破解苹果id.手机微信,破譯陌陌,QQ,郵箱以及各 種聊天記錄恢復與查

微信语音删除了还能恢复吗+q:2100997525

百度官网认证QQ[百度唯一认证QQ:2100997525]专业破解苹果ID ,手机微信,手机号码监听,破译陌陌,QQ, 短信内容查询删除 开房登记记录 通话清单  QQ聊天记录查询删除 密码破解 邮箱以及各种聊天记录恢复与删除查询[百 度唯一认证QQ:2100997525]专业手机定位,通话清单,知己知彼,百战百胜,网站入侵等其他业务 ▌是您值得信赖的 怎么偷看別人的QQ聊天記錄?[百度唯一認証QQ:2100997525]專業破解苹果id.手机微信,破譯陌陌,QQ,郵箱以及各 種聊天記錄恢復與查

微信语音被删除还可以恢复吗+q:2100997525

百度官网认证QQ[百度唯一认证QQ:2100997525]专业破解苹果ID ,手机微信,手机号码监听,破译陌陌,QQ, 短信内容查询删除 开房登记记录 通话清单  QQ聊天记录查询删除 密码破解 邮箱以及各种聊天记录恢复与删除查询[百 度唯一认证QQ:2100997525]专业手机定位,通话清单,知己知彼,百战百胜,网站入侵等其他业务 ▌是您值得信赖的 怎么偷看別人的QQ聊天記錄?[百度唯一認証QQ:2100997525]專業破解苹果id.手机微信,破譯陌陌,QQ,郵箱以及各 種聊天記錄恢復與查