一文教你如何快速实现声音识别
在一些應(yīng)用項(xiàng)目開發(fā)的過程中,有時(shí)需要用到語音檢測的功能,即識別敲門聲、門鈴聲、汽車?yán)嚷暤裙δ?#xff0c;對于中小開發(fā)者來說,單獨(dú)開發(fā)構(gòu)建該能力,不免耗時(shí)耗力,而華為機(jī)器學(xué)習(xí)服務(wù)中的聲音識別服務(wù)SDK,只需簡單集成,端側(cè)就能實(shí)現(xiàn)這個功能。
一、?華為聲音識別服務(wù)簡介:
聲音識別服務(wù)支持通過在線(實(shí)時(shí)錄音)的模式檢測聲音事件,基于檢測到的聲音事件能夠幫助開發(fā)者進(jìn)行后續(xù)指令動作。目前支持13個種類的聲音事件,包括:笑聲、嬰兒或小孩哭聲、打鼾聲、噴嚏聲、叫喊聲、貓叫聲、狗叫聲、流水聲(包括水龍頭流水聲、溪流聲、海浪聲)、汽車?yán)嚷?、門鈴聲、敲門聲、火災(zāi)報(bào)警聲(包括火災(zāi)報(bào)警器警報(bào)聲、煙霧報(bào)警器警報(bào)聲)、警報(bào)聲(包括消防車警報(bào)聲、救護(hù)車警報(bào)聲、警車警報(bào)聲、防空警報(bào)聲)。
二、集成準(zhǔn)備:
開發(fā)環(huán)境配置
1、需要在華為開發(fā)者聯(lián)盟上創(chuàng)建應(yīng)用:
此步驟具體可以詳見下方的鏈接:
https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-get-started#createproject?ha__source=hms1
2、打開機(jī)器學(xué)習(xí)服務(wù):
具體開啟步驟可以查看下方的鏈接:
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides-V5/enable-service-0000001050038078-V5?ha__source=hms1
2、創(chuàng)建完應(yīng)用之后,會自動生成agconnect-services.json文件, 需要手動將agconnect-services.json文件拷貝到應(yīng)用級根目錄下
3、配置HMS Core SDK的Maven倉地址。
關(guān)于Maven倉的配置可以查看下方的鏈接:
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/config-maven-0000001050040031?ha__source=hms1
4、集成聲音識別服務(wù)SDK
1.?推薦使用Full SDK方式集成,在build.gradle文件中配置相應(yīng)的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.?根據(jù)實(shí)際情況聲明AGC插件配置,有兩種方式
apply?plugin:?'com.android.application' apply?plugin:?'com.huawei.agconnect' 或 plugins?{????id?'com.android.application'???? id?'com.huawei.agconnect' }3.?自動更新機(jī)器學(xué)習(xí)模型
添加如下語句到AndroidManifest.xml文件中,用戶從華為應(yīng)用市場安裝您的應(yīng)用后,將自動更新機(jī)器學(xué)習(xí)模型到設(shè)備:
<meta-data???? android:name="com.huawei.hms.ml.DEPENDENCY"?? android:value=?"sounddect"/>4.?更詳細(xì)的步驟可以通過下方的鏈接查看:
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/sound-detection-sdk-0000001055602754?ha__source=hms1
三、應(yīng)用開發(fā)編碼階段
1.取得 麥克風(fēng) 權(quán)限, 如果沒有麥克風(fēng)的權(quán)限 會報(bào)12203的錯誤
設(shè)置靜態(tài)權(quán)限(必須)
< uses-permission? android :name ="android.permission.RECORD_AUDIO"? />動態(tài)權(quán)限獲取(必須)
ActivityCompat.requestPermissions(
????????this,?new?String[]{Manifest.permission.RECORD_AUDIO
?},?1);
2.創(chuàng)建MLSoundDector對象
private static final?String?TAG?=?"MLSoundDectorDemo";
//語音識別的對象
private?MLSoundDector?mlSoundDector;
?
//創(chuàng)建MLSoundDector對象?并?設(shè)置回調(diào)方法
private void?initMLSoundDector(){
????mlSoundDector?=?MLSoundDector.createSoundDector();
????mlSoundDector.setSoundDectListener(listener);
}
3.?聲音識別結(jié)果回調(diào),用于獲取檢測結(jié)果,并將回調(diào)傳入聲音識別實(shí)例。
//創(chuàng)建聲音識別結(jié)果回調(diào),用于獲取檢測結(jié)果,并將回調(diào)傳入聲音識別實(shí)例。
private?MLSoundDectListener?listener?=?new?MLSoundDectListener() {
????@Override
????public void?onSoundSuccessResult(Bundle?result) {
????????//識別成功的處理邏輯,識別結(jié)果為:0-12(對應(yīng)MLSoundDectConstants.java中定義的以SOUND_EVENT_TYPE開頭命名的13種聲音類型)。
????????int?soundType?= result.getInt(MLSoundDector.RESULTS_RECOGNIZED);
????????Log.d(TAG,"聲音識別成功:"+soundType);
??? }
????@Override
????public void?onSoundFailResult(int?errCode) {
????????//識別失敗,可能沒有授予麥克風(fēng)權(quán)限(Manifest.permission.RECORD_AUDIO)等異常情況。
????????Log.d(TAG,"聲音識別失敗:"+errCode);
??? }
};
此代碼中只是將聲音識別結(jié)果的int類型打印了出來,實(shí)際編碼中,可以將int類型的聲音識別結(jié)果 轉(zhuǎn)換為 可被用戶識別的類型。
聲音識別類型的定義:
<string-array?name="sound_dect_voice_type">
??? <item>笑聲</item>
??? <item>嬰兒或小孩哭聲</item>
??? <item>打鼾聲</item>
??? <item>噴嚏聲</item>
??? <item>叫喊聲</item>
??? <item>貓叫聲</item>
??? <item>狗叫聲</item>
??? <item>流水聲</item>
??? <item>汽車?yán)嚷?lt;/item>
??? <item>門鈴聲</item>
??? <item>敲門聲</item>
??? <item>火災(zāi)報(bào)警聲</item>
??? <item>警報(bào)聲</item>
</string-array>
3.?開啟和關(guān)閉語音識別
@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表示啟動識別失敗(原因可能是手機(jī)麥克風(fēng)被系統(tǒng)或其它三方應(yīng)用占用)
????????????????if?(isStarted){
????????????????????Toast.makeText(this,"語音識別開啟成功",?Toast.LENGTH_SHORT).show();
??????????????? }
??????????? }
????????????break;
????????case?R.id.btn_stop_detect:
????????????if?(mlSoundDector?!=?null){
????????????????mlSoundDector.stop();
??????????? }
????????????break;
??? }
}
4.當(dāng)頁面關(guān)閉的時(shí)候,可以調(diào)用destroy()方法釋放資源
@Override
protected void?onDestroy() {
????super.onDestroy();
????if?(mlSoundDector?!=?null){
????????mlSoundDector.destroy();
??? }
}
四、運(yùn)行測試
1.?以敲門聲為例,預(yù)計(jì)聲音識別類型的輸出結(jié)果為10
2.?點(diǎn)擊開啟語音識別按鈕、模擬敲門聲 ,在AS控制臺中可以得到如下日志, 說明集成成功。
五、其他
1.?聲音識別服務(wù)屬于華為機(jī)器學(xué)習(xí)服務(wù)中的一個很小的模塊,華為機(jī)器學(xué)習(xí)服務(wù)包括6大模塊,分別為:文本類、語音語言類、圖像類、人臉人體類、自然語言處理類,自定義模型?。
2.?這篇記錄文檔只是介紹了“語音語言類”這個模塊中的“聲音識別服務(wù)”
3.?如果有讀者對華為機(jī)器學(xué)習(xí)服務(wù)其他模塊感興趣的話,可以查看華為提供的相關(guān)集成文檔,地址如下:
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides-V5/service-introduction-0000001050040017-V5?ha__source=hms1
>>華為開發(fā)者聯(lián)盟官網(wǎng)
>>獲取開發(fā)指導(dǎo)文檔
>>參與開發(fā)者討論請到CSDN社區(qū)或者Reddit社區(qū)
>>下載demo和示例代碼請到Github或者Gitee
>>解決集成問題請到Stack Overflow
原文鏈接:https://developer.huawei.com/...
原作者:胡椒?
總結(jié)
以上是生活随笔為你收集整理的一文教你如何快速实现声音识别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汉语编程工具易语言即学即用教程pdf
- 下一篇: 解决Pyinstaller打包文件太大的