首页 > 其他分享 >构建一个语音转文字的WebApi服务

构建一个语音转文字的WebApi服务

时间:2023-12-07 14:57:50浏览次数:45  
标签:WebApi WhisperService Whisper builder 构建 语音 var

构建一个语音转文字的WebApi服务

简介

由于业务需要,我们需要提供一个语音输入功能,以便更方便用户的使用,所以我们需要提供语音转文本的功能,下面我们将讲解使用Whisper将语音转换文本,并且封装成WebApi提供web服务给前端调用。

创建项目

  1. 第一步打开Vscode,选择一个目录作为工作空间,然后打开控制台,输入以下指令创建一个WebApi的项目:
dotnet new webapi -n Whisper --no-openapi=true
  1. 添加依赖包的引用:
    1. Whisper.netWhisper.cpp的.NET封装
    2. Whisper.net.Runtime.Clblast则是使用GPU的包,当然也可以不使用GPU
<PackageReference Include="Whisper.net" Version="1.5.0" />
<PackageReference Include="Whisper.net.Runtime.Clblast" Version="1.5.0" />
  1. 下载一个模型:https://huggingface.co/ggerganov/whisper.cpp/tree/main ,找到ggml-base-q5_1.bin下载,请注意的是带en的是只识别英文的。其他的是全语言。

  2. 下载一个语音示例文件 https://github.com/sandrohanea/whisper.net/blob/main/examples/TestData/kennedy.wav


    <ItemGroup>
      <None Update="ggml-base-q5_1.bin">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </None>
      <None Update="kennedy.wav">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </None>
    </ItemGroup>

实现基本使用案例

将俩个文件复制到部署目录

创建WhisperService.cs并且读取音频文件然后返回识别结果

public class WhisperService
{
    /// <summary>
    /// 音频转文字
    /// </summary>
    /// <param name="processor">注入的对象</param>
    /// <returns></returns>
    public static async Task<string> SpeechRecognitionAsync(WhisperProcessor processor)
    {
        var sw = Stopwatch.StartNew();
        var wavFileName = "kennedy.wav";
        await using var fileStream = File.OpenRead(wavFileName);

        var str = string.Empty;
        await foreach (var result in processor.ProcessAsync(fileStream))
        {
            Console.WriteLine($"{result.Start}->{result.End}: {result.Text}");
            str += result.Text;
        }
        sw.Stop();
        Console.WriteLine($"翻译耗时:{sw.ElapsedMilliseconds}ms 翻译结果:{str} 文件大小:{fileStream.Length}");
        return str;
    }

}

修改Program.cs

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

// 注册单例的WhisperFactory,并且使用ggml-base-q5_1.bin模型
builder.Services.AddSingleton<WhisperFactory>((services) => WhisperFactory.FromPath("ggml-base-q5_1.bin"));
builder.Services.AddSingleton((services)=>
{
    // 从构建的服务中获取WhisperFactory
    var whisperFactory = services.GetRequiredService<WhisperFactory>();
    return whisperFactory.CreateBuilder()
        .WithLanguage("auto") // 自动识别语言
        .Build();
});

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

// 使用MiniApis构建一个简单的API,使用WhisperService.SpeechRecognitionAsync方法
app.MapGet("/whisper/speech-recognition", WhisperService.SpeechRecognitionAsync)
    .WithName("whisper")
    .WithOpenApi()
    .WithDescription("识别语音文件");

await app.RunAsync();

服务构建完成,下面运行体验效果:

在控制台输入:

cd .\Whisper\
dotent run
  • 显卡:1050Ti

  • 耗时:2275ms

  • 显卡:4080

  • 耗时:800ms

总结:

在本次会议中,讨论了构建一个语音转文字的WebApi服务的流程和步骤。主要内容包括创建项目、添加依赖包的引用、下载模型和语音示例文件、实现基本使用案例以及服务构建完成后的运行体验。
行动项目:
1. 下载并添加依赖包Whisper.netWhisper.net.Runtime.Clblast
2. 下载模型ggml-base-q5_1.bin和语音示例文件kennedy.wav,并将其复制到部署目录。
3. 创建WhisperService.cs,实现音频转文字的功能。
4. 修改Program.cs,注册WhisperFactory并构建API,使用WhisperService.SpeechRecognitionAsync方法。
5. 运行服务,测试效果。

分享

技术交流群:737776595

