博客 / 詳情

返回

一文吃透 HarmonyOS 語音識別:從權限配置到自定義拓展

目錄

  • 前言
  • 語音識別(ASR)技術核心解析
  • HarmonyOS 語音識別核心工作流
  • 從零實現語音識別功能
  • 高級自定義場景拓展
  • 總結與生態展望

前言

語音識別作為人機交互的核心技術之一,已深度滲透至智能辦公、智能家居、移動出行等多元場景。HarmonyOS 依託華為機器學習服務,構建了功能完備的語音識別能力體系 —— 不僅支持普通話、多地方言及十餘種外語識別,更突破性實現離線場景下的高精度識別,即便脱離網絡環境仍能保障穩定響應。其毫秒級識別延遲與行業領先的準確率,為鴻蒙原生應用注入更自然、高效的交互體驗。本文將從技術原理、工程實現、參數配置到自定義拓展,全方位拆解 HarmonyOS 語音識別的落地路徑,配套完整代碼示例,助力開發者快速集成並靈活適配業務需求。
image.png

語音識別(ASR)技術核心解析

語音識別技術本質是將人類語音信號轉化為結構化文本信息的過程,在 HarmonyOS 生態中,該能力通過集成華為機器學習服務實現,支持兩種核心應用模式:短語音識別(單段音頻時長≤60 秒)與長語音識別(單段音頻時長≤8 小時),適配 PCM 格式音頻文件或實時麥克風輸入等多種音源類型,可滿足從即時語音指令到長音頻轉寫的全場景需求。

HarmonyOS 語音識別核心工作流

在 HarmonyOS 應用中集成語音識別功能,需遵循 “權限配置 - 服務集成 - 參數設定 - 啓停控制 - 結果處理” 的標準化流程,具體如下:
1、權限申請:在應用配置文件中聲明必要系統權限,保障麥克風使用、音頻讀取等核心操作合法性;
2、服務集成:通過系統提供的 CoreSpeechKit API,快速接入語音識別引擎;
3、參數配置:根據業務場景設定識別語言、音頻格式、識別模式等關鍵參數;
4、啓停控制:響應用户操作(如按鈕點擊)啓動或停止識別流程;
5、結果處理:通過回調監聽接收中間識別結果、最終文本及異常信息,完成業務邏輯聯動。

從零實現語音識別功能

1、引入核心依賴類

開發前需導入語音識別相關核心類與錯誤處理工具類,具體代碼如下:

import { speechRecognizer } from '@kit.CoreSpeechKit';
import { BusinessError } from '@kit.BasicServicesKit';

2、初始化識別引擎

調用 createEngine 方法初始化語音識別引擎,創建 SpeechRecognitionEngine 實例,作為後續所有操作的核心入口:

import { speechRecognizer } from '@kit.CoreSpeechKit';
import { BusinessError } from '@kit.BasicServicesKit';

3、註冊回調監聽器

通過實例化 RecognitionListener 對象並調用 setListener 方法,監聽識別全生命週期事件(啓動成功、中間結果、完成狀態、錯誤信息等),具體實現如下:

let setListener: speechRecognizer.RecognitionListener = {
  // 開始識別成功回調
  onStart(sessionId: string, eventMessage: string) {

  },
  // 事件回調
  onEvent(sessionId: string, eventCode: number, eventMessage: string) {

  },
  // 識別結果回調,包括中間結果和最終結果
  onResult(sessionId: string, result: speechRecognizer.SpeechRecognitionResult) {

  },
  // 識別完成回調
  onComplete(sessionId: string, eventMessage: string) {

  },
  // 錯誤回調,錯誤碼通過本方法返回,返回錯誤碼1002200002,開始識別失敗,重複啓動startListening方法時觸發
  onError(sessionId: string, errorCode: number, errorMessage: string) {

  },
}
// 設置回調
asrEngine.setListener(setListener);

4、配置識別參數並啓動

針對 “音頻文件轉文字” 與 “麥克風實時轉文字” 兩種核心場景,分別配置參數並調用 startListening 方法啓動識別,具體實現如下:

