用 C# 開發自己的語音識別程序

開發工具:vs 2017

AI 平臺:http://ai.baidu.com/

準備工作

1、註冊百度賬號

2、登錄百度 AI 開發平臺,http://ai.baidu.com/

3、在控制檯點擊“百度語音”服務,點擊“創建應用”,填寫必填項,勾選額外接口,點擊立即創建獲取祕鑰。在應用列表中查看自己的id

圖片描述

用 360 軟件管家安裝 vs2017

圖片描述

創建自己的項目

1、新建項目

打開 vs2017,點擊文件,新建項目,選擇 visual C# --> windows 桌面 --> windows 窗體應用,選擇自己的項目地址,點擊確定

圖片描述

2、添加 baiduai 開發包

點擊引用 --> 管理 nuGet 程序包,搜索 baiduai,點擊下載

圖片描述

3、UI 設計

直接拖動即可,生成界面如下

圖片描述

4、後臺功能實現

選擇文件按鈕

private void button1_Click(object sender, EventArgs e)
{
    OpenFileDialog fdlg = new OpenFileDialog();
    fdlg.Title = "C# Corner Open File Dialog";
    //fdlg.InitialDirectory = @"c:/";   //@是取消轉義字符的意思
    //fdlg.Filter = "All files(*.*)|*.*|All files(*.*)|*.* ";
    ///*
    // * FilterIndex 屬性用於選擇了何種文件類型,缺省設置爲0,系統取Filter屬性設置第一項
    // * ,相當於FilterIndex 屬性設置爲1.如果你編了3個文件類型,當FilterIndex =2時是指第2個.
    // */
    fdlg.FilterIndex = 2;
    ///*
    // *如果值爲false,那麼下一次選擇文件的初始目錄是上一次你選擇的那個目錄,
    // *不固定;如果值爲true,每次打開這個對話框初始目錄不隨你的選擇而改變,是固定的  
    // */
    //fdlg.RestoreDirectory = true;
    if (fdlg.ShowDialog() == DialogResult.OK)
    {
        //textBox1.Text = System.IO.Path.GetFileNameWithoutExtension(fdlg.FileName);
        filePath.Text = System.IO.Path.GetFullPath(fdlg.FileName);

    }
}

開始識別按鈕

// 語音合成按鈕
private void button2_Click(object sender, EventArgs e)
{
    string value = this.videoType.Text;
    String filePath = this.filePath.Text;
    // 設置APPID/AK/SK
    String APP_ID = "14433392";
    String API_KEY = "C7WMYgLeWv3Wm2yogwv5gD08";
    String SECRET_KEY = "xcvwiwikALBDBaIcGisNQ6aQImtj3qua";
    var client = new Asr(APP_ID, API_KEY, SECRET_KEY);
    client.Timeout = 60000;  // 修改超時時間
    client.Timeout = 120000; // 若語音較長,建議設置更大的超時時間. ms
    FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
    byte[] buffur = new byte[fs.Length];
    try
    {
        fs.Read(buffur, 0, (int)fs.Length);

    }
    catch (Exception ex)
    {
        Console.Write(ex.StackTrace);
    }
    finally
    {
        if (fs != null)
        {
            //關閉資源  
            fs.Close();
        }
    }
    var result = client.Recognize(buffur, value, 16000);
    Convert.ToString(result);

    JToken resultStr = null;
    result.TryGetValue("result", out resultStr);
    Console.WriteLine("aToken===>"+ resultStr);
    voiceResult.Text = Convert.ToString(resultStr);
    Console.Write(result);
}

開始合成按鈕

調用 api 中 C# SDK 的語音合成 api

https://ai.baidu.com/docs#/AS...

// 開始合成按鈕(語音合成功能)
private void synthesisButton_Click(object sender, EventArgs e)
{
    String APP_ID = "14433392";
    String API_KEY = "C7WMYgLeWv3Wm2yogwv5gD08";
    String SECRET_KEY = "xcvwiwikALBDBaIcGisNQ6aQImtj3qua";
    // 獲取輸入框的值
    String value = this.Speech_Synthesis.Text;
    // 將 value 轉成語音文件存放到本地
    var client = new Baidu.Aip.Speech.Tts(API_KEY, SECRET_KEY);
    // 可選參數
    var option = new Dictionary<string, object>()
    {
        {"spd", 5}, // 語速
        {"vol", 7}, // 音量
        {"per", 3}  // 發音人,4:情感度丫丫童聲
    };
    var result = client.Synthesis(value, option);
    try {
        if (result.ErrorCode == 0) { // 或 result.Success
            File.WriteAllBytes("E:/prepared/北航/07_工程實踐--AI方向/作業/WindowsFormsApplication1/WindowsFormsApplication1/tmp.mp3", result.Data);
        }

    } catch (Exception ex) { Console.Write(ex.StackTrace); }
    Play();
}

關注微信公衆號[ prepared ],後續會更新一系列有深度的 AI 文章。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章