From 2f5f0c75f3257b4ea9c37df6d02e5598b975740f Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期三, 11 十二月 2019 17:10:27 +0800
Subject: [PATCH] copy from VAProcess

---
 work/sdk/fdetect.go |   84 +++++++++++++++++++++++++++++-------------
 1 files changed, 58 insertions(+), 26 deletions(-)

diff --git a/work/sdk/fdetect.go b/work/sdk/fdetect.go
index 6800275..87635b2 100644
--- a/work/sdk/fdetect.go
+++ b/work/sdk/fdetect.go
@@ -4,22 +4,13 @@
 	"analysis/logo"
 	"analysis/work"
 	"context"
+	"plugin"
 	"sync"
 
+	"basic.com/libgowrapper/sdkstruct.git"
+
 	"basic.com/valib/gogpu.git"
-	"basic.com/valib/gosdk.git"
 )
-
-type faceInfo struct {
-	pos  gosdk.CFacePos
-	id   uint64
-	life int
-}
-
-type fTrackInfo struct {
-	lastTrackInfos []faceInfo
-	lastTrackID    uint64
-}
 
 const MaxFaceDetectThreadNum = 32
 
@@ -29,32 +20,63 @@
 	iGPU    int
 
 	// track
-	faceAngle   int
-	dftfacenum  int
-	dftinterval int
-	sampleSize  int
-
-	// external track
-	tracker map[string]*fTrackInfo
+	faceAngle  int
+	faceNum    int
+	interval   int
+	sampleSize int
 
 	ftrackChans     map[string]chan work.MsgRS
 	ftrackChannels  map[string]int
 	ftrackChanStats []bool
 	chnLock         sync.Mutex
+
+	handle          interface{}
+	fnInit          func() interface{}
+	fnFree          func(interface{})
+	fnRun           func(interface{}, []byte, int, int, int, int) []sdkstruct.CFaceResult
+	fnTrackerResize func(interface{}, int, int, int) bool
+	fnExtractor     func(interface{}, int, int) bool
+	fnPropertizer   func(interface{}, int) bool
+	fnTracker       func(interface{}, int, int, int, int, int, int, int) bool
 }
 
 // NewEFDetectWithTrack with track
 func NewEFDetectWithTrack(gi, thrds, faceNum, faceAngle, interval, samp int) *EFDetect {
+	soFile := "libface.so"
+
+	plug, err := plugin.Open(soFile)
+	if err != nil {
+		logo.Errorln("Open: ", soFile, " error: ", err)
+		return nil
+	}
+
+	fnInit, _ := LoadFunc(plug, soFile, "NewSDK")
+	fnFree, _ := LoadFunc(plug, soFile, "Free")
+	fnRun, _ := LoadFunc(plug, soFile, "Run")
+	fnTrackerResize, _ := LoadFunc(plug, soFile, "TrackerResize")
+	fnExtractor, _ := LoadFunc(plug, soFile, "Extractor")
+	fnPropertizer, _ := LoadFunc(plug, soFile, "Propertizer")
+	fnTracker, _ := LoadFunc(plug, soFile, "Tracker")
+
 	return &EFDetect{
 		threads:         thrds,
 		faceAngle:       faceAngle,
 		ftrackChans:     make(map[string]chan work.MsgRS, MaxFaceDetectThreadNum),
 		ftrackChannels:  make(map[string]int, MaxFaceDetectThreadNum),
 		ftrackChanStats: make([]bool, MaxFaceDetectThreadNum, MaxFaceDetectThreadNum),
-		dftfacenum:      faceNum,
-		dftinterval:     interval,
+		faceNum:         faceNum,
+		interval:        interval,
 		iGPU:            gi,
 		sampleSize:      samp,
+
+		handle:          nil,
+		fnInit:          fnInit.(func() interface{}),
+		fnFree:          fnFree.(func(interface{})),
+		fnRun:           fnRun.(func(interface{}, []byte, int, int, int, int) []sdkstruct.CFaceResult),
+		fnTrackerResize: fnTrackerResize.(func(interface{}, int, int, int) bool),
+		fnExtractor:     fnExtractor.(func(interface{}, int, int) bool),
+		fnPropertizer:   fnPropertizer.(func(interface{}, int) bool),
+		fnTracker:       fnTracker.(func(interface{}, int, int, int, int, int, int, int) bool),
 	}
 }
 
@@ -75,12 +97,22 @@
 		gpu = gogpu.ValidGPU(2048)
 	}
 
-	gosdk.InitFaceTracker(e.threads, gpu, 1280, 720, e.dftfacenum, e.dftinterval, e.sampleSize) // i not work
-	logo.Infoln("ftrack use gpu: ", gpu)
+	e.handle = e.fnInit()
 
-	gosdk.InitFaceProperty(e.threads)
-	gosdk.InitFaceExtractor(e.threads, gpu)
-	logo.Infoln("fextract use gpu: ", gpu)
+	if !e.fnTracker(e.handle, 1280, 720, e.faceNum, e.interval, e.sampleSize, e.threads, gpu) {
+		logo.Errorln("FACE TRACKER CREATE ERROR")
+	}
+	logo.Infoln("Face Tracker Use GPU: ", gpu)
+
+	if !e.fnPropertizer(e.handle, e.threads) {
+		logo.Errorln("FACE PROPERTIZER CREATE ERROR")
+	}
+
+	if !e.fnExtractor(e.handle, e.threads, gpu) {
+		logo.Errorln("FACE EXTRACTOR CREATE ERROR")
+	}
+
+	logo.Infoln("Face Extractor Use GPU: ", gpu)
 }
 
 // Run impl interface

--
Gitblit v1.8.0