0

我尝试运行 Mozilla deepspeech 的实时转录,但我遇到了一些问题。这是类代码:

import org.mozilla.deepspeech.libdeepspeech.DeepSpeechModel;
import org.mozilla.deepspeech.libdeepspeech.DeepSpeechStreamingState;

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

public class Handler implements Runnable {
    private DeepSpeechModel model;
    private AudioInputStream audio;
    private boolean active = false;
    private String slash;

    public Handler(String slash){
        this.slash=slash;
    }


    @Override
    public void run() {
        active = true;
        //model = new DeepSpeechModel("G:"+slash+"deepspeech"+slash+"deepspeech-0.7.0-models.pbmm", 50);
        model=new DeepSpeechModel("/home/jochen/deepspeech/deepspeech-0.7.1-models.pbmm");
        DeepSpeechStreamingState state = model.createStream();
        int sampleRate = 16000;
        AudioFormat format = new AudioFormat(sampleRate, 16, 1, true, false);
        DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);

        if (!AudioSystem.isLineSupported(info)) {
            System.out.println("Line not supported");
            System.exit(0);
        }

        TargetDataLine line = null;
        try {
            line = (TargetDataLine) AudioSystem.getLine(info);
        } catch (LineUnavailableException e) {
            e.printStackTrace();
        }
        try {
            line.open(format);
        } catch (LineUnavailableException e) {
            e.printStackTrace();
        }
        line.start();

        AudioInputStream audio = new AudioInputStream(line);
        while (active) {
            byte[] bytes = new byte[16];
            short[] buffer = new short[8];
            try {
                audio.read(bytes);
            } catch (IOException e) {
                e.printStackTrace();
            }
            for (int i = 0; i < buffer.length; i++) {
                buffer[i] = (short) ((buffer[i * 2] & 0xff) | (buffer[i * 2 + 1] << 8));
            }
            model.feedAudioContent(state, buffer, 8);
            System.out.println(model.intermediateDecode(state));
        }
        System.out.println("final:" + model.finishStream(state));
    }

    public void stopTranscription() {
        active = false;
    }

    public static void main(String[] args) {
        Handler handler = new Handler("\\");
        Thread thr = new Thread(handler);
        thr.start();
        try {
            Thread.sleep(6000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        handler.stopTranscription();
    }

}

对不起,我是新来的。所以我在 /usr/lib 中放了两个 .so 文件,名为 libdeepspeech.so 和 libdeepspeech-jni.so。然后我得到了错误,没有liblog.so。所以我也把这个来自 android-ndk 的文件放在 /usr/lib 中。但这是我的问题:我在 /usr/lib 中做了 32 位 liblog.so,所以出现以下错误:

Exception in thread "Thread-0" java.lang.UnsatisfiedLinkError: /usr/lib/libdeepspeech-jni.so: liblog.so: falsche ELF-Klasse: ELFCLASS32
    at java.base/java.lang.ClassLoader$NativeLibrary.load0(Native Method)
    at java.base/java.lang.ClassLoader$NativeLibrary.load(ClassLoader.java:2452)
    at java.base/java.lang.ClassLoader$NativeLibrary.loadLibrary(ClassLoader.java:2508)
    at java.base/java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2704)
    at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2669)
    at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:807)
    at java.base/java.lang.System.loadLibrary(System.java:1907)
    at org.mozilla.deepspeech.libdeepspeech.DeepSpeechModel.<clinit>(DeepSpeechModel.java:9)
    at ProjectAthene.ebene1.deepspeech.Handler.run(Handler.java:24)
    at java.base/java.lang.Thread.run(Thread.java:832)

Process finished with exit code 0

所以我想我必须把64位的liblog.so放在/usr/lib中,但是他的错误发生了:

Exception in thread "Thread-0" java.lang.UnsatisfiedLinkError: /usr/lib/libdeepspeech-jni.so: liblog.so: Kann die Shared-Object-Datei nicht öffnen: Datei oder Verzeichnis nicht gefunden
    at java.base/java.lang.ClassLoader$NativeLibrary.load0(Native Method)
    at java.base/java.lang.ClassLoader$NativeLibrary.load(ClassLoader.java:2452)
    at java.base/java.lang.ClassLoader$NativeLibrary.loadLibrary(ClassLoader.java:2508)
    at java.base/java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2704)
    at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2669)
    at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:807)
    at java.base/java.lang.System.loadLibrary(System.java:1907)
    at org.mozilla.deepspeech.libdeepspeech.DeepSpeechModel.<clinit>(DeepSpeechModel.java:9)
    at ProjectAthene.ebene1.deepspeech.Handler.run(Handler.java:24)
    at java.base/java.lang.Thread.run(Thread.java:832)

Process finished with exit code 0 

是的,.so 文件和 android-ndk 一起在 /usr/lib 中。有人知道如何解决这个问题吗?我也可以使用全新的代码,但它必须是在说话期间进行的实时转录。类似于 aws 或 google 的 live-transcribe-speech-engine 之类的东西。我希望你能帮帮我!

祝你有美好的一天,对不起我的英语不好!

4

0 回答 0