Python语音识别
Python语音识别
需求:用代码将录音转成文字,常规普通话,不是播音员那种标准发音。
结论:无论在线或是离线,用代码调用的效果都不太理想。
1、离线模式
参考:https://blog.csdn.net/qq_41891021/article/details/90737715
pip install SpeechRecognition -i https://mirror.baidu.com/pypi/simple
pip install PocketSphinx -i https://mirror.baidu.com/pypi/simple
- 要下wheel(和python版本及系统对应,兼容性肯定差):https://www.lfd.uci.edu/~gohlke/pythonlibs/#pocketsphinx
- 进入.whl所在的文件夹,执行以下代码(pip install)
pip install C:\AH_TOOLS\AH_PythonCode\Detect_Silence\sound2txt\pocketsphinx-0.1.15-cp38-cp38-win_amd64.whl
-
要下普通话包:https://sourceforge.net/projects/cmusphinx/files/Acoustic and Language Models/Mandarin/
-
python使用:
import speech_recognition as sr
print(sr.__version__)
r = sr.Recognizer()
with sr.AudioFile(r"D:\AH_DATA\FFmpegTest\10.wav") as source:
audio = r.record(source)
print(type(audio))
output = r.recognize_sphinx(audio, language='zh-cn')
print(output)
with open(r'C:\AH_TOOLS\AH_PythonCode\Detect_Silence\sound2Txt.txt', 'w') as f:
f.write(output)
2、在线模式
1、网上很多推荐百度的语音识别——先不说免不免费,要用这个必须要下载百度APP——直接PASS
2、标贝科技——每天可调用500次,还可以,但是第二天就会接到推销电话
以下均为标贝科技API的调用方法
网址:https://ai.data-baker.com/#/index
控制台:https://ai.data-baker.com/#/asr/short
key在【授权管理】里
Python代码:直接复制这个页面最后的完整代码,改都不用改,直接cmd调用即可测试:
https://www.bbsmax.com/A/xl56Y3k1Jr/
import 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)
return
else:
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 args
if __name__ == '__main__':
args = get_args()
# 获取access_token
client_secret = args.client_secret
client_id = args.client_id
access_token = get_access_token(client_secret, client_id)
# 读取音频文件
with open(args.file_path, 'rb') as f:
file = f.read()
# 填写Header信息
audio_format = args.audio_format
sample_rate = args.sample_rate
add_pct = args.add_pct
headers = {'access_token': access_token, 'audio_format': audio_format, 'sample_rate': sample_rate,
'add_pct': add_pct}
text = get_text(file, headers)
print(text)
但是:
音频采样率必须是16000,否则都是“嗯嗯嗯”
制造wav的代码如下
ffmpeg -i "D:\AH_DATA\FFmpegTest\000.mp4" ^
-ar 16000 -f wav ^
-y "D:\AH_DATA\FFmpegTest\000.wav"
python调用:
python C:\AH_TOOLS\AH_PythonCode\Detect_Silence\sound2txt.py ^
-client_secret=XXXXXXXX ^
-client_id=YYYYYYYY ^
-file_path=D:\AH_DATA\FFmpegTest\000.wav
但是:
-
速度比较慢。
-
识别精度非常低,还不如离线识别。
长文本测试:
需要安装websocket
X pip install websockets -i https://pypi.tuna.tsinghua.edu.cn/simple
X pip3 install --user websocket-server -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install websocket -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install websocket-client-py3 -i https://pypi.tuna.tsinghua.edu.cn/simple
#长文本识别调用测试
python F:\test\real_time_audio_recognition.py ^
-client_secret=e2a65382b666412bb11616c0b4b65510 ^
-client_id=68acf98e2f5545079e740a6f5b697353 ^
-file_path="F:\test\test.wav" ^
--audio_format=wav --sample_rate=16000
在网页端上传,识别结果不错
但是用python上传同样的文件,结果全是“嗯嗯啊啊”