1.下載vosk的model
vosk官網:https://alphacephei.com/vosk/models
我這里使用較小的vosk-model-small-cn-0.22
2.添加相關pom文件
<!-- 獲取音頻信息 --><dependency><groupId>org</groupId><artifactId>jaudiotagger</artifactId><version>2.0.3</version></dependency><!-- 語音識別 --><dependency><groupId>net.java.dev.jna</groupId><artifactId>jna</artifactId><version>5.16.0</version></dependency><dependency><groupId>com.alphacephei</groupId><artifactId>vosk</artifactId><version>0.3.45</version></dependency>
3.代碼
添加model和使用的音頻,我這里用的wav格式的,不同格式的參數會不一樣
import org.vosk.LibVosk;
import org.vosk.LogLevel;
import org.vosk.Model;
import org.vosk.Recognizer;import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.UnsupportedAudioFileException;
import java.io.*; public class testVosk {public static void main(String[] argv) throws IOException, UnsupportedAudioFileException {LibVosk.setLogLevel(LogLevel.DEBUG);try (Model model = new Model("E:\\srk\\bigData\\vosk-model-small-cn-0.22");InputStream fis = AudioSystem.getAudioInputStream(new BufferedInputStream(new FileInputStream("C:\\Users\\Administrator\\Downloads\\mdhs1-5ob2k.wav")));Recognizer recognizer = new Recognizer(model, 16000)) {int bytes;byte[] b = new byte[4096];while ((bytes = fis.read(b)) >= 0) {if (recognizer.acceptWaveForm(b, bytes)) {System.out.println(recognizer.getResult());} else {System.out.println(recognizer.getPartialResult());}}String result = recognizer.getFinalResult();System.out.println(result);}}
}
4.可能遇到的問題
1.亂碼,我搞了半天(捂臉)
因為jdk17以后編號的模式改了,所以在網上找了各種設置編碼的格式都沒有生效。
比如jvm設置 -Dfile.encoding=UTF-8都沒生效。
-Dfile.encoding=UTF-8
jdk17以前的還是正常的。
解決方法:
-
win系統控制面板找到“區域與語言設置”
-
在彈出框中選擇更改系統區域設置
-
勾選beta使用utf-8
5.相關資料
- gitcode相關api