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以前的还是正常的。
解决方法1:
-
win系统控制面板找到“区域与语言设置”
-
在弹出框中选择更改系统区域设置
-
勾选beta使用utf-8
解决方法2:
5.相关资料
- gitcode相关api