问题描述

语音识别问题首先可以通过深度学习方法,训练语言模型后进行音频识别,但该方法要求设备内存足够大,训练时间通常较久,后期有时间的话会再学习使用;

另外就是离线识别方法——使用python自带语音包,对于简单音频的识别率还可以;

联网识别方法——调用各大已经实现语音识别功能网站的接口,目前人家做得已经很成熟了,比较常见的有百度、讯飞,这里使用的标贝科技也不错,具体参数可以去官网查询使用。

查阅很多资料,有些代码是不能用的,这里就直接给出测试过的代码了,都是python语言,别的知识自己去查吧


SpeechRecognition

支持音频文件类型:

  • WAV: 必须是 PCM/LPCM 格式
  • AIFF
  • AIFF-CFLAC: 必须是初始 FLAC 格式;OGG-FLAC 格式不可用
# 终端安装
pip3 install SpeechRecognition
pip3 install pocketsphinx# 若要访问麦克风则必须安装 PyAudio 软件包
pip3 install PyAudio
# 以下识别中文需要添加中文语音包,可以去查询获取
# 离线识别
# -*- coding: utf-8 -*-
import speech_recognition as sr
from os import pathaudio_file =  path.join(path.dirname(path.realpath('C:/Users/263000/Desktop/')), 'C:/Users/263000/Desktop/test.mp3')r = sr.Recognizer()
with sr.AudioFile(audio_file) as source:audio = r.record(source)r = sr.Recognizer()try:print(" 音频内容为: " + r.recognize_sphinx(audio, language='zh-CN'))
except sr.UnknownValueError:print('Sphinx could not understand audio')
except sr.RequestError as e:print('Sphinx error; {0}'.format(e))# print('文本内容: ', r.recognize_sphinx(audio,language='zh-CN'))  #汉语
# print('文本内容: ', r.recognize_sphinx(audio))  # 英语# 在线识别
# -*- coding: utf-8 -*-
import speech_recognition as sr# obtain audio from the microphone
r = sr.Recognizer()
with sr.Microphone() as source:r.adjust_for_ambient_noise(source)    #收听1秒,以校准环境噪声级的能量阈值print('say something')# print("")audio = r.listen(source)
#
# # recognize speech using Sphinx
try:print("Sphinx thinks you said " + r.recognize_sphinx(audio))
except sr.UnknownValueError:print("Sphinx could not understand audio")
except sr.RequestError as e:print("Sphinx error; {0}".format(e))# 一些改进
# offset设置命令起点, duration设置持续时间
audio = r.record(source, offset=4.7, duration=2.8)   # 使用adjust_for_ambient_noise()命令减少噪音
r.adjust_for_ambient_noise(source)
audio = r.record(source)

百度

只支持 pcm/wav/amr 格式,采样率为固定值16000

# coding=utf-8import json
import time
from urllib.request import urlopen
from urllib.request import Request
from urllib.error import URLError
from urllib.parse import urlencodetimer = time.timeAPI_KEY = '你自己的'
SECRET_KEY = '你自己的'# 需要识别的文件
AUDIO_FILE = './test.wav'  # 只支持 pcm/wav/amr 格式,极速版额外支持m4a 格式
# 文件格式
FORMAT = AUDIO_FILE[-3:]  # 文件后缀只支持 pcm/wav/amr 格式,极速版额外支持m4a 格式CUID = '123456PYTHON'
# 采样率
RATE = 16000  # 固定值# 普通版
DEV_PID = 1537  # 1537 表示识别普通话,使用输入法模型。根据文档填写PID,选择语言及识别模型
ASR_URL = 'http://vop.baidu.com/server_api'
SCOPE = 'audio_voice_assistant_get'  # 有此scope表示有asr能力,没有请在网页里勾选,非常旧的应用可能没有"""  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)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()result_str = result_str.decode()result = json.loads(result_str)if 'access_token' in result.keys() and 'scope' in result.keys():if SCOPE and (SCOPE not in result['scope'].split(' ')):  # SCOPE = False 忽略检查raise DemoError('scope is not correct')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()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)params = {'cuid': CUID, 'token': token, 'dev_pid': DEV_PID}params_query = urlencode(params)headers = {'Content-Type': 'audio/' + FORMAT + '; rate=' + str(RATE),'Content-Length': length}# print post_datareq = Request(ASR_URL + "?" + params_query, speech_data, headers)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()result_str = str(result_str, 'utf-8')print(result_str)with open("result.txt", "w") as of:of.write(result_str)

标贝

与百度一样,需要先去官网认证登录,创建语音识别的应用,获取自己的API和SECRET,每天只有有限次数的免费使用额度

