1.語音識別簡介
語音識別技術(shù),也被稱為自動語音識別(Automatic Speech Recognition,ASR),其目標(biāo)是將人類的語音中的詞匯內(nèi)容轉(zhuǎn)換為計(jì)算機(jī)可讀的輸入,例如按鍵、二進(jìn)制編碼或者字符序列。與說話人識別及說話人確認(rèn)不同,后者嘗試識別或確認(rèn)發(fā)出語音的說話人而非其中所包含的詞匯內(nèi)容。
我們的語音算法是基于Whisper是OpenAI設(shè)計(jì)的。Whisper作為一個通用的語音識別模型,它使用了大量的多語言和多任務(wù)的監(jiān)督數(shù)據(jù)來訓(xùn)練,能夠在英語語音識別上達(dá)到接近人類水平的魯棒性和準(zhǔn)確性。Whisper還可以進(jìn)行多語言語音識別、語音翻譯和語言識別等任務(wù)。Whisper的架構(gòu)是一個簡單的端到端方法,采用了編碼器-解碼器的Transformer模型,將輸入的音頻轉(zhuǎn)換為對應(yīng)的文本序列,并根據(jù)特殊的標(biāo)記來指定不同的任務(wù)。
基于EASY-EAI-Orin-nano(RK3576)硬件主板的運(yùn)行效率:
| 算法種類 | 模型大小 | Real Time Factor (RTF) |
| speech_decoder | 383MB | 0.077 |
| speech_encoder | 217MB | 0.077 |
2.快速上手
如果您初次閱讀此文檔,請閱讀:《入門指南/源碼管理及編程介紹/源碼工程管理》,按需管理自己工程源碼(注:此文檔必看,并建議采用【遠(yuǎn)程掛載管理】方式,否則有代碼丟失風(fēng)險?。。。?/span>。
2.1開源碼工程下載
先在PC虛擬機(jī)定位到nfs服務(wù)目錄,再在目錄中創(chuàng)建存放源碼倉庫的管理目錄:
cd ~/nfsroot mkdir GitHub cd GitHub
再通過git工具,在管理目錄內(nèi)克隆遠(yuǎn)程倉庫(需要設(shè)備能對外網(wǎng)進(jìn)行訪問)
git clone https://github.com/EASY-EAI/EASY-EAI-Toolkit-3576.git

注:
* 此處可能會因網(wǎng)絡(luò)原因造成卡頓,請耐心等待。
* 如果實(shí)在要在gitHub網(wǎng)頁上下載,也要把整個倉庫下載下來,不能單獨(dú)下載本實(shí)例對應(yīng)的目錄。
2.2開發(fā)環(huán)境搭建
通過adb shell進(jìn)入板卡開發(fā)環(huán)境,如下圖所示。

通過以下命令,把nfs目錄掛載上nfs服務(wù)器。
mount -t nfs -o nolock : /home/orin-nano/Desktop/nfs/

2.3例程編譯
然后定位到板卡的nfs的掛載目錄(按照實(shí)際掛載目錄),進(jìn)入到對應(yīng)的例程目錄執(zhí)行編譯操作,具體命令如下所示:
cd EASY-EAI-Toolkit-3576/Demos/algorithm-speech_recognition/ ./build.sh

2.4模型部署
要完成算法Demo的執(zhí)行,需要先下載法模型。
百度網(wǎng)盤鏈接為:https://pan.baidu.com/s/1jNjnfjnrmyW3_vvdgEG-rA?pwd=1234 (提取碼:1234)。

同時需要把下載的解碼模型和編碼模型復(fù)制粘貼到Release/目錄:

2.5例程運(yùn)行及效果
進(jìn)入開發(fā)板Release目錄,執(zhí)行下方命令,運(yùn)行示例程序:
cd Release/ ./test-speech_recognition speech_encoder.model speech_decoder.model filters.txt CN.txt cn 1-10-1_CN.wav
運(yùn)行例程命令如下所示:

API的詳細(xì)說明,以及API的調(diào)用(本例程源碼),詳細(xì)信息見下方說明。
3.語音識別API說明
3.1引用方式
為方便客戶在本地工程中直接調(diào)用我們的EASY EAIapi庫,此處列出工程中需要鏈接的庫以及頭文件等,方便用戶直接添加。
選項(xiàng) | 描述 |
| 頭文件目錄 | easyeai-api/algorithm/speech_recognition |
| 庫文件目錄 | easyeai-api/algorithm/speech_recognition |
| 庫鏈接參數(shù) | -lspeech_recognition |
3.2語音識別檢測初始化函數(shù)
設(shè)置語音識別初始化函數(shù)原型如下所示。
int speech_recognition_init(const char *p_encoder_path, const char *p_decoder_path, const char *p_filter_path,
const char *p_vocab_path, rknn_whisper_t *p_whisper);
具體介紹如下所示。
函數(shù)名:speech_recognition_init | |
| 頭文件 | speech_recognition.h |
| 輸入?yún)?shù) | p_encoder_path:編碼模型名字/路徑 |
| 輸入?yún)?shù) | p_decoder_path:解碼模型名字/路徑 |
| 輸入?yún)?shù) | p_filter_path:濾波器頻譜 |
| 輸入?yún)?shù) | p_vocab_path:詞組文件 |
| 輸入?yún)?shù) | p_whisper:語音識別句柄 |
| 返回值 | 成功返回:0 |
| 失敗返回:-1 | |
| 注意事項(xiàng) | 無 |
3.3語音識別運(yùn)行函數(shù)
設(shè)置語音識別運(yùn)行原型如下所示。
int speech_recognition_run(rknn_whisper_t *p_whisper, audio_buffer_t audio, int task_code, std::vector &recognized_text);
具體介紹如下所示。
| 函數(shù)名:speech_recognition_run | |
| 頭文件 | speech_recognition.h |
| 輸入?yún)?shù) | p_whisper:語音識別句柄 |
| 輸入?yún)?shù) | audio:待識別音頻信息 |
| 輸入?yún)?shù) | task_code:語音識別任務(wù) |
| 輸入?yún)?shù) | recognized_text:語音識別結(jié)果 |
| 返回值 | 成功返回:0 |
| 失敗返回:-1 | |
| 注意事項(xiàng) | 無 |
3.4語音識別釋放函數(shù)
設(shè)置語音識別釋放原型如下所示。
int speech_recognition_release(rknn_whisper_t *p_whisper);
具體介紹如下所示。
| 函數(shù)名:speech_recognition_release | |
| 頭文件 | speech_recognition.h |
| 輸入?yún)?shù) | p_whisper:語音識別句柄 |
| 返回值 | 成功返回:0 |
| 失敗返回:-1 | |
| 注意事項(xiàng) | 無 |
- 語音識別算法例程
例程目錄為Demos/algorithm-speech_recognition/test-speech_recognition.cpp,操作流程如下所示:

