1. 程式人生 > >IBM的語音識別(IBM speech to text 語言轉換成文字)

IBM的語音識別(IBM speech to text 語言轉換成文字)

1.登陸網址https://www.ibm.com/watson/developercloud/speech-to-text.html並註冊


2.開啟網址https://console.ng.bluemix.net/catalog/?category=watson,點選介面左側選單中的Watson,並選擇Speech ToText


3.點選介面最下方的建立按鈕


4.點選新建憑證


5.輸入名稱,點選新增


6.點選檢視憑證,即可看到賬號、密碼和請求地址(憑證建立完成後,不一定能馬上使用,有時需要過一段時間,具體時間不確定,我當天申請的當天測試一直連線不上,兩天後再測的時候就可以了)


7.建立一個工程,將speech-android-wrapper作為library匯入,並新增到工程中,build.gradle中的SDK版本號不要超過23,否則會報org.apache.http找不到,因為該api在23以後更改了
(例子程式碼github地址:https://github.com/watson-developer-cloud/speech-android-sdk)





8.新建的專案中新增依賴


9.主介面佈局


10.授權

    if (initSTT() == false) {
            displayResult("Error: no authentication credentials/token available, please enter your authentication information");
            return;
        }

    private boolean initSTT() {
        // DISCLAIMER: please enter your credentials or token factory in the lines below
        String username = "173e235d-5d3d-453e-9d97-0b0f77bdac19";                         //賬號
        String password = "vjpqIUx0Ss8x";  //密碼
        String serviceURL = "wss://stream.watsonplatform.net/speech-to-text/api";         //伺服器地址

        SpeechConfiguration sConfig = new SpeechConfiguration(SpeechConfiguration.AUDIO_FORMAT_OGGOPUS);
        sConfig.learningOptOut = false; // Change to true to opt-out

        SpeechToText.sharedInstance().initWithContext(this.getHost(serviceURL), context, sConfig);   //設定伺服器地址
        SpeechToText.sharedInstance().setCredentials(username, password);//設定賬號和密碼

        SpeechToText.sharedInstance().setModel("en-US_BroadbandModel");//設定所採集的語言
        SpeechToText.sharedInstance().setDelegate(this);//設定監聽
        return true;
    }
11.檢測服務是否連線
if (jsonModels == null) {
            jsonModels = new STTCommands().doInBackground();
            if (jsonModels == null) {
                displayResult("Please, check internet connection.");  //檢測服務是否連線
                return;
            }
        }
}

12.重寫監聽中的方法

public class MainActivity extends Activity implements ISpeechDelegate    //activity實現了該監聽,並複寫監聽中的方法

 @Override
    public void onOpen() {//認證開始和伺服器連線上
        Log.d(TAG, "onOpen");
        mState = ConnectionState.CONNECTED;
    }

    @Override
    public void onError(String error) {//連接出錯
        Log.e(TAG, "onError...................." + error);
        mState = ConnectionState.IDLE;
    }

    @Override
    public void onClose(int code, String reason, boolean remote) {//連線關閉
        Log.d(TAG, "onClose, code: " + code + " reason: " + reason);
        mState = ConnectionState.IDLE;
    }

    @Override
    public void onMessage(String message) {//獲取到識別到的資訊並顯示到介面上
        Log.d(TAG, "onMessage, message: " + message);
        try {
            JSONObject jObj = new JSONObject(message);
            // state message
            if (jObj.has("state")) {
                Log.d(TAG, "Status message: " + jObj.getString("state"));
            }
            // results message
            else if (jObj.has("results")) {
                //if has result
                Log.d(TAG, "Results message: ");
                JSONArray jArr = jObj.getJSONArray("results");
                for (int i = 0; i < jArr.length(); i++) {
                    JSONObject obj = jArr.getJSONObject(i);
                    JSONArray jArr1 = obj.getJSONArray("alternatives");
                    String str = jArr1.getJSONObject(0).getString("transcript");
                    // remove whitespaces if the language requires it
//                    String model = "en-US_MichaelVoice";
                    String model = "en-US_BroadbandModel";
                    if (model.startsWith("ja-JP") || model.startsWith("zh-CN")) {
                        str = str.replaceAll("\\s+", "");
                    }
                    String strFormatted = Character.toUpperCase(str.charAt(0)) + str.substring(1);
                    if (obj.getString("final").equals("true")) {
                        String stopMarker = (model.startsWith("ja-JP") || model.startsWith("zh-CN")) ? "。" : ". ";
                        mRecognitionResults += strFormatted.substring(0, strFormatted.length() - 1) + stopMarker;

                        displayResult(mRecognitionResults);
                    } else {
                        displayResult(mRecognitionResults + strFormatted);
                    }
                    break;
                }
            } else {
                displayResult("unexpected data coming from stt server: \n" + message);
            }

        } catch (JSONException e) {
            Log.e(TAG, "Error parsing JSON");
            e.printStackTrace();
        }
    }
