Streamlit+Whisper:实时语音识别应用搭建指南

核心原理

Whisper是OpenAI开源的语音识别系统,支持多语言转录,其数学基础可表示为: $$ \text{Transcribe}(X) = \arg\max_Y P(Y|X;\theta) $$ 其中$X$为音频输入,$Y$为文本输出,$\theta$为模型参数。Streamlit提供Web界面实时交互能力。


实现步骤
  1. 环境准备

    pip install streamlit openai-whisper torch librosa
    

  2. 模型加载(缓存优化)

    import whisper
    import streamlit as st
    
    @st.cache_resource
    def load_model():
        return whisper.load_model("base")  # 可选base/small/medium
    

  3. 实时录音处理

    from io import BytesIO
    import librosa
    
    def process_audio(audio_bytes):
        # 转换为Whisper所需格式
        audio, sr = librosa.load(BytesIO(audio_bytes), sr=16000)
        return audio.astype(np.float32)
    

  4. Streamlit界面搭建

    def main():
        st.title("🎤 实时语音识别")
        model = load_model()
        
        # 录音组件
        audio_bytes = st.audio_recorder("点击录音")
        
        if audio_bytes:
            # 波形可视化
            st.audio(audio_bytes, format="audio/wav")
            
            # 语音识别
            audio_data = process_audio(audio_bytes)
            result = model.transcribe(audio_data)
            
            # 结果显示
            st.subheader("识别结果:")
            st.code(result["text"], language=None)
    


性能优化方案
  1. 模型选择策略

    模型类型 参数量 相对速度 适用场景
    tiny 39M 8x 移动端
    base 74M 4x 通用场景
    small 244M 1x 高精度需求
  2. 流式处理优化

    # 分段处理长音频
    for segment in result["segments"]:
        st.write(f"{segment['start']:.1f}s: {segment['text']}")
    

  3. GPU加速(需CUDA环境)

    model = whisper.load_model("base", device="cuda")
    


完整应用示例
import streamlit as st
import whisper
import numpy as np
from io import BytesIO

@st.cache_resource
def load_model():
    return whisper.load_model("base")

def main():
    st.set_page_config(page_title="语音识别", layout="wide")
    model = load_model()
    
    col1, col2 = st.columns(2)
    with col1:
        st.header("录音控制")
        audio_bytes = st.audio_recorder("🎤 按住录音", pause_threshold=3.0)
        
    if audio_bytes:
        with col2:
            st.header("识别结果")
            audio = whisper.load_audio(BytesIO(audio_bytes))
            result = model.transcribe(audio, fp16=False)
            
            with st.expander("详细结果"):
                st.json(result)
                
            st.subheader("文本输出:")
            st.markdown(f"**{result['text']}**")

if __name__ == "__main__":
    main()


部署注意事项
  1. 资源要求

    • 基础模型需500MB内存
    • 长音频处理需预留2GB交换空间
  2. 运行命令

    streamlit run app.py --server.port 8501
    

  3. 高级功能扩展

    • 添加语言选择参数:transcribe(audio, language='zh')
    • 集成翻译功能:whisper.translate(result['text'])
    • 添加VAD(语音活动检测)减少静默处理

提示:实际部署时建议使用Docker容器化,确保环境一致性。对于实时性要求高的场景,可结合WebSocket实现低延迟音频流传输。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