web网页录音(recorder.js)并上传后端语音转文字(Vosk)

以下是一个简化的代码示例,展示了如何使用recorder.js录音,并通过WebSocket发送到后端进行处理,后端使用vosk进行语音转文本。

前端代码(HTML + JavaScript):




<!DOCTYPE html>
<html>
<head>
    <title>语音识别示例</title>
</head>
<body>
    <button id="recordButton">录音</button>
    <script src="https://cdn.jsdelivr.net/npm/recorder-js@1.1.0/dist/recorder.js"></script>
    <script>
        const recorder = new Recorder({
            sampleRate: 16000, // 与vosk的预期采样率一致
            bitRate: 16 // 比特率
        });
 
        document.getElementById('recordButton').addEventListener('click', () => {
            if (recorder.getRecordingState() === 'recording') {
                recorder.stop();
                document.getElementById('recordButton').innerText = '录音';
            } else {
                recorder.start();
                document.getElementById('recordButton').innerText = '停止';
            }
        });
 
        recorder.onstop = (blob) => {
            const socket = new WebSocket('ws://your-server-address');
            socket.binaryType = "arraybuffer";
 
            socket.onopen = () => {
                socket.send(blob);
            };
 
            socket.onmessage = (event) => {
                console.log(event.data); // 输出转换后的文本
            };
 
            socket.onclose = () => {
                console.log('WebSocket 连接已关闭');
            };
        };
    </script>
</body>
</html>

后端代码(Python + Vosk):




import json
import websockets
import vosk
 
async def handle_websocket(websocket, path):
    rec = vosk.KaldiRecognizer(model, 16000)
    
    async for message in websocket:
        if message is not None:
            # 处理接收到的音频数据
            if rec.AcceptWaveform(message, 0):
                # 识别并输出文本
                print(json.dumps({'text': rec.Result()}))
            else:
                print(json.dumps({'partial': rec.PartialResult()}))
 
    # 完成识别并输出最终文本
    print(json.dumps({'text': rec.FinalResult()}))
 
model_path = 'path/to/vosk-model'
model = vosk.Model(model_path)
 
start_server = websockets.serve(handle_websocket, "0.0.0.0", 8765)
 
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

确保替换your-server-address为实际WebSocket服务器地址,以及path/to/vosk-model为实际的Vosk模型路径。

这个示例提供了一个简单的交互,用户可以点击按钮来开始和停止录音,录音的音频通过WebSocket发送到后端,后端使用Vosk进行语音识别,并将识别结果以JSON的形式发送回前端。

最后修改于:2024年08月17日 09:02

评论已关闭

推荐阅读

DDPG 模型解析,附Pytorch完整代码
2024年11月24日
DQN 模型解析,附Pytorch完整代码
2024年11月24日
AIGC实战——Transformer模型
2024年12月01日
Socket TCP 和 UDP 编程基础(Python)
2024年11月30日
python , tcp , udp
如何使用 ChatGPT 进行学术润色?你需要这些指令
2024年12月01日
AI
最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
2024年11月24日
ChatGPT 和 DALL·E 2 配合生成故事绘本
2024年12月01日
omegaconf,一个超强的 Python 库!
2024年11月24日
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
2024年12月01日
[超级详细]如何在深度学习训练模型过程中使用 GPU 加速
2024年11月29日
Python 物理引擎pymunk最完整教程
2024年11月27日
MediaPipe 人体姿态与手指关键点检测教程
2024年11月27日
深入了解 Taipy:Python 打造 Web 应用的全面教程
2024年11月26日
基于Transformer的时间序列预测模型
2024年11月25日
Python在金融大数据分析中的AI应用(股价分析、量化交易)实战
2024年11月25日
AIGC Gradio系列学习教程之Components
2024年12月01日
Python3 `asyncio` — 异步 I/O,事件循环和并发工具
2024年11月30日
llama-factory SFT系列教程:大模型在自定义数据集 LoRA 训练与部署
2024年12月01日
Python 多线程和多进程用法
2024年11月24日
Python socket详解,全网最全教程
2024年11月27日