初步融合snowboy+pyttsx3+espeak+sherpa-ncnn的python代码

在前文《将Snowboy语音唤醒的“叮”一声改成自定义语言》中,我已经实现唤醒snowboy后,树莓派会说一句自定义文本。今天,会在此基础上增加ASR的应用(基于sherpa-ncnn)。

首先,编写一个asr.py的程序,程序可以直接参考前文《树莓派智能语音助手之ASR2 – sherpa-ncnn》中的官网示例,我只是做了简单的修改:

import sounddevice as sd
import sherpa_ncnn

def init():
    recognizer = sherpa_ncnn.Recognizer(
        tokens="model/sherpa-ncnn/tokens.txt",
        encoder_param="model/sherpa-ncnn/encoder_jit_trace-pnnx.ncnn.param",
        encoder_bin="model/sherpa-ncnn/encoder_jit_trace-pnnx.ncnn.bin",
        decoder_param="model/sherpa-ncnn/decoder_jit_trace-pnnx.ncnn.param",
        decoder_bin="model/sherpa-ncnn/decoder_jit_trace-pnnx.ncnn.bin",
        joiner_param="model/sherpa-ncnn/joiner_jit_trace-pnnx.ncnn.param",
        joiner_bin="model/sherpa-ncnn/joiner_jit_trace-pnnx.ncnn.bin",
        num_threads=4,
    )
    return recognizer

def asr():
    recognizer = init()
    sample_rate = recognizer.sample_rate
    samples_per_read = int(1.5 * sample_rate)  
    last_result = ""
    print("说些什么……")
    with sd.InputStream(
        channels=1, dtype="float32", samplerate=sample_rate
    ) as s:
         while True:
            samples, _ = s.read(samples_per_read)  # a blocking read
            samples = samples.reshape(-1)
            recognizer.accept_waveform(sample_rate, samples)
            result = recognizer.text
            if last_result != result:
                last_result = result
                return result

然后,在我的项目文件夹下的demo.py去调用上面的asr函数。还记得在《将Snowboy语音唤醒的“叮”一声改成自定义语言》一文中,我加了一个callback函数吗?这次就是继续在这个函数中添加两行代码:

a=asr.asr()

print(“识别结果:”+a)

当然,在demo.py文件头部别忘了import asr。

运行的结果是,我每唤醒一次snowboy,就会显示“说些什么……”,然后我就对着麦克风说个短句,之后等个10来秒的样子,就会显示“识别结果”。目前的代码是每一次识别完成后,就要再唤醒snowboy一次,如循环直到按了CTRL+C退出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天飓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值