#include #include #include #include #include #include "sndfile.h" #include "speech_recognition.h" #include "audio_utils.h" int main(int argc, char **argv) { if (argc != 7){ printf("%s \n", argv[0]); printf("Example: %s speech_encoder.model speech_decoder.model filters.txt CN.txt cn 1-10-1_CN.wav\n", argv[0]); return -1; } const char *p_encoder_path = argv[1]; // 編碼模型地址 const char *p_decoder_path = argv[2]; // 解碼模型地址 const char *p_filter_path = argv[3]; // 濾波器頻譜 const char *p_vocab_path = argv[4]; // 詞組文件 const char *p_task = argv[5]; // 識別語種(cn/en) const char *p_audio_path = argv[6]; // 待識別音頻 int task_code = 0; std::vector recognized_text; // Tokenizer 預(yù)定義控制符號(切換語言或任務(wù)) if (strcmp(p_task, "en") == 0){ task_code = 50259; } else if (strcmp(p_task, "cn") == 0){ task_code = 50260; } else{ printf("\n\033[1;33mCurrently only English or Chinese recognition tasks are supported. Please specify as en or zh\033[0m\n"); return -1; } // 讀取音頻,并對音頻進(jìn)行處理 audio_buffer_t audio; int ret = read_audio(p_audio_path, &audio); if (ret != 0){ printf("read audio fail! ret=%d audio_path=%s\n", ret, p_audio_path); return -1; } if (audio.num_channels == 2){ ret = convert_channels(&audio); } if (audio.sample_rate != SAMPLE_RATE){ ret = resample_audio(&audio, audio.sample_rate, SAMPLE_RATE); } // speech recognition初始化 rknn_whisper_t whisper; ret = speech_recognition_init(p_encoder_path, p_decoder_path, p_filter_path, p_vocab_path, &whisper); int iter = 0; for (int i=0; i < 5; i++) { clock_t start = clock(); recognized_text.clear(); // speech recognition語音識別 ret = speech_recognition_run(&whisper, audio, task_code, recognized_text); clock_t end = clock(); // 記錄結(jié)束時間 double infer_time = ((double)(end - start)) / CLOCKS_PER_SEC; // 轉(zhuǎn)換為秒 // 結(jié)果輸出 std::cout << "\nspeech recognition output: "; for (const auto &str : recognized_text){ std::cout << str; } std::cout << std::endl; float audio_length = audio.num_frames / (float)SAMPLE_RATE; // sec audio_length = audio_length > (float)CHUNK_LENGTH ? (float)CHUNK_LENGTH : audio_length; float rtf = infer_time / audio_length; printf("%d, Real Time Factor (RTF): %.3f / %.3f = %.3f\n", iter++, infer_time, audio_length, rtf); } // speech recognition釋放 speech_recognition_release(&whisper); return 0; }
-
語音識別
+關(guān)注
關(guān)注
39文章
1796瀏覽量
115273 -
瑞芯微
+關(guān)注
關(guān)注
26文章
667瀏覽量
53210 -
rk3576
+關(guān)注
關(guān)注
1文章
215瀏覽量
1285
發(fā)布評論請先 登錄
瑞芯微RK3588與RK3576技術(shù)參數(shù)詳解
米爾RK3576和RK3588怎么選?-看這篇就夠了
米爾瑞芯微RK3576實(shí)測輕松搞定三屏八攝像頭
國產(chǎn)開發(fā)板的端側(cè)AI測評-基于米爾瑞芯微RK3576
適配多種系統(tǒng),米爾瑞芯微RK3576核心板解鎖多樣化應(yīng)用
Onenet云網(wǎng)關(guān)方案應(yīng)用--基于米爾瑞芯微RK3576開發(fā)板
新品體驗(yàn) | RK3576開發(fā)板
米爾RK3576開發(fā)板特惠活動!
瑞芯微RK3576與RK3576S有什么區(qū)別,性能參數(shù)配置與型號差異解析

瑞芯微RK3576語音識別算法
評論