计算机如何"听"声音?
语音识别的过程可以类比为“翻译”:
语音数字化:把语音信号“翻译”成计算机能理解的数字信号。 特征提取:从数字信号中提取“关键信息”,就像提取语音的“指纹”。 模型匹配:用预训练的模型将这些“指纹”与已知的语音模式进行匹配,找到对应的文本。 文本输出:把匹配到的文本“翻译”出来,就像把语音“翻译”成文字一样。
1 声音的数字化表示
声音在计算机中是如何表示的? 可以有多种形式表示声音:
- 波形图
- 梅尔频谱图(频域图)
- 显示色谱图(音高特征) 也有很多声音的特征来辅助分析声音:
- 响度:反映声音的响亮程度
- 过零率:反映信号频率变化的快慢,对语音检测很有用
- BPM (Beats Per Minute):每分钟节拍数,反映音乐节奏的快慢
2 语音识别实例
使用python简单的语音库和google的语音转文字的库:
# 语音识别程序
import sounddevice as sd
import numpy as np
import speech_recognition as sr
from scipy.io import wavfile
def record_audio(duration=5, sample_rate=44100):
"""
录制音频
duration: 录制时长(秒)
sample_rate: 采样率
"""
print(f"开始录音,持续 {duration} 秒...")
# 使用 sounddevice 录制音频
recording = sd.rec(
int(duration * sample_rate),
samplerate=sample_rate,
channels=1,
dtype=np.int16
)
sd.wait() # 等待录音完成
print("录音完成!")
return recording, sample_rate
def save_audio(recording, sample_rate, filename="recording.wav"):
"""保存录音为 WAV 文件"""
wavfile.write(filename, sample_rate, recording)
return filename
def transcribe_audio(audio_file):
"""将音频转换为文字"""
recognizer = sr.Recognizer()
with sr.AudioFile(audio_file) as source:
audio = recognizer.record(source)
try:
# 使用Google的在线语音识别服务,免费但有限制:
# - 每天有配额限制
# - 需要网络连接
# - 可能不够稳定
text = recognizer.recognize_google(audio, language='zh-CN') # 免费API,但建议替换为付费的商业API以获得更好的服务
return text
except sr.UnknownValueError:
return "无法识别音频内容"
except sr.RequestError as e:
return f"无法连接到语音识别服务:{e}"
def main():
"""主函数"""
try:
# 安装依赖提示
print("确保已安装必要的依赖:")
print("pip install sounddevice numpy scipy SpeechRecognition")
input("按回车键开始录音...")
# 录制音频
recording, sample_rate = record_audio()
# 保存音频文件
audio_file = save_audio(recording, sample_rate)
# 识别音频内容
print("\n正在识别音频...")
text = transcribe_audio(audio_file)
print("\n识别结果:")
print(text)
except Exception as e:
print(f"发生错误: {str(e)}")
print("可能的原因:")
print("1. 麦克风未正确连接")
print("2. 系统没有麦克风访问权限")
if __name__ == "__main__":
main()
3、运行结果
确保已安装必要的依赖:
pip install sounddevice numpy scipy SpeechRecognition
按回车键开始录音...
开始录音,持续 5 秒...
录音完成!
正在识别音频...
识别结果:
hello everyone my name is