• C#使用whisper.net实现语音识别(语音转文本)


    目录

    介绍

    效果

    输出信息 

    项目

    代码

    下载 


    介绍

    github地址:https://github.com/sandrohanea/whisper.net

    Whisper.net. Speech to text made simple using Whisper Models

    模型下载地址:https://huggingface.co/sandrohanea/whisper.net/tree/main/classic

    效果

    输出信息 

    whisper_init_from_file_no_state: loading model from 'ggml-small.bin'
    whisper_model_load: loading model
    whisper_model_load: n_vocab       = 51865
    whisper_model_load: n_audio_ctx   = 1500
    whisper_model_load: n_audio_state = 768
    whisper_model_load: n_audio_head  = 12
    whisper_model_load: n_audio_layer = 12
    whisper_model_load: n_text_ctx    = 448
    whisper_model_load: n_text_state  = 768
    whisper_model_load: n_text_head   = 12
    whisper_model_load: n_text_layer  = 12
    whisper_model_load: n_mels        = 80
    whisper_model_load: ftype         = 1
    whisper_model_load: qntvr         = 0
    whisper_model_load: type          = 3
    whisper_model_load: mem required  =  743.00 MB (+   16.00 MB per decoder)
    whisper_model_load: adding 1608 extra tokens
    whisper_model_load: model ctx     =  464.68 MB
    whisper_model_load: model size    =  464.44 MB
    whisper_init_state: kv self size  =   15.75 MB
    whisper_init_state: kv cross size =   52.73 MB
    00:00:00->00:00:20: 皇鶴楼,崔昊,西人已成皇鶴去,此地空于皇鶴楼,皇鶴一去不复返,白云千载空悠悠。
    00:00:20->00:00:39: 青川莉莉汉阳树,方草七七英五周,日暮相关何处事,燕泊江上世人愁。

    项目

    代码

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using Whisper.net;
    using static System.Net.Mime.MediaTypeNames;

    namespace C_使用whisper.net实现语音转文本
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            string fileFilter = "*.wav|*.wav";
            string wavFileName = "";
            WhisperFactory whisperFactory;
            WhisperProcessor processor;
            private async void button2_Click(object sender, EventArgs e)
            {
                if (wavFileName == "")
                {
                    return;
                }

                try
                {
                    button2.Enabled = false;
                    using var fileStream = File.OpenRead(wavFileName);
                    await foreach (var result in processor.ProcessAsync(fileStream))
                    {
                        Console.WriteLine($"{result.Start}->{result.End}: {result.Text}\r\n");
                        txtResult.Text += $"{result.Start}->{result.End}: {result.Text}\r\n";
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    button2.Enabled = true;
                }

            }

            private void Form1_Load(object sender, EventArgs e)
            {
                whisperFactory = WhisperFactory.FromPath("ggml-small.bin");

                processor = whisperFactory.CreateBuilder()
                   .WithLanguage("zh")//.WithLanguage("auto")
                   .Build();

                wavFileName = "085黄鹤楼.wav";
                txtFileName.Text = wavFileName;
            }

            private void button1_Click(object sender, EventArgs e)
            {
                OpenFileDialog ofd = new OpenFileDialog();
                ofd.Filter = fileFilter;
                if (ofd.ShowDialog() != DialogResult.OK) return;

                txtResult.Text = "";

                wavFileName = ofd.FileName;
                txtFileName.Text = wavFileName;
            }
        }
    }

    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.IO;
    7. using System.Linq;
    8. using System.Text;
    9. using System.Threading.Tasks;
    10. using System.Windows.Forms;
    11. using Whisper.net;
    12. using static System.Net.Mime.MediaTypeNames;
    13. namespace C_使用whisper.net实现语音转文本
    14. {
    15. public partial class Form1 : Form
    16. {
    17. public Form1()
    18. {
    19. InitializeComponent();
    20. }
    21. string fileFilter = "*.wav|*.wav";
    22. string wavFileName = "";
    23. WhisperFactory whisperFactory;
    24. WhisperProcessor processor;
    25. private async void button2_Click(object sender, EventArgs e)
    26. {
    27. if (wavFileName == "")
    28. {
    29. return;
    30. }
    31. try
    32. {
    33. button2.Enabled = false;
    34. using var fileStream = File.OpenRead(wavFileName);
    35. await foreach (var result in processor.ProcessAsync(fileStream))
    36. {
    37. Console.WriteLine($"{result.Start}->{result.End}: {result.Text}\r\n");
    38. txtResult.Text += $"{result.Start}->{result.End}: {result.Text}\r\n";
    39. }
    40. }
    41. catch (Exception ex)
    42. {
    43. MessageBox.Show(ex.Message);
    44. }
    45. finally
    46. {
    47. button2.Enabled = true;
    48. }
    49. }
    50. private void Form1_Load(object sender, EventArgs e)
    51. {
    52. whisperFactory = WhisperFactory.FromPath("ggml-small.bin");
    53. processor = whisperFactory.CreateBuilder()
    54. .WithLanguage("zh")//.WithLanguage("auto")
    55. .Build();
    56. wavFileName = "085黄鹤楼.wav";
    57. txtFileName.Text = wavFileName;
    58. }
    59. private void button1_Click(object sender, EventArgs e)
    60. {
    61. OpenFileDialog ofd = new OpenFileDialog();
    62. ofd.Filter = fileFilter;
    63. if (ofd.ShowDialog() != DialogResult.OK) return;
    64. txtResult.Text = "";
    65. wavFileName = ofd.FileName;
    66. txtFileName.Text = wavFileName;
    67. }
    68. }
    69. }

    下载 

    源码下载

  • 相关阅读:
    抖音实战~关注博主
    01 顺序表
    解决vue3 setup语法糖获取不到子组件的 ref
    keil调试工具(调试技术)
    winform 自定义 标签
    11.18 - 每日一题 - 408
    温湿度计传感器DHT11控制数码管显示verilog代码及视频
    使用vlc获取海康威视视频流
    (附源码)php新闻发布平台 毕业设计 141646
    采用 guidance 提高大模型输出的可靠性和稳定性
  • 原文地址:https://blog.csdn.net/lw112190/article/details/134557417