97 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# go-tflite
 | 
						|
 | 
						|
Go binding for TensorFlow Lite
 | 
						|
 | 
						|

 | 
						|
 | 
						|
## Usage
 | 
						|
 | 
						|
```go
 | 
						|
model := tflite.NewModelFromFile("sin_model.tflite")
 | 
						|
if model == nil {
 | 
						|
	log.Fatal("cannot load model")
 | 
						|
}
 | 
						|
defer model.Delete()
 | 
						|
 | 
						|
options := tflite.NewInterpreterOptions()
 | 
						|
defer options.Delete()
 | 
						|
 | 
						|
interpreter := tflite.NewInterpreter(model, options)
 | 
						|
defer interpreter.Delete()
 | 
						|
 | 
						|
interpreter.AllocateTensors()
 | 
						|
 | 
						|
v := float64(1.2) * math.Pi / 180.0
 | 
						|
input := interpreter.GetInputTensor(0)
 | 
						|
input.Float32s()[0] = float32(v)
 | 
						|
interpreter.Invoke()
 | 
						|
got := float64(interpreter.GetOutputTensor(0).Float32s()[0])
 | 
						|
```
 | 
						|
 | 
						|
See `_example` for more examples
 | 
						|
 | 
						|
## Requirements
 | 
						|
 | 
						|
* TensorFlow Lite - This release requires 2.2.0-rc3
 | 
						|
 | 
						|
## Tensorflow Installation
 | 
						|
 | 
						|
You must install Tensorflow Lite C API. Assuming the source is under /source/directory/tensorflow
 | 
						|
 | 
						|
```
 | 
						|
$ cd /source/directory/tensorflow
 | 
						|
$ bazel build --config opt --config monolithic tensorflow:libtensorflow_c.so
 | 
						|
```
 | 
						|
 | 
						|
Or to just compile the tensorflow lite libraries:
 | 
						|
```
 | 
						|
$ cd /some/path/tensorflow
 | 
						|
$ bazel build --config opt --config monolithic //tensorflow/lite:libtensorflowlite.so
 | 
						|
$ bazel build --config opt --config monolithic //tensorflow/lite/c:libtensorflowlite_c.so
 | 
						|
```
 | 
						|
 | 
						|
In order for go to find the headers you must set the CGO_CFLAGS environment variable for the source and libraries of tensorflow.
 | 
						|
If your libraries are not installed in a standard location, you must also give the go linker the path to the shared librares
 | 
						|
with the CGO_LDFLAGS environment variable.
 | 
						|
 | 
						|
```
 | 
						|
$ export CGO_CFLAGS=-I/source/directory/tensorflow
 | 
						|
$ export CGO_LDFLAGS=-L/path/to/tensorflow/libaries
 | 
						|
```
 | 
						|
 | 
						|
If you don't love bazel, you can try `Makefile.tflite`. 
 | 
						|
Put this file as `Makefile` in `tensorflow/lite/c`, and run `make`. 
 | 
						|
Sorry, this has not been test for Linux or Mac
 | 
						|
 | 
						|
Then run `go build` on some of the examples.
 | 
						|
 | 
						|
## Edge TPU
 | 
						|
To be able to compile and use the EdgeTPU delegate, you need to install the libraries from here:
 | 
						|
https://github.com/google-coral/edgetpu
 | 
						|
 | 
						|
There is also a deb package here:
 | 
						|
https://coral.withgoogle.com/docs/accelerator/get-started/#1-install-the-edge-tpu-runtime
 | 
						|
 | 
						|
The libraries from should be installed in a system wide library path like `/usr/local/lib`
 | 
						|
The include files should be installed somewhere that is accesable from your CGO include path
 | 
						|
 | 
						|
For x86:
 | 
						|
```
 | 
						|
cd /tmp && git clone https://github.com/google-coral/edgetpu.git && \
 | 
						|
cp edgetpu/libedgetpu/direct/k8/libedgetpu.so.1.0 /usr/local/lib/libedgetpu.so.1.0 && \
 | 
						|
ln -rs /usr/local/lib/libedgetpu.so.1.0 /usr/local/lib/libedgetpu.so.1 && \
 | 
						|
ln -rs /usr/local/lib/libedgetpu.so.1.0 /usr/local/lib/libedgetpu.so && \
 | 
						|
mkdir -p /usr/local/include/libedgetpu && \
 | 
						|
cp edgetpu/libedgetpu/edgetpu.h /usr/local/include/edgetpu.h && \
 | 
						|
cp edgetpu/libedgetpu/edgetpu_c.h /usr/local/include/edgetpu_c.h && \
 | 
						|
rm -Rf edgetpu
 | 
						|
```
 | 
						|
 | 
						|
 | 
						|
## License
 | 
						|
MIT
 | 
						|
 | 
						|
## Author
 | 
						|
Yasuhrio Matsumoto (a.k.a. mattn)
 | 
						|
 |