一文教你如何快速實現聲音識別
在一些應用專案開發的過程中,有時需要用到語音檢測的功能,即識別敲門聲、門鈴聲、汽車喇叭聲等功能,對於中小開發者來說,單獨開發構建該能力,不免耗時耗力,而華為機器學習服務中的聲音識別服務SDK,只需簡單整合,端側就能實現這個功能。
一、 華為 聲音識別服務簡介:
聲音識別服務支援透過線上(實時錄音)的模式檢測聲音事件,基於檢測到的聲音事件能夠幫助開發者進行後續指令動作。目前支援 13個種類的聲音事件,包括:笑聲、嬰兒或小孩哭聲、打鼾聲、噴嚏聲、叫喊聲、貓叫聲、狗叫聲、流水聲(包括水龍頭流水聲、溪流聲、海浪聲)、汽車喇叭聲、門鈴聲、敲門聲、火災報警聲(包括火災報警器警報聲、煙霧報警器警報聲)、警報聲(包括消防車警報聲、救護車警報聲、警車警報聲、防空警報聲)。
二、整合準備:
開發環境配置
1、需要在華為開發者聯盟上建立應用:
此步驟具體可以詳見下方的連結:
2、開啟機器學習服務:
具體開啟步驟可以檢視下方的連結:
2、建立完應用之後,會自動生成 agconnect-services.json檔案, 需要手動將 agconnect-services.json檔案複製到應用級根目錄下
3、配置 HMS Core SDK的 Maven倉地址。
關於 Maven倉的配置可以檢視下方的連結:
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. 更詳細的步驟可以透過下方的連結檢視:
三、應用開發編碼階段
1.取得 麥克風 許可權, 如果沒有麥克風的許可權 會報 12203的錯誤
設定靜態許可權(必須)
< uses-permission android :name ="android.permission.RECORD_AUDIO" />
動態許可權獲取(必須)
ActivityCompat
.
requestPermissions(
this
,
new
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. 如果有讀者對華為機器學習服務其他模組感興趣的話,可以檢視華為提供的相關整合文件,地址如下:
>>
華為開發者聯盟官網
>>
獲取開發指導文件
>>
參與開發者討論請到
CSDN社群
或者
Reddit
社群
>>
下載
demo
和示例程式碼請到
Github
或者
Gitee
>>
解決整合問題請到
Stack Overflow
原文連結: https://developer.huawei.com/consumer/cn/forum/topic/0202580471954390028?fid=18
原作者:胡椒
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69970551/viewspace-2786589/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何快速實現人臉識別通道?一文了解具體技巧
- 教你如何快速識別好固態硬碟?硬碟
- 微信小程式使用同聲傳譯實現語音識別功能微信小程式
- 如何基於實時聲紋變聲實現對聲音的“克隆”
- 教你如何在樹莓派上搭建語音識別服務樹莓派
- 聲音識別技術真的能識別出蒙面聖戰士嗎?
- 【機器學習PAI實踐十二】機器學習實現男女聲音識別分類(含語音特徵提取資料和程式碼)機器學習AI特徵
- 教你如何快速實現一個圖片爬蟲爬蟲
- 實戰四:手把手教你實現數字識別
- 30分鐘實現小程式語音識別
- c# 實現初級的語音識別C#
- 基於TensorflowLite的人聲識別在端上的實現
- 只對你有感覺:谷歌用聲紋識別實現定向人聲分離谷歌
- 教你在“狼人殺”中實現變聲效果
- 手把手教你實現人臉識別,有手就行
- 迅捷OCR文字識別軟體教你如何快速將圖片轉換成Word
- 如何精準實現OCR文字識別?
- 微信小程式語音同步智慧識別的實現案例微信小程式
- 小程式實現語音識別到底要填多少坑?
- 科普丨一文看懂語音識別的技術原理
- Android中實現錄製內建聲音Android
- Android | 教你如何在安卓上實現二代身份證識別,一鍵實名認證Android安卓
- 解密:依圖如何一年實現語音識別指標超巨頭玩家解密指標
- 公子小白機器人釋出:聲音識別國內最強機器人
- 想快速搭建知識付費平臺,如何實現?
- 手把手教你實現pynq-z2條形碼識別
- 手把手教你用 1 行命令實現人臉識別
- 表格轉文字如何實現-表格文字識別介面整合示例-快速提取表格中的文字
- 如何快速處理證件文字識別
- 如何將截圖快速識別成文字?
- Android | 教你如何在安卓上實現通用卡證識別,一鍵各種卡繫結Android安卓
- Tongue Twister-快速整合華為實時語音識別服務玩轉繞口令
- 華為機器學習服務語音識別功能,讓應用繪“聲”繪色機器學習
- 在PB應用中實現聲音與動畫 (轉)動畫
- 在C#中利用DirectX實現聲音播放(轉)C#
- govpr,基於golang實現的gmm-ubm演算法的說話人識別(聲紋識別)引擎Golang演算法
- 移動端的車牌識別如何實現
- 【秒懂音視訊開發】06_重識聲音