paddlespeech asr语音转录文字;sherpa 实时语音转录

news2024/9/21 5:30:39

1、paddlespeech asr语音转录文字

参考:
https://github.com/PaddlePaddle/PaddleSpeech

安装后运行可能会numpy相关报错;可能是python和numpy版本高的问题,我这里最终解决是python 3.10 numpy 1.22.0;

pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
pip install paddlespeech

1)代码

模型默认下载保存位置:C:\Users\loong.paddlespeech\models下

from paddlespeech.cli.asr.infer import ASRExecutor
asr = ASRExecutor()
result = asr(audio_file="zh.wav")  ##第一次运行会首先下载自动模型
print(result)

在这里插入图片描述

2)实时语音转录

参考:https://www.cnblogs.com/chenkui164/p/16296941.html
https://github.com/PaddlePaddle/PaddleSpeech/blob/develop/demos/streaming_asr_server/README.md
https://github.com/PaddlePaddle/PaddleSpeech/tree/develop/demos/streaming_asr_server/web

paddlespeech_server stats --task asr  ##可以擦好看支持的模型,更改模型该yaml文件

在这里插入图片描述

## 首先运行asr服务器
# 开启流式语音识别服务
cd PaddleSpeech/demos/streaming_asr_server
paddlespeech_server start --config_file conf/ws_conformer_wenetspeech_application_faster.yaml

在这里插入图片描述
运行后运行demo里的\demos\streaming_asr_server\web\index.html文件测试:
在这里插入图片描述

pyaudio实时录制声音及保存wav
import pyaudio,wave#导入相关的库
 
#实例化一个pyaudio对象
pa=pyaudio.PyAudio()
 
#设置声卡参数
chunk=1024#帧长度
Format=pyaudio.paInt16#采样深度
CHANNELS=2#声道
RATE=16000#采样率
record_seconds=5#设置录制时间
#RATE/chunk*record_seconds为一秒采样数除以一帧长度和录制秒数可以得到帧数
 
#新建一个列表,用来存储数据
record_list=[]
 
#打开声卡,设置参数,设置音频流
stream=pa.open(format=Format,rate=RATE,channels=CHANNELS,frames_per_buffer=chunk,input=True)
 
#开始录制
print('开始录制...')
 
#进行录制与采样
for i in range(0,int(RATE/chunk*record_seconds)):
    data=stream.read(chunk)#为每一帧的样本二进制数据
    record_list.append(data)#得到的是保存的二进制数据
 
#录制完成
stream.stop_stream()#停止调用声卡
stream.close()#关闭声卡
pa.terminate()#结束pyaudio对象
print('录制结束...')
 
#保存音频文件(wav文件类型)
file=wave.open('voice.wav','wb')#创建voice文件
file.setnchannels(CHANNELS)#设置声道数
file.setsampwidth(pa.get_sample_size(Format))#设置采样宽度,通过pa.get_sample_size(format)可以得到
file.setframerate(RATE)#设置采样率
file.writeframes(b''.join(record_list))#将二进制文件加入到wav文件之中
file.close()

2、sherpa 实时语音转录

参考:https://github.com/k2-fsa/sherpa-ncnn
https://www.bilibili.com/video/BV1K44y197Fg

安装:

pip install sherpa-ncnn   sounddevice  -i https://mirror.baidu.com/pypi/simple

下载:
1)下载项目:git clone https://github.com/k2-fsa/sherpa-ncnn.git
在这里插入图片描述
2)下载模型
https://huggingface.co/marcoyang/sherpa-ncnn-streaming-zipformer-zh-14M-2023-02-23
下载这7个文件
在这里插入图片描述

运行:
https://k2-fsa.github.io/sherpa/ncnn/python/index.html#start-recording

#!/usr/bin/env python3

# Real-time speech recognition from a microphone with sherpa-ncnn Python API
#
# Please refer to
# https://k2-fsa.github.io/sherpa/ncnn/pretrained_models/index.html
# to download pre-trained models

import sys

try:
    import sounddevice as sd
except ImportError as e:
    print("Please install sounddevice first. You can use")
    print()
    print("  pip install sounddevice")
    print()
    print("to install it")
    sys.exit(-1)

import sherpa_ncnn


