mirror of
https://github.com/hybridgroup/gocv
synced 2025-08-25 08:41:04 +08:00
Add openvino async
This commit is contained in:

committed by
Ron Evans

parent
938a6796cc
commit
5819b25a38
28
asyncarray.cpp
Normal file
28
asyncarray.cpp
Normal file
@@ -0,0 +1,28 @@
|
||||
// +build openvino
|
||||
|
||||
#include <string.h>
|
||||
#include "asyncarray.h"
|
||||
|
||||
|
||||
// AsyncArray_New creates a new empty AsyncArray
|
||||
AsyncArray AsyncArray_New() {
|
||||
return new cv::AsyncArray();
|
||||
}
|
||||
|
||||
// AsyncArray_Close deletes an existing AsyncArray
|
||||
void AsyncArray_Close(AsyncArray a) {
|
||||
delete a;
|
||||
}
|
||||
|
||||
const char* AsyncArray_GetAsync(AsyncArray async_out,Mat out) {
|
||||
try {
|
||||
async_out->get(*out);
|
||||
} catch(cv::Exception ex) {
|
||||
return ex.err.c_str();
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
AsyncArray Net_forwardAsync(Net net, const char* outputName) {
|
||||
return new cv::AsyncArray(net->forwardAsync(outputName));
|
||||
}
|
52
asyncarray.go
Normal file
52
asyncarray.go
Normal file
@@ -0,0 +1,52 @@
|
||||
// +build openvino
|
||||
|
||||
package gocv
|
||||
|
||||
import (
|
||||
"errors"
|
||||
)
|
||||
|
||||
/*
|
||||
#include <stdlib.h>
|
||||
#include "dnn.h"
|
||||
#include "asyncarray.h"
|
||||
#include "core.h"
|
||||
*/
|
||||
import "C"
|
||||
|
||||
type AsyncArray struct {
|
||||
p C.AsyncArray
|
||||
}
|
||||
|
||||
// NewAsyncArray returns a new empty AsyncArray.
|
||||
func NewAsyncArray() AsyncArray {
|
||||
return newAsyncArray(C.AsyncArray_New())
|
||||
}
|
||||
|
||||
// Ptr returns the AsyncArray's underlying object pointer.
|
||||
func (a *AsyncArray) Ptr() C.AsyncArray {
|
||||
return a.p
|
||||
}
|
||||
|
||||
// Get async returns the Mat
|
||||
func (m *AsyncArray) Get(mat *Mat) error {
|
||||
result := C.AsyncArray_GetAsync(m.p, mat.p)
|
||||
err := C.GoString(result)
|
||||
|
||||
if len(err) > 0 {
|
||||
return errors.New(err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// newAsyncArray returns a new AsyncArray from a C AsyncArray
|
||||
func newAsyncArray(p C.AsyncArray) AsyncArray {
|
||||
return AsyncArray{p: p}
|
||||
}
|
||||
|
||||
// Close the AsyncArray object.
|
||||
func (a *AsyncArray) Close() error {
|
||||
C.AsyncArray_Close(a.p)
|
||||
a.p = nil
|
||||
return nil
|
||||
}
|
23
asyncarray.h
Normal file
23
asyncarray.h
Normal file
@@ -0,0 +1,23 @@
|
||||
#ifdef __cplusplus
|
||||
#include <opencv2/opencv.hpp>
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "core.h"
|
||||
#include "dnn.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
typedef cv::AsyncArray* AsyncArray;
|
||||
#else
|
||||
typedef void* AsyncArray;
|
||||
#endif
|
||||
|
||||
AsyncArray AsyncArray_New();
|
||||
const char* AsyncArray_GetAsync(AsyncArray async_out,Mat out);
|
||||
void AsyncArray_Close(AsyncArray a);
|
||||
AsyncArray Net_forwardAsync(Net net, const char* outputName);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
16
asyncarray_test.go
Normal file
16
asyncarray_test.go
Normal file
@@ -0,0 +1,16 @@
|
||||
// +build openvino
|
||||
|
||||
package gocv
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestAsyncArray(t *testing.T) {
|
||||
asyncarray := NewAsyncArray()
|
||||
defer asyncarray.Close()
|
||||
|
||||
if asyncarray.Ptr() == nil {
|
||||
t.Error("New AsyncArray should not be nil")
|
||||
}
|
||||
}
|
26
dnn_async_openvino.go
Normal file
26
dnn_async_openvino.go
Normal file
@@ -0,0 +1,26 @@
|
||||
// +build openvino
|
||||
|
||||
package gocv
|
||||
|
||||
import (
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
/*
|
||||
#include <stdlib.h>
|
||||
#include "dnn.h"
|
||||
#include "asyncarray.h"
|
||||
*/
|
||||
import "C"
|
||||
|
||||
// ForwardAsync runs forward pass to compute output of layer with name outputName.
|
||||
//
|
||||
// For further details, please see:
|
||||
// https://docs.opencv.org/trunk/db/d30/classcv_1_1dnn_1_1Net.html#a814890154ea9e10b132fec00b6f6ba30
|
||||
//
|
||||
func (net *Net) ForwardAsync(outputName string) AsyncArray {
|
||||
cName := C.CString(outputName)
|
||||
defer C.free(unsafe.Pointer(cName))
|
||||
|
||||
return newAsyncArray(C.Net_forwardAsync((C.Net)(net.p), cName))
|
||||
}
|
Reference in New Issue
Block a user