點選record,說Test,點選stop,然後資料返回並設定到text上

13.點選Record按鈕時進行的操作
 btRecord.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mState == ConnectionState.IDLE) {
                    mState = ConnectionState.CONNECTING;
                    Log.d(TAG, "onClickRecord: IDLE -> CONNECTING");
                    mRecognitionResults = "";
                    displayResult(mRecognitionResults);
                    SpeechToText.sharedInstance().setModel("en-US_BroadbandModel");//設定識別的語言是英語
                    // start recognition
                    new AsyncTask<Void, Void, Void>() {
                        @Override
                        protected Void doInBackground(Void... none) {
                            SpeechToText.sharedInstance().recognize();//開始識別
                            return null;
                        }
                    }.execute();
                    btRecord.setText("Connecting...");
                }
            }
        });


14.停止識別

 btStop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mState == ConnectionState.CONNECTED) {
                    mState = ConnectionState.IDLE;
                    Log.d(TAG, "onClickRecord: CONNECTED -> IDLE");
                    SpeechToText.sharedInstance().stopRecognition();                                   //停止識別
                    btRecord.setText("Record");
                }
            }
        });


注:1.build.gradle中的compile和build版本不要超過21

2.伺服器是國外的,需要連線vpn

3.在回撥方法中,是子執行緒,不要進行更改介面的操作,如果需要更新介面,需先執行在主執行緒

參考資料:

https://www.ibm.com/watson/developercloud/speech-to-text.html

相關推薦

IBM語音識別IBM speech to text 語言轉換文字

1.登陸網址https://www.ibm.com/watson/developercloud/speech-to-text.html並註冊 2.開啟網址https://console.ng.bluemix.net/catalog/?category=watson,點選介

SetLocalTime API函式設定本地時間DateTimeToSystemTime函式,把TDateTime轉換TSystemTime

