如何在Streamlit Sharing中部署支持用户音频录制的数据收集应用?
在Streamlit Sharing中实现用户音频录制并部署数据收集应用
我刚好解决过类似的问题,Streamlit Sharing上的音频录制关键是要选适配浏览器API且不需要额外服务端组件的方案,推荐用streamlit-audio-recorder库——它基于浏览器原生的MediaRecorder API,完美适配Streamlit Sharing的沙箱环境,不需要额外配置服务器。下面是完整的实现和部署步骤:
一、代码实现步骤
1. 准备依赖
首先在项目根目录创建requirements.txt文件,加入以下内容(确保版本兼容):
streamlit>=1.20.0 streamlit-audio-recorder>=0.0.8
2. 编写核心应用代码
创建app.py,实现短语展示、音频录制和基础存储功能:
import streamlit as st from streamlit_audio_recorder import audio_recorder # 页面配置 st.set_page_config(page_title="音频数据收集工具", page_icon="🎤") st.title("🎤 音频数据收集工具") # 配置需要用户朗读的短语(可以固定或动态加载) target_phrase = st.text_input( "设置待朗读短语", value="人工智能正在改变世界", help="用户将朗读这个短语并录制音频" ) st.markdown(f"### 请朗读以下内容:\n**{target_phrase}**") # 渲染音频录制组件 audio_bytes = audio_recorder( text="点击开始录制(再次点击停止)", recording_color="#ff4b4b", neutral_color="#4CAF50", icon_name="microphone", icon_size="3x" ) # 处理录制完成的音频 if audio_bytes: # 播放录制的音频供用户确认 st.subheader("录制预览") st.audio(audio_bytes, format="audio/wav") # 保存音频到本地(Streamlit Sharing临时存储,建议后续上传到云) record_id = st.session_state.get("record_counter", 0) filename = f"recording_{record_id}_{target_phrase.replace(' ', '_')}.wav" with open(filename, "wb") as f: f.write(audio_bytes) st.success(f"音频已保存:`{filename}`") # 更新会话内的录制计数 if "record_counter" not in st.session_state: st.session_state.record_counter = 0 st.session_state.record_counter += 1
二、部署到Streamlit Sharing
- 将代码(
app.py+requirements.txt)上传到一个公开的GitHub仓库(私有仓库也可以,但需要Streamlit授权访问) - 登录Streamlit Sharing平台,点击「New app」按钮
- 选择对应的GitHub仓库、分支和主文件(
app.py) - 点击「Deploy」,等待依赖安装和应用启动——整个过程通常只需要1-2分钟
三、关键注意事项
- 音频持久化:Streamlit Sharing的本地文件系统是临时的,应用重启后所有本地存储的音频会丢失。如果需要长期保存收集的数据,建议集成云存储服务(比如AWS S3、Google Cloud Storage):
- 在Streamlit的「Secrets」面板中配置云存储的密钥
- 使用对应SDK(如
boto3for S3)将录制好的audio_bytes直接上传到云端
- 浏览器权限:用户第一次使用时需要允许浏览器访问麦克风,确保页面提示清晰,引导用户授权
- 兼容性:
streamlit-audio-recorder支持绝大多数现代浏览器(Chrome、Firefox、Edge等),但建议在应用中添加提示,告知用户使用主流浏览器 - 资源限制:Streamlit Sharing有内存和CPU限制,避免同时处理大量音频文件,建议录制完成后立即上传云端并清理本地文件
内容的提问来源于stack exchange,提问作者Myccha
相关产品推荐
相关产品推荐

