Deepspeech java .lang.UnsatisfiedLinkError: /usr/lib/libdeepspeech-jni.so: liblog.so: неправильный ELF-класс: ELFCLASS32 - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь запустить живую транскрипцию 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();
    }

}

Извините, я здесь новенький. Поэтому я поместил два .so-файла в / usr / lib, которые называются libdeepspeech.so и libdeepspeech-jni.so. Затем я получил ошибку, что нет liblog.so. Поэтому я тоже поместил этот файл из android -ndk в / usr / lib. Но вот моя проблема: я сделал 32-битный liblog.so в / usr / lib, поэтому я получил следующую ошибку:

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 действительно находится в / usr / lib вместе с android -ndk. Кто-нибудь знает, как это исправить? Я тоже согласен с полностью новым кодом, но он должен быть живой транскрипцией во время выступления. Что-то вроде aws или движка живой-расшифровки-речи от Google. Надеюсь, вы можете мне помочь!

Хорошего дня и извините за мой плохой английский sh!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...