// 開始識別(音頻文件轉文字)
private startListeningForWriteAudio() {
  // 設置開始識別的相關參數
  let recognizerParams: speechRecognizer.StartParams = {
    sessionId: this.sessionId,
    audioInfo: { audioType: 'pcm', sampleRate: 16000, soundChannel: 1, sampleBit: 16 } //audioInfo參數配置請參考AudioInfo
  }
  // 調用開始識別方法
  asrEngine.startListening(recognizerParams);
};

// 開始識別(麥克風實時轉文字)
private startListeningForRecording() {
  let audioParam: speechRecognizer.AudioInfo = { audioType: 'pcm', sampleRate: 16000, soundChannel: 1, sampleBit: 16 }
  let extraParam: Record<string, Object> = {
    "recognitionMode": 0,
    "vadBegin": 2000,
    "vadEnd": 3000,
    "maxAudioDuration": 20000
  }
  let recognizerParams: speechRecognizer.StartParams = {
    sessionId: this.sessionId,
    audioInfo: audioParam,
    extraParams: extraParam
  }
  asrEngine.startListening(recognizerParams);
};

5、寫入音頻流(文件轉文字場景)

對於音頻文件轉文字場景,需通過 writeAudio 方法傳入 PCM 格式音頻流(支持長度為 640 或 1280 的字節流),具體代碼如下:

let uint8Array: Uint8Array = new Uint8Array();
// 可以通過如下方式獲取音頻流:1、通過錄音獲取音頻流;2、從音頻文件中讀取音頻流。寫入音頻流,音頻流長度僅支持640或1280
asrEngine.writeAudio(sessionId, uint8Array);

6、查詢支持語種

若需動態適配多語言場景,可調用 listLanguages 方法查詢當前服務支持的語種列表,具體實現如下:

// 設置查詢相關的參數
let languageQuery: speechRecognizer.LanguageQuery = {
  sessionId: sessionId
};
// 調用listLanguages方法
asrEngine.listLanguages(languageQuery).then((res: Array<string>) => {

}).catch((err: BusinessError) => {

});

7、結束識別

當需要主動終止識別流程(如用户手動結束),可調用 finish 方法,具體代碼如下:

// 結束識別
asrEngine.finish(sessionId);

8、取消識別

若需取消當前識別任務並清理狀態,可調用 cancel 方法,具體實現如下:

// 取消識別
asrEngine.cancel(sessionId);

9、釋放引擎資源

識別任務完成後,建議調用 shutdown 方法釋放引擎資源,優化應用性能:

// 釋放識別引擎資源
asrEngine.shutdown();

10、配置系統權限

由於語音識別需使用麥克風設備,需在 module.json5 配置文件中聲明 ohos.permission.MICROPHONE 權限,具體配置如下:

//...
"requestPermissions": [
  {
    "name" : "ohos.permission.MICROPHONE",
    "reason": "$string:reason",
    "usedScene": {
      "abilities": [
        "EntryAbility"
      ],
      "when":"inuse"
    }
  }
],
//...

高級自定義場景拓展

HarmonyOS 語音識別支持基於業務需求的深度自定義,核心拓展場景包括:

  • 實時轉寫優化:在 onResult 回調中處理中間結果,實現 “邊説邊顯” 的實時交互體驗,可結合防抖策略提升文本展示流暢度;
  • 命令詞精準識別:通過配置 extraParams 中的關鍵詞增強參數,提升特定命令(如 “打開設置”“播放音樂”)的識別優先級與準確率,觸發對應業務操作;
  • 多輪對話適配:結合識別結果上下文,實現多輪語音交互邏輯,適用於智能助手、客服機器人等場景;
  • 離線識別配置:提前下載離線語言包,通過參數指定離線識別模式,保障無網絡環境下的核心功能可用。

最後

HarmonyOS 提供的語音識別能力,以其高準確率、低延遲、多場景適配的特性,為原生應用打造了更自然的人機交互入口。通過本文介紹的 “依賴引入 - 引擎初始化 - 參數配置 - 回調處理 - 權限申請” 標準化流程,開發者可快速完成核心功能集成,再結合實時轉寫、命令識別等自定義拓展,滿足不同業務場景的個性化需求。隨着 HarmonyOS 生態的持續演進,語音識別技術將進一步融合 AI 大模型能力,實現更智能的語義理解、更精準的場景適配,為用户帶來更便捷、高效的交互體驗。期待開發者充分利用這一技術,構建更多創新型鴻蒙原生應用,共同豐富生態的多樣性與實用性。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.