• C# 10分钟完成百度语音技术(语音识别与合成)——入门篇


    我们已经讲了人脸识别(入门+进阶)、图片识别(入门)。下面是链接:

    C# 10分钟完成百度人脸识别——入门篇

    C# 30分钟完成百度人脸识别——进阶篇(文末附源码)

    C# 10分钟完成百度图片提取文字(文字识别)——入门篇

    今天我们来盘一盘语音识别与合成。

    PS:仅供了解参考,如需进一步了解请继续研究。

    我们现在就基于百度Ai开放平台进行语音技术的相关操作,demo使用的是C#控制台应用程序。

    前面的套路还是一样的:


    1. 注册百度账号api,创建自己的应用;
    2. 创建vs控制台应用程序,引入动态链接库;
    3. 编写代码调试,效果图查看;
      • 语音识别
      • 语音合成
      • 实时语音识别
      • 音频文件转写
      • 语音模型训练
    1. 总结。

    1、创建百度AI语音技术应用

      在百度AI开放平台中,登录自己的百度账号,点击“语音识别”服务,选择“创建应用”,填好应用名称,选择应用类型,填好应用描述,这样就创建好了“语音识别”服务。

    具体不废话,不知道的小伙伴可以移步看这里:C# 10分钟完成百度人脸识别——入门篇

    创建完成后会生成APPID、APP Key、Secret Key,这些是关键内容,后面要用。

    2、创建VS控制台应用程序,引入动态链接库

    首先我们创建一个VS控制台应用程序,这里就不详细说明。

    然后引入百度Baidu.AI动态链接库,步骤如下,小编使用2017,所以直接在NuGet中搜索Baidu.AI安装即可。

    安装语音识别 C# SDK

    C# SDK 现已开源! https://github.com/Baidu-AIP/dotnet-sdk

    ** 支持平台:.Net Framework 3.5 4.0 4.5, .Net Core 2.0 **

    方法一:使用Nuget管理依赖 (推荐)

    在NuGet中搜索 Baidu.AI,安装最新版即可。

    packet地址 https://www.nuget.org/packages/Baidu.AI/

    方法二:下载安装

    语音识别 C# SDK目录结构

    Baidu.Aip
        ├── net35
        │   ├── AipSdk.dll             // 百度AI服务 windows 动态库
        │   ├── AipSdk.xml             // 注释文件
        │   └── Newtonsoft.Json.dll    // 第三方依赖
        ├── net40
        ├── net45
        └── netstandard2.0
            ├── AipSdk.deps.json
            └── AipSdk.dll
    

    如果需要在 Unity 平台使用,可引用工程源码自行编译。

    安装

    1.在官方网站下载C# SDK压缩工具包。

    2.解压后,将 AipSdk.dll 和 Newtonsoft.Json.dll 中添加为引用。


    3、编写代码调试,效果图查看

      创建一个空文件夹,命名为Image,存一个音频文件,做调试,后面语音合成的文件也在这里。

    在Program.cs中编写代码,代码编写如下,可以直接拷贝进行调试。

    我们这里只讲述语音识别和语音合成,其他的内容可以在官网进行编写:https://ai.baidu.com/docs#/ASR-Online-Csharp-SDK/top

    语音识别:

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Voice
    {
        class Program
        {
            static void Main(string[] args)
            {
                // 设置APPID/AK/SK
                var APP_ID = "16938141";
                var API_KEY = "8y2pB5HLrLD5Zu7aaQV3ce0g";
                var SECRET_KEY = "5tDp3opvpIdEnlXBTOWn9W0O7CdhRNYu";
    
                //语音识别
                var client = new Baidu.Aip.Speech.Asr(APP_ID, API_KEY, SECRET_KEY);
                client.Timeout = 60000;  // 修改超时时间
                var data = File.ReadAllBytes("E:\Work Demo\语音技术\Voice\Voice\Image\16k.wav");
                // 可选参数
                var options = new Dictionary<string, object>
                 {
                    {"dev_pid", 1536}  //语音模型1536代表普通话,其他请查看官方文档
                 };
                client.Timeout = 120000; // 若语音较长,建议设置更大的超时时间. ms
                var result = client.Recognize(data, "wav", 16000, options);
                Console.Write(result);
    
    
                ////语音合成
                //var _ttsClient = new Baidu.Aip.Speech.Tts(API_KEY, SECRET_KEY);
                //_ttsClient.Timeout = 60000;  // 修改超时时间
                //// 可选参数
                //var option = new Dictionary<string, object>()
                //            {
                //                {"spd", 5}, // 语速
                //                {"vol", 7}, // 音量
                //                {"per", 4}  // 发音人,4:情感度丫丫童声
                //            };
                //var result = _ttsClient.Synthesis("今天天气不错,适合嗮太阳", option);
                //if (result.ErrorCode == 0)  // 或 result.Success
                //{
                //    File.WriteAllBytes("E:\Work Demo\语音技术\Voice\Voice\Image\aaa.mp3", result.Data);
                //}
            }
        }
    }

    我们查看一下识别出来的语音是什么 

     这个就是我准备的语音,识别成功。

    格式支持:pcm(不压缩)、wav(不压缩,pcm编码)、amr(压缩格式)。推荐pcm 采样率 :16000 固定值。 编码:16bit 位深的单声道。

    百度服务端会将非pcm格式,转为pcm格式,因此使用wav、amr会有额外的转换耗时。

    音频文件格式转换请参见文档【语音识别小工具音频文件转码】

     更多内容详见官网:https://ai.baidu.com/docs#/ASR-API/top


     语音合成:

      合成文本长度必须小于1024字节,如果本文长度较长,可以采用多次请求的方式。文本长度不可超过限制

    详见官网:https://ai.baidu.com/docs#/TTS-Online-Csharp-SDK/top

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Voice
    {
        class Program
        {
            static void Main(string[] args)
            {
                // 设置APPID/AK/SK
                var APP_ID = "16938141";
                var API_KEY = "8y2pB5HLrLD5Zu7aaQV3ce0g";
                var SECRET_KEY = "5tDp3opvpIdEnlXBTOWn9W0O7CdhRNYu";
    
                ////语音识别
                //var client = new Baidu.Aip.Speech.Asr(APP_ID, API_KEY, SECRET_KEY);
                //client.Timeout = 60000;  // 修改超时时间
                //var data = File.ReadAllBytes("E:\Work Demo\语音技术\Voice\Voice\Image\16k.wav");
                //// 可选参数
                //var options = new Dictionary<string, object>
                // {
                //    {"dev_pid", 1536}  //语音模型1536代表普通话,其他请查看官方文档
                // };
                //client.Timeout = 120000; // 若语音较长,建议设置更大的超时时间. ms
                //var result = client.Recognize(data, "wav", 16000, options);
                //Console.Write(result);
    
    
                //语音合成
                var _ttsClient = new Baidu.Aip.Speech.Tts(API_KEY, SECRET_KEY);
                _ttsClient.Timeout = 60000;  // 修改超时时间
                // 可选参数
                var option = new Dictionary<string, object>()
                            {
                                {"spd", 5}, // 语速
                                {"vol", 7}, // 音量
                                {"per", 4}  // 发音人,4:情感度丫丫童声
                            };
                var result = _ttsClient.Synthesis("听说关注博主不迷路", option);
                if (result.ErrorCode == 0)  // 或 result.Success
                {
                    File.WriteAllBytes("E:\Work Demo\语音技术\Voice\Voice\Image\aaa.mp3", result.Data);
                }
            }
        }
    }

    运行后查看效果,如下:

     

    这样就合成成功了。


    4、总结

      简单的入门就到这里,后面的实时语音识别、音频文件转写、建立模型进行语音训练就需要靠大家了。

    转载请注明出处,谢谢!

    原文地址:https://www.cnblogs.com/xiongze520/p/11301882.html

    拜拜,下次再见咯!

    欢迎关注订阅我的微信公众平台【熊泽有话说】,更多好玩易学知识等你来取
    作者:熊泽-学习中的苦与乐
    公众号:熊泽有话说
    出处:https://www.cnblogs.com/xiongze520/p/11301882.html
    创作不易,任何人或团体、机构全部转载或者部分转载、摘录,请在文章明显位置注明作者和原文链接。  

     

  • 相关阅读:
    JSP和Servlet的相同点和不同点、有何联系。
    Java泛型
    HttpURLConnection与HttpClient比较和使用示例
    Mybatis中的#和$的区别
    MySQL_第三方数据库引擎_tokudb
    mysql的并发处理机制_上篇
    SQL SERVER 自动生成 MySQL 表结构及索引 的建表SQL
    SQL SERVER大话存储结构(6)_数据库数据文件
    SQL SERVER大话存储结构(4)_复合索引与包含索引
    基于binlog来分析mysql的行记录修改情况(python脚本分析)
  • 原文地址:https://www.cnblogs.com/xiongze520/p/11301882.html
Copyright © 2020-2023  润新知