/
inference_engine.go
executable file
·127 lines (104 loc) · 3.45 KB
/
inference_engine.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package ie
/*
#include <stdlib.h>
#include "inference_engine.h"
*/
import (
"C"
)
import (
"os"
"unsafe"
)
// Version returns the current Inference Engine library version
func Version() string {
return C.GoString(C.IEVersion())
}
// InferenceEnginePluginDispatcher is a wrapper around InferenceEngine::InferenceEnginePluginDispatcher.
type InferenceEnginePluginDispatcher struct {
// C.InferenceEnginePluginDispatcher
p unsafe.Pointer
}
// DefaultLibPath returns the usual lib path for Ubuntu
func DefaultLibPath() string {
return os.Getenv("INTEL_CVSDK_DIR") + "/deployment_tools/inference_engine/lib/ubuntu_16.04/intel64"
}
// NewInferenceEnginePluginDispatcher returns a new OpenVINO InferenceEnginePluginDispatcher.
func NewInferenceEnginePluginDispatcher(libpath string) InferenceEnginePluginDispatcher {
cLibPath := C.CString(libpath)
defer C.free(unsafe.Pointer(cLibPath))
pd := C.InferenceEnginePluginDispatcher_New(cLibPath)
return InferenceEnginePluginDispatcher{p: unsafe.Pointer(pd)}
}
// Close InferenceEnginePluginDispatcher.
func (pd InferenceEnginePluginDispatcher) Close() error {
pd.p = nil
return nil
}
// GetPluginByDevice from InferenceEnginePluginDispatcher.
func (pd InferenceEnginePluginDispatcher) GetPluginByDevice(device string) InferenceEnginePlugin {
cDevice := C.CString(device)
defer C.free(unsafe.Pointer(cDevice))
pu := C.InferenceEnginePluginDispatcher_GetPluginByDevice((*C.InferenceEnginePluginDispatcher)(pd.p), cDevice)
return InferenceEnginePlugin{p: unsafe.Pointer(pu)}
}
// InferenceEnginePlugin is a wrapper around InferenceEngine::InferenceEnginePluginPtr.
type InferenceEnginePlugin struct {
// C.InferenceEnginePluginPtr
p unsafe.Pointer
}
// Close InferenceEnginePlugin.
func (pu InferenceEnginePlugin) Close() error {
pu.p = nil
return nil
}
// CNNNetReader is a wrapper around InferenceEngine::CNNNetReader.
type CNNNetReader struct {
// C.CNNNetReader
p unsafe.Pointer
}
// NewCNNNetReader returns a new OpenVINO CNNNetReader.
func NewCNNNetReader() CNNNetReader {
return CNNNetReader{p: unsafe.Pointer(C.CNNNetReader_New())}
}
// Close CNNNetReader.
func (r *CNNNetReader) Close() error {
r.p = nil
return nil
}
// ReadNetwork reads a IR model into a CNNNetReader.
func (r *CNNNetReader) ReadNetwork(modelFile string) error {
cModelFile := C.CString(modelFile)
defer C.free(unsafe.Pointer(cModelFile))
C.CNNNetReader_ReadNetwork((*C.CNNNetReader)(r.p), cModelFile)
return nil
}
// ReadWeights reads IR bin file into a CNNNetReader.
func (r *CNNNetReader) ReadWeights(weightsFile string) error {
cWeightsFile := C.CString(weightsFile)
defer C.free(unsafe.Pointer(cWeightsFile))
C.CNNNetReader_ReadWeights((*C.CNNNetReader)(r.p), cWeightsFile)
return nil
}
// GetNetwork returns a the CNNNetwork that has been loaded up using the CNNNetReader.
func (r *CNNNetReader) GetNetwork() CNNNetwork {
return CNNNetwork{p: unsafe.Pointer(C.CNNNetReader_GetNetwork((*C.CNNNetReader)(r.p)))}
}
// CNNNetwork is a wrapper around InferenceEngine::CNNNetwork.
type CNNNetwork struct {
// C.CNNNetwork
p unsafe.Pointer
}
// NewCNNNetwork returns a new OpenVINO CNNNetwork.
func NewCNNNetwork() CNNNetwork {
return CNNNetwork{} //CNNNetwork{p: unsafe.Pointer(C.CNNNetwork_New(cModelFile, cWeightsFile))}
}
// Close CNNNetwork.
func (n CNNNetwork) Close() error {
n.p = nil
return nil
}
// Size returns the number of nodes in this CNNNetwork.
func (n CNNNetwork) Size() uint32 {
return uint32(C.CNNNetwork_Size((*C.CNNNetwork)(n.p)))
}