def create_recognizer():
    # Please replace the model files if needed.
    # See https://k2-fsa.github.io/sherpa/ncnn/pretrained_models/index.html
    # for download links.
    recognizer = sherpa_ncnn.Recognizer(
        tokens="./sherpa-ncnn-conv-emformer-transducer-2022-12-06/tokens.txt",
        encoder_param="./sherpa-ncnn-conv-emformer-transducer-2022-12-06/encoder_jit_trace-pnnx.ncnn.param",
        encoder_bin="./sherpa-ncnn-conv-emformer-transducer-2022-12-06/encoder_jit_trace-pnnx.ncnn.bin",
        decoder_param="./sherpa-ncnn-conv-emformer-transducer-2022-12-06/decoder_jit_trace-pnnx.ncnn.param",
        decoder_bin="./sherpa-ncnn-conv-emformer-transducer-2022-12-06/decoder_jit_trace-pnnx.ncnn.bin",
        joiner_param="./sherpa-ncnn-conv-emformer-transducer-2022-12-06/joiner_jit_trace-pnnx.ncnn.param",
        joiner_bin="./sherpa-ncnn-conv-emformer-transducer-2022-12-06/joiner_jit_trace-pnnx.ncnn.bin",
        num_threads=4,
    )
    return recognizer


def main():
    print("Started! Please speak")
    recognizer = create_recognizer()
    sample_rate = recognizer.sample_rate
    samples_per_read = int(0.1 * sample_rate)  # 0.1 second = 100 ms
    last_result = ""
    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
                print("\r{}".format(result), end="", flush=True)


if __name__ == "__main__":
    devices = sd.query_devices()
    print(devices)
    default_input_device_idx = sd.default.device[0]
    print(f'Use default device: {devices[default_input_device_idx]["name"]}')

    try:
        main()
    except KeyboardInterrupt:
        print("\nCaught Ctrl + C. Exiting")

在这里插入图片描述

**修改结果打印效果,去除重复打印结果,结果每次只打印新增的,避免上面每次都打印一遍之前已经识别的内容

if last_result != result:
                if i==0:
                    print("{}".format(result),end='')
                    last_result = result
                    i=i+1
                else:
                    last_result_len=len(last_result)
                    
                    new_word = result[last_result_len:]
                    # print(last_result,result,new_word)
                    print("{}".format(new_word),end='', flush=True)
                    last_result = result

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/659725.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蔚来测试总监,让我们用这份《测试用例规范》,再也没加班过

经常看到无论是刚入职场的新人,还是工作了一段时间的老人,都会对编写测试用例感到困扰?例如: 固然,编写一份好的测试用例需要:充分的需求分析能力 理论及经验加持,作为测试职场摸爬打滚的老人&…

【计网】第二章 物理层

文章目录 物理层一、物理层的基本概念二、数据通信的基础知识2.1 数据通信系统的模型2.2 有关信道的基本概念2.3 信道的极限容量2.3.1 奈奎斯特定理2.3.1 香农定理2.3.2 信噪比 三、物理层下面的传输媒体3.1 导引型传输媒体3.2 非导引型传输媒体 四、信道复用技术4.1 频分复用 …

基于RGBD和惯性输入的实时室内场景重建

来源:投稿 作者:小灰灰 编辑:学姐 论文标题:《REAL-TIME INDOOR SCENE RECONSTRUCTION WITH RGBD AND INERTIA INPUT》 论文链接:https://arxiv.org/pdf/2008.00490.pdf 代码链接:https://github.com/CWa…

Spark01-Spark快速上手、运行模式、运行框架、核心概念

1 概述 Spark和Hadoop Hadoop HDFS(GFS:TheGoogleFileSystem)MapReduce总结:性能横向扩展变得容易,横向拓展:增加更多的计算节点来扩展系统的处理能力Hbase:分布式数据库 Spark Spark CoreSpark SQLSQL 方言(HQL)Spark Streamin…

玩转注册表,这几个windowsAPI函数就够了

注册表的结构 注册表是一个数据库,它的结构同逻辑磁盘类似。注册表包含键(Key),它类似磁盘中的目录,注册表还包含键值(Value),它类似磁盘中的文件。一个键可以包含多个子健和键值,其中键值用于存储数据,顶…

陌陌聊天数据分析 (一)

陌陌聊天数据分析(一) 目标 基于Hadoop和Hive实现聊天数据统计分析,构建聊天数据分析报表 需求 统计今日总消息量统计今日每小时消息量,发送和接收用户数量统计今日各地区发送消息数据量统计今日发送消息和接收消息用户数统计…

vue移动端手把手教你封装一个可移动悬浮窗、可移动打开扇形悬浮按钮组件

目录 概要 功能设计 技术细节-API回顾 touchstart 事件 touchmove事件 完整的代码实现(悬浮窗) 运行效果 进阶封装——可移动扇形展开悬浮按钮 实现效果演示 需求分析 代码实现 概要 悬浮窗、悬浮按钮是项目中常见的一种交互设计,特别是在移…

Linux国产操作系统,UCA-系统工程师学习必备技能,文件管理和查找、内容查找、归档的再学习