procedure setLocalDateTime(Value: TDateTime);var  lSystemDateTime: TSystemTime;begin  DateTimeToSystemTime(Value, l

IBM Cloud Speech to Text 語音識別

語音 iam manage pub during script per xxxx ice https://speech-to-text-demo.ng.bluemix.net/ 點擊首頁紫色的那個「Star for free in IBM Cloud」按鈕,註冊IB

使用C#進行語音識別(Speech-to-Text)

        本文大體的介紹怎樣通過使用C#和Speech SDK5.1來進行語音識別,通過微軟提供的Speech SDK你也可以使用其他的語言進行語音識別的開發,目前最新的Release版本是5.1。 介紹          聲音的交流是我們平時最常見的交流方式,但是在人

語音識別SR的秘密

天上掉餡餅 mar 天上 的人 spa 谷歌 pos bottom 微軟 語音識別(SR)功能是當今國外操作系統的標準特征,而國產操作系統根本不具備這樣的特質,並且國家隊沒有相關的主觀動力。去開發實際可用的語音識別系統。與國外相比,國

ROS kinetic語音識別

line 目錄 路徑 inf AC ESS data html amd 1.安裝依賴 1.1安裝ros-kinetic-audio-common 1 sudo apt-get install ros-kinetic-audio-common

語音識別1---語音識別(ASR)評估指標-WER字錯誤率和SER句錯誤率

語音識別(ASR)評估指標-WER(字錯誤率)和SER(句錯誤率) 前言 實際工作中,一般識別率的直接指標是“WER(詞錯誤率,Word Error Rate)” 定義 WER 字錯誤率句錯誤率 為了使識別出來的詞序列和標準的詞序列之間保持一致,需要進行替換、刪

小程式 語音識別

在小程式語音識別(一)和小程式語音識別(二)中分別介紹了,小程式端的程式碼實現和java端的程式碼實現,下面說下其中遇到的問題: 1.語音轉換需要時間,注意在轉換完成在呼叫識別介面 2.注意識別完成後

Building with Watson: Advanced audio transcription with Speech to Text

IBM Watson Senior Offering Manager Bhavik Shah discusses the Speech to Text service and the host of recent improvements and new features designed to make

Csharp: speech to text, text to speech in win

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq;

基於HMM的語音識別

利用業餘時間寫一下自己看書的感受,就當作隨筆把,這樣也能幫助自己記憶,同時關於kaldi的章節我選擇先停一停,我感覺把這個問題理解透再去檢視kaldi可能會事半功倍。我選取的章節來源於"The Application of Hidden Markov Models in Sp

使用微軟的語音識別引擎Microsoft Speech API進行語音控制

本人僅作提取: SREngine語音識別引擎封裝類: #pragma once /************************************************************************/ /* Notice: this pr

#MINI2440實現語音識別# REST API訪問和VAD端點檢測

1.前言   本文主要是接#MINI2440實現語音識別# (一)整體概述和實現流程記錄這篇文章繼續講。首先簡單介紹下背景。前面三個階段分別完成了嵌入式Linux最小系統移植、驅動UDA1341音效卡、跑通訊飛Demo庫,可以實現語音轉文字,但是存在幾

端到端語音識別 ctc

相關筆記 History ICML-2006. Graves et al. [1] introduced the connectionist temporal classification (CTC) objective function for p

ios開發-語音識別科大訊飛

在記錄事件的時候,使用者在不方便手寫的時候,我們可以利用語音錄入,轉成文字的形式記錄時間,是不是既方便又只能,現在做語音識別的有一些不錯的開放平臺供我們使用,科大訊飛平臺,百度語音平臺。科大訊飛的優勢在於大段大段的文字識別上,準確率較高。這篇部落格也主要講的是是

基於HMM的語音識別

今天進入特徵提取部分,原文的2.1部分,進入正題。特徵提取階段試圖提供語音波形的緊湊形式(這裡我理解不是很好,往下看)。這種形式最大限度的減少單詞間的區分資訊的丟失,並且與聲學模型的分佈假設進行良好的匹配。比如,如果對角協方差高斯分佈用於狀態輸出分佈,那麼這些特徵應該被設計為

C# 圖片識別支持21種語言

rar 分享 ima ros height ges ptr span crp 圖片識別的技術到幾天已經很成熟了,只是相關的資料很少,為了方便在此匯總一下(C#實現),方便需要的朋友查閱,也給自己做個記號。 圖片識別的用途:很多人用它去破解網站的驗證碼,用於達到自動刷票或

LeetCode 122. 買賣股票的最佳時機 IIBest Time to Buy and Sell Stock II

必須 toc for pub i++ pre 價格 股票 時機 題目描述 給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。 設計一個算法來計算你所能獲取的最大利潤。你可以盡可能地完成更多的交易(多次買賣一支股票)。 註意:你不能同時參與多筆交易(你必須在

Four Ways To Make Your Leader Love You讓領導喜歡你的四種方式

看到一篇文章很不錯,給大家分享一下。(中英文對照,翻譯不好的地方請指正) 原文地址:https://www.forbes.com/sites/forbescoachescouncil/2018/07/17/four-ways-to-make-your-leader-love-you/#5286b

leetcode Best Time to Buy and Sell Stock II

Title: Merge Stored Array    122 Difficulty:Easy 原題leetcode地址:https://leetcode.com/problems/best-time-to-buy-and-sell-stock-ii/