2024-12-31 11:01

vosk--离线语言模型--语音文件转文字

码自答

JavaEE

(73)

(0)

收藏

目前流行的语音文件转文字,方式有两种,一种在线方式。一种离线方式。

在线方式:表示将语音文件上传到服务器,服务器转换成文字,在发送会请求端,目前有百度AI,科大讯飞,Goole等。

离线方式 : 下载语音模型到本地,在本地实现语音转文字,例如vosk


本文采用vosk提供的语音模型,实现本地语音转换文字。

1 在vosk官网下载语音模型

   https://alphacephei.com/vosk/models

  找到中文语音模型,简体中文有两个,一个标准版,一个精简版:

  image.png

  下载语音模型,并解压,我下载的精简版


2 Java编程

package com.wanmait.soundToText;

import org.jaudiotagger.audio.AudioFile;
import org.jaudiotagger.audio.wav.WavFileReader;
import org.vosk.LibVosk;
import org.vosk.LogLevel;
import org.vosk.Model;
import org.vosk.Recognizer;

import javax.sound.sampled.AudioSystem;
import java.io.*;

public class MainTest {

    /**
     * 获取采样率,采样率为音频采样率的声道倍数
     */
    private static  Float getSampleRate(File file) throws Exception {
        WavFileReader fileReader = new WavFileReader();
        AudioFile audioFile = fileReader.read(file);
        String sampleRate = audioFile.getAudioHeader().getSampleRate();
        String channel = audioFile.getAudioHeader().getChannels();
        System.out.println("语音的声道:" + channel );
        System.out.println("语音的采样率:" + sampleRate);
        return Float.parseFloat(sampleRate) * Integer.parseInt(channel);
    }


        public static void main(String[] args) {
            LibVosk.setLogLevel(LogLevel.DEBUG);
            File file = new File("C:\\userTest\\temp\\1.wav");//语音文件仅支持wav
            try (Model model = new Model("C:\\userTest\\temp\\vosk-model-small-cn-0.22");//模型地址
                 InputStream ais = AudioSystem.getAudioInputStream(new BufferedInputStream(new FileInputStream(file)));
                 Recognizer recognizer = new Recognizer(model, getSampleRate(file))) {
                
                int bytes;
                byte[] b = new byte[4096];//缓存大小:4k
                while ((bytes = ais.read(b)) >= 0) {
                    recognizer.acceptWaveForm(b, bytes);
                }
                System.out.println(recognizer.getFinalResult() );
            } catch (Exception e) {
                e.printStackTrace();
            }
        }



    }


image.png


注意:只能读取wav格式的音频文件


0条评论

点击登录参与评论