您好,
会员登录 快速注册
退出 ( 条未读消息)
关于本站 意见反馈 首页

公告:小宅博客网可以开发票了,需要发票的,去群里找群主哈!!
全部文章分类
  • 人工智能 >

  • 编程语言 >

  • WPF系列 >

  • ASP.NET系列 >

  • Linux >

  • 数据库 >

  • 嵌入式 >

  • WEB技术 >

  • PLC系列 >

  • 微服务与框架 >

  • 小宅DIY >

  • 学习资料 >

OpenCv基础 ANN车牌识别 yolov5车牌识别 指针式仪表识别 ROS系列 YOLO Halcon Detectron2 昇腾AI ChatGPT在线体验 英伟达JETSON ChatGLM ChatTTS FunASR 地平线 ByteTrack 魔搭社区 LangChain
C C# C++ Python Java Go
WPF
ASP.NET小功能 GPS定位系统-MVC GPS定位系统-VUE
Linux Linux内核 Shell MakeFile
MySql SqlServer Oracle
STM8 STM32 51单片机
VUE入门 HTML JavaScript CSS layui镜像网站 ElementUi中文官网
三菱 欧姆龙 西门子 施耐德 松下 台达
IOTSharp IOTGateway ABP FRAMEWORK Docker
亚克力音响 编程仙途:智驭万法
面试题与技巧 Python入门技能树 微软C#教程
首页 编程之美 工具下载 全国就业 流量地图 文心一言
ChatGLM
ChatGLM 内容介绍 ChatGLM2 PyCharm运行环境部署 ChatGLM2 PyCharm模型训练 Jetson Nano 部署ChatGLM Jetson Nano 语音输入与ASR
Jetson Nano 部署ChatGLM
激萌の小宅 小宅博客 ChatGLM

文章作者:激萌の小宅

促销:¥0

价格:¥0

配送方式: 购买后立即生效(如购买异常,请联系站长)
付款之后一定要等待自动跳转结束,否则购买可能会失败
  • 0 天

    有效期

  • 0

    总销量

  • 0

    累计评价

Jetson Nano 语音输入与ASR


声卡模块资料:Jetson Nano声卡使用

硬件连接如下:

Audio-Card-for-Jetson-Nano-5.jpg


说明:

1、采集声道数channels的值必须是双通道,不支持单通道。

2、rapid-paraformer ASR模型下载地址与使用方法:https://pypi.org/project/rapid-paraformer/2.0.4/

QQ20241002-122544.jpg   


 3、魔塔社区ASR模型:speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-onnx

将下载的“model_quant.onnx”模型文件名,改成 rapid_paraformer 支持的“asr_paraformerv2.onnx”名字,并替换到models目录下即可。

QQ20241002-122742.jpg


4、缺点:rapid_paraformer没找到支持热词识别的操作


完整测试代码如下:

import pyaudio
import numpy as np
import wave
import os
import time
from rapid_paraformer import RapidParaformer
from datetime import datetime

FORMAT = pyaudio.paInt16
CHANNELS = 2 # 只支持双通道
RATE = 16000
CHUNK_SIZE = 1024
MAX_WAV = int(RATE / CHUNK_SIZE * 0.5) # 0.5秒超时


# 获取当前时间
def getData():
    now = datetime.now()
    return f"{now.year}-{now.month}-{now.day} {now.hour}:{now.minute}:{now.second}"


# ASR
def wavTotext(path, paraformer):
    print(getData())
    result = paraformer([path])
    print(getData())
    print(result)


# 保存文件
def record_to_file(path, data):
    wf = wave.open(path, 'wb')
    wf.setnchannels(CHANNELS)
    wf.setsampwidth(2)
    wf.setframerate(RATE)
    wf.writeframes(data)
    wf.close()


if __name__ == '__main__':
    config_path = "resources/config.yaml"
    paraformer = RapidParaformer(config_path)
    while True:
        print(f"CHUNK_SIZE:{CHUNK_SIZE}")
        got_a_sentence = False
        leave = False

        pa = pyaudio.PyAudio()
        stream = pa.open(format=FORMAT,
                         channels=CHANNELS,
                         rate=RATE,
                         input=True,
                         start=False,
                         input_device_index=0,
                         frames_per_buffer=CHUNK_SIZE)

        while not leave:
            ReadStart = False  # 标志位,用于表示是否检测到语音
            ReadCount = 0
            voiced_frames = []
            print("* recording: ")
            stream.start_stream()
            StartTime = time.time()

            while not got_a_sentence and not leave:
                chunk = stream.read(CHUNK_SIZE, exception_on_overflow=False)

                # 计算音频能量
                audio_data = np.frombuffer(chunk, dtype=np.int16)
                energy = np.sum(np.abs(audio_data)) / len(audio_data)
                if energy > 200:
                    ReadCount = 0
                    if not ReadStart:
                        print("检测到语音开始")
                        StartTime = time.time()
                        ReadStart = True
                elif ReadStart:
                    ReadCount += 1

                if ReadStart:
                    voiced_frames.append(audio_data)  # 将读取到的音频数据添加到列表中

                if (ReadStart and ReadCount > MAX_WAV) or (time.time() - StartTime) > 10:
                    StartTime = time.time()
                    ReadCount = 0
                    size = len(voiced_frames)
                    ReadStart = False
                    if size > 11:
                        got_a_sentence = True
                        print("检测到语音结束", len(voiced_frames))
                    else:
                        voiced_frames = []

            stream.stop_stream()
            print("* done recording")
            got_a_sentence = False

            data = b''.join(voiced_frames)
            record_to_file("record.wav", data)
            leave = True

        stream.close()
        # os.system("aplay -D hw:0,0 record.wav")
        wavTotext("record.wav", paraformer)


