python语音录入转文字代码可以转文字的不要用speech——recognition库
时间: 2024-02-02 15:03:59 浏览: 81
如果不使用 `SpeechRecognition` 库,可以使用Python自带的 `pyaudio` 库录制音频,再使用百度或讯飞等语音识别API进行语音转换。以下是示例代码:
```python
import wave
import urllib.request
import urllib.parse
import json
import base64
import hashlib
import time
import hmac
import random
# 配置百度AI开放平台的API信息
APP_ID = 'your_app_id'
API_KEY = 'your_api_key'
SECRET_KEY = 'your_secret_key'
# 获取当前时间戳
def get_cur_time():
return int(time.time())
# 获取随机数
def get_random():
return random.randint(0, 100000000)
# 将音频文件转换成Base64编码的字符串
def get_file_content(file_path):
with open(file_path, 'rb') as f:
return base64.b64encode(f.read()).decode('utf-8')
# 计算签名
def get_sign(params):
sign_str = ''
for k in sorted(params.keys()):
sign_str += '{}={}'.format(k, params[k])
sign_str += SECRET_KEY
sign = hmac.new(sign_str.encode('utf-8'), digestmod=hashlib.sha256).hexdigest()
return sign
# 调用百度语音识别API进行语音转换
def baidu_asr(file_path):
# 配置请求参数
url = 'http://vop.baidu.com/server_api'
headers = {
'Content-Type': 'application/json'
}
audio = get_file_content(file_path)
params = {
'dev_pid': '1536', # 普通话(支持简单的英文识别)
'format': 'wav',
'rate': '16000',
'channel': 1,
'cuid': 'python_asr',
'len': len(audio),
'speech': audio,
'token': '',
'mac': '',
'timestamp': get_cur_time(),
'nonce': get_random()
}
params['sign'] = get_sign(params)
data = json.dumps(params).encode('utf-8')
# 发送请求
req = urllib.request.Request(url, data=data, headers=headers)
resp = urllib.request.urlopen(req)
result = json.loads(resp.read().decode('utf-8'))
# 解析结果
if result.get('err_no') == 0:
text = result.get('result')[0]
print('识别结果:{}'.format(text))
else:
print('识别失败:{}'.format(result.get('err_msg')))
# 录制音频并保存为WAV格式文件
def record_audio(file_path, seconds):
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 16000
p = pyaudio.PyAudio()
frames = []
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
print('*' * 10, '开始录音', '*' * 10)
for i in range(0, int(RATE / CHUNK * seconds)):
data = stream.read(CHUNK)
frames.append(data)
print('*' * 10, '结束录音', '*' * 10)
stream.stop_stream()
stream.close()
p.terminate()
wf = wave.open(file_path, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()
# 测试
if __name__ == '__main__':
file_path = 'test.wav'
record_audio(file_path, 5)
baidu_asr(file_path)
```
以上代码调用了百度语音识别API进行语音转换,需要先在百度AI开放平台注册账号,并创建语音识别应用。请将代码中的 `your_app_id`、`your_api_key`、`your_secret_key` 替换成自己的应用信息。
阅读全文