最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot集成語音識別模型FunASR的過程詳解

 更新時間:2025年08月25日 14:42:22   作者:智_永無止境  
文章介紹了在SpringBoot中集成FunASR語音識別模型的實踐,重點解決Java客戶端兼容性問題、Docker部署參數(shù)配置及序列化異常,最終實現(xiàn)模型成功運行并處理識別結(jié)果,感興趣的朋友跟隨小編一起看看吧

01 引言

應(yīng)以為粉絲朋友要求,我們一起學習搭建了一個語言識別模型,并集成SpringBoot項目中。在搭建過程中遇到不少問題,總結(jié)一下分享給其他需要的朋友。

官網(wǎng)的給出的Java客戶端稍微有點問題,并不能接受到大模型識別的反饋。網(wǎng)上的相關(guān)的技術(shù)博客也很少,這里幫大家把坑點填平,本文一片文章助你輕松拿下FunASR

02 FunASR簡介

FunASR是一個基礎(chǔ)語音識別工具包,提供多種功能,包括語音識別(ASR)、語音端點檢測(VAD)、標點恢復(fù)、語言模型、說話人驗證、說話人分離和多人對話語音識別等。FunASR提供了便捷的腳本和教程,支持預(yù)訓(xùn)練好的模型的推理與微調(diào)。更是通過CPU可以直接跑起來的大模型。

FunASR旨在通過語音識別的學術(shù)研究和工業(yè)應(yīng)用之間架起一座橋梁。通過發(fā)布工業(yè)級語音識別模型的訓(xùn)練和微調(diào),研究人員和開發(fā)人員可以更方便地進行語音識別模型的研究和生產(chǎn),并推動語音識別生態(tài)的發(fā)展。讓語音識別更有趣!

開源倉庫地址:https://github.com/modelscope/FunASR

03 FunASR 部署

我們采用Docker技術(shù)直接部署,部署的官方指導(dǎo)文檔:

https://github.com/modelscope/FunASR/blob/main/runtime/docs/SDK_advanced_guide_online_zh.md

Docker安裝的本章不在贅述,之前的文章中已經(jīng)介紹過安裝過程。

3.1 拉取鏡像并啟動

我們這里使用的是cpu版本的模型:funasr-runtime-sdk-online-cpu-0.1.13。直接拉取鏡像并啟動:

#拉取鏡像
sudo docker pull \
  registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-cpu-0.1.13
# 創(chuàng)建保存模型的文件夾
mkdir -p ./funasr-runtime-resources/models
# 掛載啟動鏡像
sudo docker run -p 10096:10095 -it --privileged=true \
  -v $PWD/funasr-runtime-resources/models:/workspace/models \
  registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-cpu-0.1.13

3.2 啟動服務(wù)端

docker啟動之后,啟動 funasr-wss-server-2pass服務(wù)程序。

因為docker啟動之后,直接進入到workspace下??梢岳^續(xù)使用cd 等命令

啟動腳本

cd FunASR/runtime
nohup bash run_server_2pass.sh \
  --certfile 0 \
  --download-model-dir /workspace/models \
  --vad-dir damo/speech_fsmn_vad_zh-cn-16k-common-onnx \
  --model-dir damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-onnx  \
  --online-model-dir damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online-onnx  \
  --punc-dir damo/punc_ct-transformer_zh-cn-common-vad_realtime-vocab272727-onnx \
  --lm-dir damo/speech_ngram_lm_zh-cn-ai-wesp-fst \
  --itn-dir thuduj12/fst_itn_zh \
  --hotword /workspace/models/hotwords.txt > log.txt 2>&1 &
# 如果您想關(guān)閉ssl,增加參數(shù):--certfile 0
# 如果您想使用SenseVoiceSmall模型、時間戳、nn熱詞模型進行部署,請設(shè)置--model-dir為對應(yīng)模型:
#   iic/SenseVoiceSmall-onnx
#   damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-onnx(時間戳)
#   damo/speech_paraformer-large-contextual_asr_nat-zh-cn-16k-common-vocab8404-onnx(nn熱詞)
# 如果您想在服務(wù)端加載熱詞,請在宿主機文件./funasr-runtime-resources/models/hotwords.txt配置熱詞(docker映射地址為/workspace/models/hotwords.txt):
#   每行一個熱詞,格式(熱詞 權(quán)重):阿里巴巴 20(注:熱詞理論上無限制,但為了兼顧性能和效果,建議熱詞長度不超過10,個數(shù)不超過1k,權(quán)重1~100)
# SenseVoiceSmall-onnx識別結(jié)果中“<|zh|><|NEUTRAL|><|Speech|> ”分別為對應(yīng)的語種、情感、事件信息

