whisper.cpp/bindings/go
sandrohanea 59fdcd19c8
whisper : add whisper_state + default state on the whisper_context (#523)
* Added whisper state + default state on the whisper_context

* Fixed some examples and bindings

* Fixed whisper_n_len (which was used in some binding) and added whisper_n_len_from_state

* Fixed comments

* whisper : reuse kv_cache_free() and fix compiler warnings

* whisper : clean-up the API comments

---------

Co-authored-by: Sandro Hanea <sandrohanea@microsoft.com>
Co-authored-by: Georgi Gerganov <ggerganov@gmail.com>
2023-03-05 21:42:19 +02:00
..
examples go : add wrapper for system info (#456) 2023-01-28 18:44:56 +02:00
pkg/whisper go : NewContext now returns a clean context (#537) 2023-03-05 20:50:25 +02:00
samples go : run go mod tidy before building examples + fix permissions (#296) 2022-12-22 16:34:20 +02:00
.gitignore go : bindings updated so they can be used in third party packages. (#379) 2023-01-06 19:32:28 +02:00
doc.go bindings : initial import of golang bindings (#287) 2022-12-20 08:54:33 +02:00
go.mod go : run go mod tidy before building examples + fix permissions (#296) 2022-12-22 16:34:20 +02:00
go.sum go : bindings updated so they can be used in third party packages. (#379) 2023-01-06 19:32:28 +02:00
LICENSE go : run go mod tidy before building examples + fix permissions (#296) 2022-12-22 16:34:20 +02:00
Makefile go : bindings updated so they can be used in third party packages. (#379) 2023-01-06 19:32:28 +02:00
params.go go : support "auto" as an option when set language (#462) 2023-02-04 09:09:27 +02:00
README.md go : bindings updated so they can be used in third party packages. (#379) 2023-01-06 19:32:28 +02:00
whisper_test.go go : bindings updated so they can be used in third party packages. (#379) 2023-01-06 19:32:28 +02:00
whisper.go whisper : add whisper_state + default state on the whisper_context (#523) 2023-03-05 21:42:19 +02:00

Go bindings for Whisper

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

  • Darwin (OS X) 12.6 on x64_64
  • Debian Linux on arm64
  • Fedora Linux on x86_64

The "low level" bindings are in the bindings/go directory and there is a more Go-style package in the bindings/go/pkg/whisper directory. The most simple usage is as follows:

import (
	"github.com/ggerganov/whisper.cpp/bindings/go/pkg/whisper"
)

func main() {
	var modelpath string // Path to the model
	var samples []float32 // Samples to process

	// Load the model
	model, err := whisper.New(modelpath)
	if err != nil {
		panic(err)
	}
	defer model.Close()

	// Process samples
	context, err := model.NewContext()
	if err != nil {
		panic(err)
	}
	if err := context.Process(samples, nil); err != nil {
		return err
	}

	// Print out the results
	for {
		segment, err := context.NextSegment()
		if err != nil {
			break
		}
		fmt.Printf("[%6s->%6s] %s\n", segment.Start, segment.End, segment.Text)
	}
}

Building & Testing

In order to build, you need to have the Go compiler installed. You can get it from here. Run the tests with:

git clone https://github.com/ggerganov/whisper.cpp.git
cd whisper.cpp/bindings/go
make test

This will compile a static libwhisper.a in a build folder, download a model file, then run the tests. To build the examples:

make examples

The examples are placed in the build directory. Once built, you can download all the models with the following command:

./build/go-model-download -out models

And you can then test a model against samples with the following command:

./build/go-whisper -model models/ggml-tiny.en.bin samples/jfk.wav 

Using the bindings

To use the bindings in your own software,

  1. Import github.com/ggerganov/whisper.cpp/bindings/go/pkg/whisper (or github.com/ggerganov/whisper.cpp/bindings/go into your package;
  2. Compile libwhisper.a (you can use make whisper in the bindings/go directory);
  3. Link your go binary against whisper by setting the environment variables C_INCLUDE_PATH and LIBRARY_PATH to point to the whisper.h file directory and libwhisper.a file directory respectively.

Look at the Makefile in the bindings/go directory for an example.

The API Documentation:

Getting help:

  • Follow the discussion for the go bindings here

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.