标签:WebApi,WhisperService,Whisper,builder,构建,语音,var
From: https://www.cnblogs.com/hejiale010426/p/17881978.html

相关文章

  • 大模型词表构建
    1.引言在文本输入embedding层之前,以中文文本为例,首先对文本进行分词并进行one-hot编码,分词肯定是根据词表来进行分词,那构建一个合适的词表就显得至关重要,过大或者过小都会对后续模型的训练效果产生影响。所以这里介绍当前各个大模型的词表构建方法。2.技术基础在介绍具体的词......
  • 构建一个语音转文字的WebApi服务
    构建一个语音转文字的WebApi服务简介由于业务需要,我们需要提供一个语音输入功能,以便更方便用户的使用,所以我们需要提供语音转文本的功能,下面我们将讲解使用Whisper将语音转换文本,并且封装成WebApi提供web服务给前端调用。创建项目第一步打开Vscode,选择一个目录作为工作空间,然......
  • 短视频购物系统源码:构建创新购物体验的技术深度解析
    短视频购物系统作为电商领域的新宠,其背后的源码实现是其成功的关键。本文将深入探讨短视频购物系统的核心技术和源码设计,以揭示其如何构建创新购物体验的技术奥秘。1.技术架构与框架选择短视频购物系统的源码首先考虑的是其技术架构。常见的选择包括前端框架(如React、Vue.js)和后端......
  • 构建第一个事件驱动型 Serverless 应用
    我认为,无服务器技术真的有助于最大限度节省应用开发和部署的时间,并且无服务器技术用可控的成本,实现了我的那些有趣的想法。在我20多年IT从业经历中,一直专注于IT基础架构的设计和搭建,并没有很多编程的经验。入职亚马逊云科技之后,我成为一名开发者布道师,为了了解和传播亚马逊......
  • 金蝶云星空使用webapi查询单据附件的主键
    业务需求:查询采购价目表的附件 详细操作 一、查询单据附件查看账套单据附件 查询采购价目表的单据内码和单据体内码SELECTa.FNUMBER,a.FID,b.FENTRYID,b.FSEQFROMt_PUR_PriceListaLEFTJOINt_PUR_PriceListEntrybONa.FID=b.FIDWHEREa.FNUMBER='CGJM......
  • 【自己搭建一个:端到端的语音+大模型聊天机器人】
    概要发篇文章记录一下最近搞的语音+大模型聊天机器人的搭建过程,供交流学习。有正反馈的话会继续优化。整体架构流程注意:借传统的基于RASA的对话机器人的图一用,本博会把NLU(NaturalLanguageUnderstanding)和DialogueManagement这两个组件,用大模型来替代。组件及模型说明:用......
  • 三维模型的顶层合并构建的优势方面浅析
    三维模型的顶层合并构建的优势方面浅析 倾斜摄影超大场景的三维模型的顶层合并具有许多优势,本文将对其进行浅析。一、全面的信息获取倾斜摄影超大场景的三维模型的顶层合并能够从不同视角和角度获取全面的信息。通过倾斜摄影技术,可以在一个扫描过程中获得大范围的地理数据,并......
  • 构建业务剧本,客户旅程编排赋能金融机构业绩提升
    “拥有技术之后,如何稳定地打磨产品竞争力?”围绕这个问题,中国用户体验联盟副秘书长、时光创新咨询合伙人罗浩进行了分享。他表示,从2007年前后,他就被“体验管理”所影响,并进行了深度探索。本文根据其分享内容整理。一、金融业需要剧本化客户旅程编排(CustomerJourneyOrchestration......
  • springboot~构建webjars类型的前端jar包
    webjars类型的前端jar包我们可以将公用的js,css,html,vue,shtml打包成一个jar,然后在其他项目中引用,这样就不用每个项目都去引用一遍了,这样就可以实现前端的公用了。1.创建一个maven项目,添加依赖和插件<dependencies><!--依赖webjars-locator-core--><dep......
  • 自己动手,从源码构建Aseprite!
    最近想试试这个很有名的像素画软件Aseprite,但是又囊中羞涩,没有钱去买Steam版。不过不要紧,Aseprite是开源软件,并且它的源文件是不需要花钱购买的。本着先上车再补票的原则,这篇文章就来尝试一下从源文件构建这个软件。构建的过程在官方的Github仓库里面描述得比较清楚了,本文记录一......