首页 > 编程语言 >C#利用Vosk开源模型语音识别

C#利用Vosk开源模型语音识别

时间:2024-10-09 15:13:51浏览次数:11  
标签:C# rec System waveIn Windows 开源 Vosk new using

#C#利用Vosk开源模型语音识别

#by wgscd

模型下载:VOSK Models (alphacephei.com) 找到chinese 

Chinese        
vosk-model-small-cn-0.22 42M 23.54 (SpeechIO-02) 38.29 (SpeechIO-06) 17.15 (THCHS) Lightweight model for Android and RPi Apache 2.0
vosk-model-cn-0.22 1.3G 13.98 (SpeechIO-02) 27.30 (SpeechIO-06) 7.43 (THCHS)

测试效果用麦克风+大模型(不是small模型包)还是挺不错,

如果识别系统电脑声音(系统音频卡输出语音,我们使用外部输入语音)就基本是无法准确识别!可惜!

using NAudio.Wave;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Vosk;

namespace DYLive
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();

        }

        private Model model; //= new Model("modelcn");//程序根目录下  //   modelsmall-cn-0.22 小模型
        private WasapiLoopbackCapture waveIn;//WasapiLoopbackCapture 系统音频卡输出语音,我们使用外部输入语音
        //new WaveIn() 如果是录制麦克风用WaveIn
        private VoskRecognizer rec;
         
        private void InitRec()
        {
            waveIn = new WasapiLoopbackCapture(); //new WaveIn()、如果是录制麦克风用WaveIn
            waveIn.WaveFormat = new WaveFormat(16000, 16, 1);//44100 采样率16K就可以,太高会导致识别率下降,百度也使用16K
            waveIn.DataAvailable += WaveIn_DataAvailable;
            rec = new VoskRecognizer(model, waveIn.WaveFormat.SampleRate);//加载模型
            rec.SetMaxAlternatives(0);//设置备选项
            rec.SetWords(false);//设置是否显示时间
        }

        private void btnStart_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if (waveIn != null)
                {
                    waveIn.StartRecording();
                }
                else
                {
                    InitRec();
                }
            }
            catch
            {
            }
        }

        string result = ""; 
        private void WaveIn_DataAvailable(object sender, WaveInEventArgs e)
        {
            //int recLen = e.BytesRecorded;
            //byte[] data = new byte[recLen];
            //Array.Copy(e.Buffer, data, recLen);
            if (rec.AcceptWaveform(e.Buffer, e.BytesRecorded))
            {
                result = rec.Result()+ rec.PartialResult();
                if (result.Trim() != "")
                {
                    Debug.Print(result);
                    Dispatcher.Invoke(() => { txt.Text = result; });
                }
            }
            else
            {
                //Console.WriteLine(rec.FinalResult());//不要片段去分析,不然因为语义太少分析不出来
                //Console.WriteLine("---------");
              //  Debug.Print(rec.PartialResult());
                Dispatcher.Invoke(() => { Title = rec.PartialResult();  });
                
            }
        }

        private void btnStop_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if (waveIn != null)
                {
                    waveIn.StopRecording();
                }
            }
            catch
            {
            }
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            App.CloseSlashWindow();
            model= new Model("modelcn");//程序根目录下 new Model("modelsmall-cn-0.22");//程序根目录下
           // model =  new Model("modelsmall-cn-0.22");//程序根目录下
            InitRec();
        }


    }
}

  

标签:C#,rec,System,waveIn,Windows,开源,Vosk,new,using
From: https://www.cnblogs.com/wgscd/p/18454232

相关文章

  • C# 类型增加自定义xml序列化
    1、首先类需要增加[Serializable]标识2、类实现IXmlSerializable接口下面是重写ReadXml和WriteXml方法publicvoidReadXml(XmlReaderreader){reader.ReadStartElement(reader.LocalName);while(reader.Read()){if(reader.Name=="TimeType"&&......
  • centos7安装Hyperf运行环境
    本次环境安装选择基于Swoole驱动的版本一.安装php8.21.yum没有高版本的php,使用remi安装php安装EPEL仓库sudoyuminstallepel-release2.安装Remi仓库并启用php8.2的仓库sudoyuminstallhttps://rpms.remirepo.net/enterprise/remi-release......
  • 【javascript 编程】Web前端之JavaScript动态添加类名的两种方法、区别、className、c
    通过className来添加或删除类名添加类名获取元素el.className="类名1类名2...";多个类名用空格隔开。移除类名获取元素名el.className="";直接等于一个空字符串即可删除类名。通过classList来添加或删除类名添加一个类名获取元素名el.classList.add("类名");。......
  • [Javascript] Using Proxy to observe the object
    constobj={a:1,b:2,c:{d:1,e:2,},};functionisObject(val){returnval!==null&&typeofval==="object";}functionobserve(obj){constproxy=newProxy(obj,{get(target,key){constv......
  • dockerfile中volume的用法
    当您使用VOLUME指令指定一个目录时,Docker会为该目录创建一个数据卷。这个卷可以在容器停止或删除后仍然存在DockerfileFROMubuntu:latest#创建一个数据卷VOLUME["/data"]CMD["sleep","3600"]构建镜像,并运行容器dockerbuild-tubuntu:test1.dockerrun-itd......
  • pgadmin4敏感信息泄露 CVE-2024-9014
    0x01产品描述:        pgAdmin是全球最先进的开源数据库Postgres的领先开源管理工具。 pgAdmin4旨在满足新手和经验丰富的Postgres用户的需求,提供了强大的图形界面,可简化数据库对象的创建,维护和使用。其可以在Linux,Unix,macOS和Windows上使用,以管理PostgreSQL和EDBA......
  • 停止训练后报错torch.cuda.OutOfMemoryError: CUDA out of memory. 及查看进程和停止
    停止训练后遇到 torch.cuda.OutOfMemoryError 错误,意味着你的GPU内存不足,无法分配更多内存给当前的PyTorch操作。查看进程并关闭相关进程就可恢复。在不同的操作系统中,查看进程的方法有所不同。以下是常见操作系统的命令:在Linux和macOS系统中,你可以使用以下几种方法来......
  • ARC061F
    模拟赛题。首先考虑答案是什么。设三个人手里的分别为\(n_1,n_2,n_3\)。\(n_1\)是一定要取完的,\(n_2,n_3\)是一定取不完的,最暴力的思路就是枚举\(n_2\),\(n_3\)各取了几个,得到答案是\(\sum_{i=0}^{n_2-1}\sum_{j=0}^{n_3-1}3^{n_2+n_3-i-j}\binom{i+j+n_1-1}{i,j,n_1-1......
  • MCU的最佳存储方案CS创世 SD NAND
        大家都知道MCU是一种"麻雀"虽小,却"五脏俱全"的主控。它的应用领域非常广泛,小到手机手表,大到航空航天的设备上都会用到MCU.市面上目前几个主流厂商有意法半导体(其中最经典的一款就是STM32系列)、TI、NXP、Microchip、瑞萨等等。       那关于MCU的存储方面,......
  • 调用sdapi/v1/txt2img接口,报错“Couldn‘t load custom C++ ops”
    后端启动stable_diffusion的api接口nohuppythonlaunch.py --use-cpuall--skip-torch-cuda-test   --api--api-log  --listen--server-name192.168.1.204>/home/third_party_app/llm/stable-diffusion-webui/logs/all.log2>&1 &服务接口http://192.168......