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