5、AI的耳朵

75 阅读2分钟

计算机如何"听"声音?

语音识别的过程可以类比为“翻译”:

语音数字化:把语音信号“翻译”成计算机能理解的数字信号。 特征提取:从数字信号中提取“关键信息”,就像提取语音的“指纹”。 模型匹配:用预训练的模型将这些“指纹”与已知的语音模式进行匹配,找到对应的文本。 文本输出:把匹配到的文本“翻译”出来,就像把语音“翻译”成文字一样。

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