這里的腳本比官網(wǎng)上增加了--certfile 0,用來關(guān)閉ssl

啟動之后,可能需要等一會。直到服務(wù)啟動起來,我們可以直接使用命令直接看看日志詳情:

tail -f log.txt

直到出現(xiàn)模型初始化成功表示啟動成功,如圖:

3.3 客戶端測試

官方提供了多個客戶端,我們選擇最簡單的H5客戶端測試大模型是否部署成功

Html客戶端我們可以從GitHub直接下載,也可以從docker里面的下載,說明文檔里面也給了鏈接:

wget https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/sample/funasr_samples.tar.gz

瀏覽器里面直接訪問Url,自動下載壓縮包。打開里面的Html即可:

下載的samples喜下面還包含了,離線的.wav后綴的audio語音文件。

測試

到這里,說明我們部署的語音大模型FunASR就已經(jīng)成功了。

04 SpringBoot集成FunASR

FunASR的部署得益于Docker的容器化部署,幾乎不會有問題。但是當與SpringBoot集成的時候,才是惡夢的開始。我們一起看看Java客戶端。

Java的客戶端是讓我們將Java代碼構(gòu)建成shell命令,這并不是我們想要的。好在Github上提供了Java的案例

地址:https://github.com/modelscope/FunASR/tree/main/runtime/java/java_http2ws_src

4.1 踩坑1

代碼里面的關(guān)鍵類:RecognitionServiceImpl

多么優(yōu)秀的代碼,直接拷貝到自己的項目中。為了能夠就減少問題,特意看了官方依賴的Maven。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20240303</version>
</dependency>

筆者這里采用單元測試的方式,使用的SpringBoot版本是2.6.13。

standardWebSocketClient.execute()報錯,最終采用了劃紅線的方法代替。

4.2 踩坑2

按照官方的模版代碼,修正了錯誤之后,正常連接Websocket:

發(fā)現(xiàn)連上websocket,但是沒有數(shù)據(jù)返回。這是最大的坑。

由于我們對接的事實時語音識別,服務(wù)端使用的是socket協(xié)議,我們看看官方文檔的參數(shù)說明:

地址:https://github.com/modelscope/FunASR/blob/main/runtime/docs/websocket_protocol_zh.md

{
    "mode": "2pass",
    "wav_name": "wav_name",
    "is_speaking": true,
    "wav_format": "pcm",
    "chunk_size": [5,10,5],
    "hotwords": "{\"阿里巴巴\":20,\"通義實驗室\":30}",
    "itn": true
}

參數(shù)說明:

  • modeoffline,表示推理模式為一句話識別;online,表示推理模式為實時語音識別;2pass:表示為實時語音識別,并且說話句尾采用離線模型進行糾錯。
  • wav_name:表示需要推理音頻文件名
  • wav_format:表示音視頻文件后綴名,只支持pcm音頻流
  • is_speaking:表示斷句尾點,例如,vad切割點,或者一條wav結(jié)束
  • chunk_size:表示流式模型latency配置,[5,10,5],表示當前音頻為600ms,并且回看300ms,又看300ms
  • audio_fs:當輸入音頻為pcm數(shù)據(jù)是,需要加上音頻采樣率參數(shù)
  • hotwords:如果使用熱詞,需要向服務(wù)端發(fā)送熱詞數(shù)據(jù)(字符串),格式為 “{“阿里巴巴”:20,“通義實驗室”:30}”
  • itn: 設(shè)置是否使用itn,默認True
  • svs_lang: 設(shè)置SenseVoiceSmall模型語種,默認為“auto”
  • svs_itn: 設(shè)置SenseVoiceSmall模型是否開啟標點、ITN,默認為True

對比參數(shù)發(fā)現(xiàn),案例的入?yún)⒑臀臋n說明的入?yún)⒉盍艘粋€chunk_size,我們加上參數(shù)看看結(jié)果:

結(jié)果發(fā)現(xiàn)直到導(dǎo)致服務(wù)異常了,服務(wù)器上可以看出json參數(shù)異常了。我們打印出參數(shù)看看參數(shù)看看:

傳遞的數(shù)據(jù)結(jié)果變成了內(nèi)存地址了,我們不用官方提供的,我們直接用fastjson2序列化,只要保證數(shù)組打印出來的是數(shù)組的值就好了。

測試結(jié)果終于正常了:

但是chunk_size到底是什么?雖然官方給了解釋,但是還是一頭霧水,又從官方主頁里面找到了相關(guān)的解釋,終于有了一點點了解,但還是懵逼狀態(tài)。

小編簡單以為:就是控制返回文字的頻率和時間的一個指標

4.3 踩坑3