运行效果如下,只要对着麦克风说话就行,一句话的转换时间在2秒左右:

QQ20241002-123723.jpg


Jetson Nano 部署ChatGLM

友情链接: CSDN激萌の小宅 95知识库 自考题库 罗分明个人网络博客 精益编程leanboot

小宅博客  www.bilibili996.com All Rights Reserved. 备案号: 闽ICP备2024034575号

网站经营许可证  福建省福州市 Copyright©2021-2025 版权所有

小宅博客
首页 智能家居 地图定位
公告:小宅博客网可以开发票了,需要发票的,去群里找群主哈!!

文章作者:激萌の小宅

促销:¥0

价格:¥0

配送方式: 购买后立即生效(如购买异常,请联系站长)
付款之后一定要等待自动跳转结束,否则购买可能会失败
  • 0 天

    有效期

  • 0

    总销量

  • 0

    累计评价

Jetson Nano 语音输入与ASR


声卡模块资料:Jetson Nano声卡使用

硬件连接如下:

Audio-Card-for-Jetson-Nano-5.jpg


说明:

1、采集声道数channels的值必须是双通道,不支持单通道。

2、rapid-paraformer ASR模型下载地址与使用方法:https://pypi.org/project/rapid-paraformer/2.0.4/

QQ20241002-122544.jpg   


 3、魔塔社区ASR模型:speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-onnx

将下载的“model_quant.onnx”模型文件名,改成 rapid_paraformer 支持的“asr_paraformerv2.onnx”名字,并替换到models目录下即可。

QQ20241002-122742.jpg


4、缺点:rapid_paraformer没找到支持热词识别的操作


完整测试代码如下:

import pyaudio
import numpy as np
import wave
import os
import time
from rapid_paraformer import RapidParaformer
from datetime import datetime

FORMAT = pyaudio.paInt16
CHANNELS = 2 # 只支持双通道
RATE = 16000
CHUNK_SIZE = 1024
MAX_WAV = int(RATE / CHUNK_SIZE * 0.5) # 0.5秒超时


# 获取当前时间
def getData():
    now = datetime.now()
    return f"{now.year}-{now.month}-{now.day} {now.hour}:{now.minute}:{now.second}"


# ASR
def wavTotext(path, paraformer):
    print(getData())
    result = paraformer([path])
    print(getData())
    print(result)


# 保存文件
def record_to_file(path, data):
    wf = wave.open(path, 'wb')
    wf.setnchannels(CHANNELS)
    wf.setsampwidth(2)
    wf.setframerate(RATE)
    wf.writeframes(data)
    wf.close()


if __name__ == '__main__':
    config_path = "resources/config.yaml"
    paraformer = RapidParaformer(config_path)
    while True:
        print(f"CHUNK_SIZE:{CHUNK_SIZE}")
        got_a_sentence = False
        leave = False

        pa = pyaudio.PyAudio()
        stream = pa.open(format=FORMAT,
                         channels=CHANNELS,
                         rate=RATE,
                         input=True,
                         start=False,
                         input_device_index=0,
                         frames_per_buffer=CHUNK_SIZE)

        while not leave:
            ReadStart = False  # 标志位,用于表示是否检测到语音
            ReadCount = 0
            voiced_frames = []
            print("* recording: ")
            stream.start_stream()
            StartTime = time.time()

            while not got_a_sentence and not leave:
                chunk = stream.read(CHUNK_SIZE, exception_on_overflow=False)

                # 计算音频能量
                audio_data = np.frombuffer(chunk, dtype=np.int16)
                energy = np.sum(np.abs(audio_data)) / len(audio_data)
                if energy > 200:
                    ReadCount = 0
                    if not ReadStart:
                        print("检测到语音开始")
                        StartTime = time.time()
                        ReadStart = True
                elif ReadStart:
                    ReadCount += 1

                if ReadStart:
                    voiced_frames.append(audio_data)  # 将读取到的音频数据添加到列表中

                if (ReadStart and ReadCount > MAX_WAV) or (time.time() - StartTime) > 10:
                    StartTime = time.time()
                    ReadCount = 0
                    size = len(voiced_frames)
                    ReadStart = False
                    if size > 11:
                        got_a_sentence = True
                        print("检测到语音结束", len(voiced_frames))
                    else:
                        voiced_frames = []

            stream.stop_stream()
            print("* done recording")
            got_a_sentence = False

            data = b''.join(voiced_frames)
            record_to_file("record.wav", data)
            leave = True

        stream.close()
        # os.system("aplay -D hw:0,0 record.wav")
        wavTotext("record.wav", paraformer)


运行效果如下,只要对着麦克风说话就行,一句话的转换时间在2秒左右:

QQ20241002-123723.jpg