基于树莓派的网课监督系统(二)

本文是基于树莓派的网课监督系统的第二部分,主要介绍如何搭建语音助手,包括语音端点检测、图灵机器人的集成以及使用APScheduler实现提醒上课功能。通过snowboy唤醒、VAD录音、百度语音识别和小影机器人交互,实现了语音交互基础。同时,利用APScheduler定时读取并播报课表。
摘要由CSDN通过智能技术生成

一、概述

在上面一篇文章中已经把该配置的环境配置好了,现在这篇就用了记录具体的实现方法。上一部分内容在 基于树莓派的网课监督系统(一).

二、语音助手的搭建

2.1 语音端点检测

语音活动检测(Voice Activity Detection,VAD)又称语音端点检测,语音边界检测。目的是从声音信号流里识别和消除长时间的静音期,以达到在不降低业务质量的情况下节省话路资源的作用,它是IP电话应用的重要组成部分。静音抑制可以节省宝贵的带宽资源,可以有利于减少用户感觉到的端到端的时延。

这里利用VAD来实现,唤醒后检测用户的说话的功能。一开始等待用户说话,等到录到用户说完一句话后,便停止录音。如果设置录音时长来录音可能会导致只录到用户说话的一部分,导致语音识别的结果也只有一部分。
以下代码改编自https://blog.csdn.net/yonglisikao/article/details/82314512.

#coding=utf-8
import webrtcvad
import collections
import sys
import signal
import pyaudio
 
from array import array
from struct import pack
import wave
import time
import os
 
 
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 16000
CHUNK_DURATION_MS = 30       # supports 10, 20 and 30 (ms)
PADDING_DURATION_MS = 1500   # 1 sec jugement
CHUNK_SIZE = int(RATE * CHUNK_DURATION_MS / 1000)  # chunk to read
CHUNK_BYTES = CHUNK_SIZE * 2  # 16bit = 2 bytes, PCM
NUM_PADDING_CHUNKS = int(PADDING_DURATION_MS / CHUNK_DURATION_MS)
NUM_WINDOW_CHUNKS = int(240 / CHUNK_DURATION_MS)
#NUM_WINDOW_CHUNKS = int(400 / CHUNK_DURATION_MS)  # 400 ms/ 30ms  ge
NUM_WINDOW_CHUNKS_END = NUM_WINDOW_CHUNKS * 2
 
 
def handle_int(sig, chunk):
    global leave, got_a_sentence
    leave = True
    got_a_sentence = True
 
 
def record_to_file(path, data, sample_width):
    "Records from the microphone and outputs the resulting data to 'path'"
    # sample_width, data = record()
    data = pack('<' + ('h' * len(data)), *data)
    wf = wave.open(path, 'wb')
    wf.setnchannels(1)
    wf.sets
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值