一文教你如何快速實現聲音識別

在一些應用項目開發的過程中,有時需要用到語音檢測的功能,即識別敲門聲、門鈴聲、汽車喇叭聲等功能,對於中小開發者來說,單獨開發構建該能力,不免耗時耗力,而華爲機器學習服務中的聲音識別服務SDK,只需簡單集成,端側就能實現這個功能。

 

一、 華爲聲音識別服務簡介:

聲音識別服務支持通過在線(實時錄音)的模式檢測聲音事件,基於檢測到的聲音事件能夠幫助開發者進行後續指令動作。目前支持13個種類的聲音事件,包括:笑聲、嬰兒或小孩哭聲、打鼾聲、噴嚏聲、叫喊聲、貓叫聲、狗叫聲、流水聲(包括水龍頭流水聲、溪流聲、海浪聲)、汽車喇叭聲、門鈴聲、敲門聲、火災報警聲(包括火災報警器警報聲、煙霧報警器警報聲)、警報聲(包括消防車警報聲、救護車警報聲、警車警報聲、防空警報聲)。

 

二、集成準備:

開發環境配置

1、需要在華爲開發者聯盟上創建應用:

此步驟具體可以詳見下方的鏈接:

https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-get-started#createproject?ha__source=hms1

 

2、打開機器學習服務:

具體開啓步驟可以查看下方的鏈接:

https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides-V5/enable-service-0000001050038078-V5?ha__source=hms1

 

2、創建完應用之後,會自動生成agconnect-services.json文件, 需要手動將agconnect-services.json文件拷貝到應用級根目錄下

 

3、配置HMS Core SDKMaven倉地址。

關於Maven倉的配置可以查看下方的鏈接:

https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/config-maven-0000001050040031?ha__source=hms1

 

4、集成聲音識別服務SDK

1. 推薦使用Full SDK方式集成,在build.gradle文件中配置相應的sdk

 

// 引入聲音識別集合包
implementation 'com.huawei.hms:ml-speech-semantics-sounddect-sdk:2.1.0.300'
implementation 'com.huawei.hms:ml-speech-semantics-sounddect-model:2.1.0.300'

 

 

2. 根據實際情況聲明AGC插件配置,有兩種方式

 

apply plugin: 'com.android.application'
apply plugin: 'com.huawei.agconnect'
或
plugins {    id 'com.android.application'    
id 'com.huawei.agconnect'
}

 

 

3. 自動更新機器學習模型

添加如下語句到AndroidManifest.xml文件中,用戶從華爲應用市場安裝您的應用後,將自動更新機器學習模型到設備:

<meta-data    
android:name="com.huawei.hms.ml.DEPENDENCY"  
android:value= "sounddect"/>

 

4. 更詳細的步驟可以通過下方的鏈接查看:

https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/sound-detection-sdk-0000001055602754?ha__source=hms1

 

三、應用開發編碼階段

1.取得 麥克風 權限, 如果沒有麥克風的權限 會報12203的錯誤

設置靜態權限(必須)

<
uses-permission 
android
:name
="android.permission.RECORD_AUDIO" 
/>

 

動態權限獲取(必須)

ActivityCompat.requestPermissions(
        
thisnew String[]{Manifest.permission.RECORD_AUDIO

 }, 1);

 

2.創建MLSoundDector對象

private static final String TAG "MLSoundDectorDemo";

 

//語音識別的對象
private MLSoundDector mlSoundDector;

 

//創建MLSoundDector對象  設置回調方法
private void initMLSoundDector(){
    
mlSoundDector MLSoundDector.createSoundDector();
    
mlSoundDector.setSoundDectListener(listener);
}

 

3. 聲音識別結果回調,用於獲取檢測結果,並將回調傳入聲音識別實例。

//創建聲音識別結果回調,用於獲取檢測結果,並將回調傳入聲音識別實例。
private MLSoundDectListener listener new MLSoundDectListener() {
    
@Override
    
public void onSoundSuccessResult(Bundle result) {
        
//識別成功的處理邏輯,識別結果爲:0-12(對應MLSoundDectConstants.java中定義的以SOUND_EVENT_TYPE開頭命名的13種聲音類型)。
        int soundType = result.getInt(MLSoundDector.RESULTS_RECOGNIZED);
        
Log.d(TAG,"聲音識別成功:"+soundType);
    }
    
@Override
    
public void onSoundFailResult(int errCode) {
        
//識別失敗,可能沒有授予麥克風權限(Manifest.permission.RECORD_AUDIO)等異常情況。
        Log.d(TAG,"聲音識別失敗:"+errCode);
    }
};

此代碼中只是將聲音識別結果的int類型打印了出來,實際編碼中,可以將int類型的聲音識別結果 轉換爲 可被用戶識別的類型。

 

聲音識別類型的定義:

<string-array name="sound_dect_voice_type">
    <
item>笑聲</item>
    <
item>嬰兒或小孩哭聲</item>
    <
item>打鼾聲</item>
    <
item>噴嚏聲</item>
    <
item>叫喊聲</item>
    <
item>貓叫聲</item>
    <
item>狗叫聲</item>
    <
item>流水聲</item>
    <
item>汽車喇叭聲</item>
    <
item>門鈴聲</item>
    <
item>敲門聲</item>
    <
item>火災報警聲</item>
    <
item>警報聲</item>
</
string-array>

 

3. 開啓和關閉語音識別

@Override
public void onClick(View v) {
    
switch (v.getId()){
        
case R.id.btn_start_detect:
            
if (mlSoundDector != null){
                
boolean isStarted mlSoundDector.start(this); //context 是上下文
                //isStared 等於true表示啓動識別成功、isStared等於false表示啓動識別失敗(原因可能是手機麥克風被系統或其它三方應用佔用)
                
if (isStarted){
                    
Toast.makeText(this,"語音識別開啓成功"Toast.LENGTH_SHORT).show();
                }
            }

            
break;

        
case R.id.btn_stop_detect:
            
if (mlSoundDector != null){
                
mlSoundDector.stop();
            }
            
break;
    }
}

 

4.當頁面關閉的時候,可以調用destroy()方法釋放資源

@Override
protected void onDestroy() {
    
super.onDestroy();
    
if (mlSoundDector != null){
        
mlSoundDector.destroy();
    }
}

 

四、運行測試

1. 以敲門聲爲例,預計聲音識別類型的輸出結果爲10

2. 點擊開啓語音識別按鈕、模擬敲門聲 ,在AS控制檯中可以得到如下日誌, 說明集成成功。

 

五、其他

1. 聲音識別服務屬於華爲機器學習服務中的一個很小的模塊,華爲機器學習服務包括6大模塊,分別爲:文本類、語音語言類、圖像類、人臉人體類、自然語言處理類,自定義模型 

2. 這篇記錄文檔只是介紹了“語音語言類”這個模塊中的“聲音識別服務”

3. 如果有讀者對華爲機器學習服務其他模塊感興趣的話,可以查看華爲提供的相關集成文檔,地址如下:

https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides-V5/service-introduction-0000001050040017-V5?ha__source=hms1

 

>>華爲開發者聯盟官網

>>獲取開發指導文檔
>>參與開發者討論請到CSDN社區或者Reddit社區
>>下載demo和示例代碼請到Github或者Gitee
>>解決集成問題請到Stack Overflow

 

原文鏈接:https://developer.huawei.com/...
原作者:胡椒

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