whisper.cpp/bindings/java
Nicholas Albion bc89f285d8
bindings : add java bindings (#931)
* WIP - java bindings

* updated README

* failed attempt at JNI

* fullTranscribe() test passes

* tested on Ubuntu 20

* link to Java bindings
2023-05-20 18:25:02 +03:00
..
.idea bindings : add java bindings (#931) 2023-05-20 18:25:02 +03:00
gradle/wrapper bindings : add java bindings (#931) 2023-05-20 18:25:02 +03:00
src bindings : add java bindings (#931) 2023-05-20 18:25:02 +03:00
build.gradle bindings : add java bindings (#931) 2023-05-20 18:25:02 +03:00
CMakeLists.txt bindings : add java bindings (#931) 2023-05-20 18:25:02 +03:00
gradle.properties bindings : add java bindings (#931) 2023-05-20 18:25:02 +03:00
gradlew bindings : add java bindings (#931) 2023-05-20 18:25:02 +03:00
gradlew.bat bindings : add java bindings (#931) 2023-05-20 18:25:02 +03:00
README.md bindings : add java bindings (#931) 2023-05-20 18:25:02 +03:00
settings.gradle bindings : add java bindings (#931) 2023-05-20 18:25:02 +03:00

Java JNI bindings for Whisper

This package provides Java JNI bindings for whisper.cpp. They have been tested on:

  • Darwin (OS X) 12.6 on x64_64
  • Ubuntu on x86_64
  • Windows on x86_64

The "low level" bindings are in WhisperCppJnaLibrary and WhisperJavaJnaLibrary which caches whisper_full_params and whisper_context in whisper_java.cpp.

There are a lot of classes in the callbacks, ggml, model and params directories but most of them have not been tested.

The most simple usage is as follows:

import io.github.ggerganov.whispercpp.WhisperCpp;

public class Example {

    public static void main(String[] args) {
        String modelpath;
        WhisperCpp whisper = new WhisperCpp();
        // By default, models are loaded from ~/.cache/whisper/ and are usually named "ggml-${name}.bin"
        // or you can provide the absolute path to the model file.
        whisper.initContext("base.en"); 
        
        long context = whisper.initContext(modelpath);
        try {
            whisper.fullTranscribe(context, samples);
            
            int segmentCount = whisper.getTextSegmentCount(context);
            for (int i = 0; i < segmentCount; i++) {
                String text = whisper.getTextSegment(context, i);
                System.out.println(segment.getText());
            }
        } finally {
             whisper.freeContext(context);
        }
     }
}

Building & Testing

In order to build, you need to have the JDK 8 or higher installed. Run the tests with:

git clone https://github.com/ggerganov/whisper.cpp.git
cd whisper.cpp/bindings/java

mkdir build
pushd build
cmake ..
cmake --build .
popd

./gradlew build

License

The license for the Go bindings is the same as the license for the rest of the whisper.cpp project, which is the MIT License. See the LICENSE file for more details.