whisper.cpp/bindings/java
Akash Mahajan c8d0f5fe98
whisper : support speaker segmentation (local diarization) of mono audio via tinydiarize (#1058)
* add HuggingFace mirror to download  ggml model

* support tdrz via simple hack overriding solm tokens

* fix incorrect translate/transcribe token_ids that are not static const

* add apollo 13 sample for tdrz demo

* render [SPEAKER TURN] consistently in all terminal output using vocab.id_to_token

* extend whisper_segment with speaker_turn_next field and save in json output

* fix failing go build

* slipped in some python syntax whoops

* whisper : finalize tinydiarize support (add flag + fixes)

* whisper : tdrz support for word-level timestamps (respect max_len)

* java : try to fix tests after adding tdrz_enable flag

* main : remove TODO leftover

* java : fix params order list after adding "tdrz_enable"

* whisper : fix solm and add nosp token

* main : print tinydiarize help

---------

Co-authored-by: Georgi Gerganov <ggerganov@gmail.com>
2023-07-04 09:45:00 +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 whisper : support speaker segmentation (local diarization) of mono audio via tinydiarize (#1058) 2023-07-04 09:45:00 +03:00
build.gradle Feature/java bindings2 (#944) 2023-05-29 09:38:58 +10: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 updated java README 2023-06-06 10:27:26 +10: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. The most simple usage is as follows:

JNA will attempt to load the whispercpp shared library from:

  • jna.library.path
  • jna.platform.library
  • ~/Library/Frameworks
  • /Library/Frameworks
  • /System/Library/Frameworks
  • classpath
import io.github.ggerganov.whispercpp.WhisperCpp;

public class Example {

    public static void main(String[] args) {
        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.
        long context = whisper.initContext("base.en");
        try {
            var whisperParams = whisper.getFullDefaultParams(WhisperSamplingStrategy.WHISPER_SAMPLING_GREEDY);
            // custom configuration if required
            whisperParams.temperature_inc = 0f;
            
            var samples = readAudio(); // divide each value by 32767.0f
            whisper.fullTranscribe(whisperParams, 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

./gradlew build

You need to have the whisper library in your JNA library path. On Windows the dll is included in the jar and you can update it:

copy /y ..\..\build\bin\Release\whisper.dll build\generated\resources\main\win32-x86-64\whisper.dll

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.