#!/usr/bin/env python
# coding: utf-8import requests
import json
import argparse# 获取access_token用于鉴权
def get_access_token(client_secret, client_id):grant_type = "client_credentials"url = "https://openapi.data-baker.com/oauth/2.0/token?grant_type={}&client_secret={}&client_id={}" \.format(grant_type, client_secret, client_id)try:response = requests.post(url)response.raise_for_status()except Exception as e:print(e)returnelse:access_token = json.loads(response.text).get('access_token')return access_token# 获取识别后文本
def get_text(file, headers):url = "https://asr.data-baker.com/asr/api?"response = requests.post(url, data=file, headers=headers)code = json.loads(response.text).get("code")text = json.loads(response.text).get("text")if code != 20000:print(response.text)return text# 获取命令行输入参数
def get_args():parser = argparse.ArgumentParser(description='ASR')parser.add_argument('-client_secret', type=str, required=True)parser.add_argument('-client_id', type=str, required=True)parser.add_argument('-file_path', type=str, required=True)parser.add_argument('--audio_format', type=str, default='wav')parser.add_argument('--sample_rate', type=str, default='16000')parser.add_argument('--add_pct', type=str, default='true')args = parser.parse_args()return argsif __name__ == '__main__':args = get_args()# 获取access_tokenclient_secret = args.client_secretclient_id = args.client_idaccess_token = get_access_token(client_secret, client_id)# 读取音频文件with open(args.file_path, 'rb') as f:file = f.read()# 填写Header信息audio_format = args.audio_formatsample_rate = args.sample_rateadd_pct = args.add_pctheaders = {'access_token': access_token, 'audio_format': audio_format, 'sample_rate': sample_rate,'add_pct': add_pct}text = get_text(file, headers)print(text)

python语音识别音频文件的方法相关推荐

  1. Python处理音频文件的实用姿势

    Python处理音频文件的实用姿势 每天叫醒我的不是理想,是楼下广场舞的音乐. 音乐是人类的通用语言,不分国界不分种族. 抖音短视频爆火的关键因素之一,就是普通人也能便捷地使用BGM表达自我. 从感性 ...

  2. python将音频文件转为txt文本

    文章目录 前言 具体过程 1.讯飞开放平台创建应用 2.代码示例 3.代码说明 4.测试结果 前言 今天朋友在群里面问有没有音频转文字的免费软件?我就去网上搜了一下,发现网上大多数是超出一定时长就收费 ...

  3. python读取csv文件的方法-python读写csv文件的方法

    1.爬取豆瓣top250书籍 import requests import json import csv from bs4 import BeautifulSoup books = [] def b ...

  4. python读取大文件-使用Python读取大文件的方法

    背景 最近处理文本文档时(文件约2GB大小),出现memoryError错误和文件读取太慢的问题,后来找到了两种比较快Large File Reading 的方法,本文将介绍这两种读取方法. 准备工作 ...

  5. java 双声道音频_java实现切割wav音频文件的方法详解【附外部jar包下载】

    本文实例讲述了java实现切割wav音频文件的方法.分享给大家供大家参考,具体如下: import it.sauronsoftware.jave.Encoder; import it.sauronso ...

  6. 转载:python引用DLL文件的方法

    python引用DLL文件的方法 转载于:https://www.cnblogs.com/Regle/p/7003261.html

  7. python数据生成pdf,Python生成pdf文件的方法

    摘要:这篇Python开发技术栏目下的"Python生成pdf文件的方法",介绍的技术点是"python生成pdf文件.python生成pdf.生成pdf文件.Pytho ...

  8. linux iphone文件,在linux下生成iphone所需要的视频和音频文件的方法总结

    在linux下生成iphone所需要的视频和音频文件的方法总结 (2011-05-07 09:53:18) 标签: linux iphone mencoder ffmpeg mplayer 一.生成可 ...

  9. Python生成exe文件的方法

    python生成exe文件的方法: 一.安装 pyinstaller pip install pyinstaller 二.使用 pyinstaller 命令 # 打包成exe,并设置图标 pyinst ...

最新文章

  1. Asp.net中多项目共享Session
  2. oracle导入dmp文件报错12154,oracle表空间的创建及dmp 文件的导入(推荐)
  3. KVM虚拟机的优化历程---按需优化
  4. python 解析url上的xml_如何从python中的URL读取XML文件?
  5. ROS和OpenCV的对接cv_bridge
  6. pytorch list转tensor_PyTorch 52.PyTorch常用代码段合集
  7. 啊哈c语言推箱子小游戏,啊哈C入门版学完了,现发推箱子源代码~
  8. Docker JFrog Artifactory 7.27.10 maven私服(搭建篇)
  9. yii2 js加载顺序呢
  10. python-装饰器简介
  11. java-背包的实现
  12. 月薪14.5K...转行测试还是考公考研?律师小哥是这样选择的...
  13. java 期刊杂志参考_各系列普刊期刊的推荐,大家可供参考
  14. SpringSecurity下做POST测试以及传递实体
  15. java虎牙app弹幕_虎牙直播随机弹幕插件(OBSS)
  16. 面向自动驾驶车辆验证的抽象仿真场景生成
  17. 用正则表达式匹配(match)正整数
  18. github实用的搜索小技巧
  19. Linux网络配置和常用命令
  20. mysql联合查询注入防护,SQL注入之BypassWaf

热门文章

  1. PBR与Blinnphong解读
  2. 详解反转字符串算法题
  3. [译]Nginx和Lua
  4. 笔记本屏幕30hz_开学在即,最适合大学生的笔记本电脑买起来
  5. 在输入框里输入一个时间,获得倒计时时间,点击开始计时,便可以开始计时,点击停止计时按钮,则停止计时。
  6. SAP Ehancement Package 7 for ERP 6.0 Install Step By Step -07
  7. vs2010等一些老版本visual studio下载
  8. 服务器项目前端调用摄像头失败,浏览器调用摄像头失败:NotSupportedError Only secure origins are allowed...
  9. wifi有没有漫游成功判断方法c
  10. Canence第11篇之Allegro16.6铺铜设置及删除死铜的方法