复习和巩固Linux的基础操作,对文件管理和查找、内容查找、归档以及管道和输入输出重定向进行再学习。 目录 1.文件管理 1. 1.head命令 1.2. tail命令 1.3. more/less命令 1.4. wc 统计命令 1.5. sort 排序命令 1.6. uniq 去重命令 1.7. paste合并命令 2.文…

基于matlab对现代相控阵系统中常用的子阵列进行建模分析(附源码)

一、前言 本示例说明如何使用相控阵系统工具箱对现代相控阵系统中常用的子阵列进行建模并进行分析。 相控阵天线与传统碟形天线相比具有许多优势。相控阵天线的元件更容易制造;整个系统受组件故障的影响较小;最重要的是,可以向不同方向进行电子扫描。 但是&#xff…

耗时半个月,终于把十几个大厂的python面试题整理成了PDF合集(基础+高级+web+数据库+爬虫)

大家好,最近有不少小伙伴在后台留言,近期的面试越来越难了,要背的越来越多了,考察得越来越细,明摆着就是想让我们徒手造航母嘛!实在是太为难我们这些程序员了。 这不,为了帮大家节约时间&#…

JVM垃圾回收与双亲委派模型

观前提示:本篇博客演示使用的 IDEA 版本为2021.3.3版本,使用的是Java8(又名jdk1.8) 前端使用VSCode(Visual Studio Code1.78.2) 电脑使用的操作系统版本为 Windows 10 目录 1. 什么是 JVM 2. jvm 发展史 2.1 Sun Classic VM 2.2 Exact VM 2.3 HotSpot VM 2.4 JRockit …

Docker部署——将jar包打成docker镜像并启动容器

在代码编写完成即将部署的时候,如果采用docker容器的方法,需要将jar包打成docker镜像并通过镜像将容器启动起来。具体的步骤如下。 一、首先下载java镜像 先使用docker search java命令进行搜索。 然而在拉取镜像的时候要注意不能直接去选择pull java ,…

在线DDL操作踩坑记录

官方地址:GitHub - github/gh-ost: GitHubs Online Schema-migration Tool for MySQL 使用ghost方式在线对mysql表进行ddl ghost原理: 要对表A进行DDL,在主库建立一个ghost表 A1在表A1上进行alter操作伪装成一个mysql的从库,监…

Java集合框架:队列、Queue和Deque详解

目录 一、普通队列 1. 概念 2. Queue(Java集合框架的接口) 3. Queue中的方法 4. 方法使用演示 5. 队列的模拟实现 6. 顺序普通队列的缺点: 二、循环队列 1. 循环队列也是一种数据结构。基于上述队列的缺点,此时就有了循环…

为什么我不建议你入行网络安全,因为99.9%的人都绕不过这三个坎

前言 我一个朋友老赵,老赵在一家大型互联网公司做高级网络安全工程师,从实习生到工程师整整呆了六年。去年他们公司为了缩减成本,做了裁员,他也在其中,取而代之的是一个只有三年工作经验的 “新人” … 老赵想着&…

Windows10下安装Oracle19c提示“无法将 **\** 安装用户添加到 ** 组“解决办法

问题描述 操作系统:window10 数据库版本:Oracle19c 本机在安装Oracle19c提示无法将 ZHOUQUAN\zhouquan 安装用户添加到 %2% 组。 问题原因 根据安装的对话框中的日志,找到并打开 日志报错信息: 信息: WindowsSecurityExcep…

时序预测 | Matlab实现INFO-ELM向量加权算法优化极限学习机时间序列预测

时序预测 | Matlab实现INFO-ELM向量加权算法优化极限学习机时间序列预测 目录 时序预测 | Matlab实现INFO-ELM向量加权算法优化极限学习机时间序列预测效果一览基本介绍程序设计学习总结参考资料 效果一览 基本介绍 Matlab实现INFO-ELM向量加权算法优化极限学习机时间序列预测 …

skywalking 源码

源码核心是SkyWalkingAgent 找到一堆插件,来对符合条件的类来代理 通过AbstractClassEnhancePluginDefine.define方法来。 如果有很多版本的插件,spring有2.0版本,3.0版本,4.0版。 具体使用哪个版本,看被增加的类使用的是哪个版本的spring …

vue基础--计算商品的总价格

计算商品的总价格: 1、在 父组件中 通过计算属性 动态把总价格计算出来, 2、通过 父向子传值,通过自定义属性,把值传给 子组件 父组件: 1、使用计算属性computed 计算总价格: 1.1、先用filter 过滤出 数…

Unity UGUI5——图集

一、Drawcall ​ 字面理解 DrawCall,就是绘制呼叫的意思,表示 CPU(中央处理器)通知 GPU(图形处理器-显卡) (一)DrawCall 概念 就是 CPU (处理器)准备好渲染…