識別結(jié)果的處理:官方demo加了TODO,可能就會有人問到,這里獲取不到結(jié)果怎么處理?

真正接收識別結(jié)果的事圖中黃色的WebSocketClient,那我們?nèi)绾螌⒆R別的結(jié)果傳到指定的位置呢?

具體實現(xiàn)可以通過java.util.concurrent.CompletableFuture實現(xiàn),具體不在贅述。

到此這篇關(guān)于SpringBoot集成語音識別模型FunASR的文章就介紹到這了,更多相關(guān)SpringBoot語音識別模型FunASR內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java調(diào)用Python腳本傳遞數(shù)據(jù)并返回計算結(jié)果

    Java調(diào)用Python腳本傳遞數(shù)據(jù)并返回計算結(jié)果

    實際工程項目中可能會用到Java和python兩種語言結(jié)合進行,這樣就會涉及到一個問題,Java如何調(diào)用Python腳本,感興趣的可以了解一下
    2021-05-05
  • 如何在Java中實現(xiàn)一個散列表

    如何在Java中實現(xiàn)一個散列表

    這篇文章主要介紹了如何在Java中實現(xiàn)一個散列表,建一個HashMap,以String類型為Key,Int類型為Value,下文具體的操作過程需要的小伙伴可以參考一下
    2022-04-04
  • SpringBoot解決跨域問題小結(jié)

    SpringBoot解決跨域問題小結(jié)

    在現(xiàn)代Web應(yīng)用中,由于安全性和隱私的考慮,瀏覽器限制了從一個域向另一個域發(fā)起的跨域HTTP請求,Spring?Boot提供了多種方式來處理跨域請求,本文將介紹其中的幾種方法,感興趣的朋友一起看看吧
    2023-12-12
  • SVN報錯:Error Updating changes:svn:E155037的解決方案

    SVN報錯:Error Updating changes:svn:E155037的解決方案

    今天小編就為大家分享一篇關(guān)于SVN報錯:Error Updating changes:svn:E155037的解決方案,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java Servlet中Response對象的使用方法

    Java Servlet中Response對象的使用方法

    本文介紹了Java Servlet中Response對象的使用方法,包括設(shè)置響應(yīng)頭、設(shè)置響應(yīng)編碼、向客戶端發(fā)送數(shù)據(jù)、重定向等操作,同時介紹了常用的響應(yīng)狀態(tài)碼和響應(yīng)類型,幫助讀者更好地理解和掌握Servlet中Response對象的用法
    2023-05-05
  • java解析xml常用的幾種方式總結(jié)

    java解析xml常用的幾種方式總結(jié)

    這篇文章主要介紹了java解析xml常用的幾種方式總結(jié),有需要的朋友可以參考一下
    2013-11-11
  • springboot dynamic多數(shù)據(jù)源demo以及常見切換、事務(wù)的問題

    springboot dynamic多數(shù)據(jù)源demo以及常見切換、事務(wù)的問題

    這篇文章主要介紹了springboot dynamic多數(shù)據(jù)源demo以及常見切換、事務(wù)的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 解決bufferedReader.readLine()讀到最后發(fā)生阻塞的問題

    解決bufferedReader.readLine()讀到最后發(fā)生阻塞的問題

    這篇文章主要介紹了解決bufferedReader.readLine()讀到最后發(fā)生阻塞的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java微信公眾號安全模式消息解密

    Java微信公眾號安全模式消息解密

    這篇文章主要為大家詳細介紹了Java微信公眾號安全模式消息解密,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 查看SpringBoot和JDK版本對應(yīng)關(guān)系的方法

    查看SpringBoot和JDK版本對應(yīng)關(guān)系的方法

    在進行一些自主學習的時候,發(fā)現(xiàn)使用maven方式創(chuàng)建的SpringBoot項目啟動失敗,最終發(fā)現(xiàn)是SpringBoot版本和JDK版本不對應(yīng)導(dǎo)致的,所以本文就給大家介紹了如何查看SpringBoot和JDK版本的對應(yīng)關(guān)系,需要的朋友可以參考下
    2024-03-03

最新評論

开原市| 龙川县| 冕宁县| 河源市| 湘西| 师宗县| 旅游| 鄢陵县| 湘乡市| 衡山县| 宁乡县| 武夷山市| 板桥市| 瓦房店市| 汉川市| 迁安市| 河间市| 青川县| 常山县| 南涧| 龙游县| 正蓝旗| 灵川县| 镇康县| 克东县| 旺苍县| 翼城县| 浙江省| 崇州市| 潞城市| 大埔区| 依兰县| 江山市| 怀远县| 大新县| 兰西县| 涿鹿县| 皮山县| 海林市| 佛学| 清新县|