From 0ffd95f2278e860736e46f8b73f357470f5a3d91 Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期三, 15 一月 2020 17:56:18 +0800
Subject: [PATCH] debug

---
 goface.go |  115 ++++++++++++++++++++++++++-------------------------------
 1 files changed, 53 insertions(+), 62 deletions(-)

diff --git a/goface.go b/goface.go
index 7ac9122..79689bb 100644
--- a/goface.go
+++ b/goface.go
@@ -22,7 +22,6 @@
 
 // SDKFace sdk
 type SDKFace struct {
-	handle      unsafe.Pointer
 	detector    bool
 	extractor   bool
 	propertizer bool
@@ -32,13 +31,8 @@
 
 // NewSDK sdk
 func NewSDK(fn func(...interface{})) *SDKFace {
-	h := C.create_sdkface()
-	if h == nil {
-		return nil
-	}
 
 	return &SDKFace{
-		handle:      h,
 		detector:    false,
 		extractor:   false,
 		propertizer: false,
@@ -49,9 +43,7 @@
 
 // Free free
 func (s *SDKFace) Free() {
-	if s != nil && s.handle != nil {
-		C.release(s.handle)
-	}
+	C.c_api_release()
 }
 
 func (s *SDKFace) printLog(l ...interface{}) {
@@ -61,16 +53,20 @@
 }
 
 // Detector detector
-func (s *SDKFace) Detector(minFaces, rollAngles, threadMax, gpu int) bool {
+func (s *SDKFace) Detector(minFaces, rollAngle, threadMax, gpu int) bool {
 
 	if s.detector {
 		return true
 	}
-	ret := C.init_detector(s.handle, C.int(minFaces), C.int(rollAngles), C.int(threadMax), C.int(gpu))
+
+	ret := C.c_api_face_detector_init(C.int(threadMax), C.int(gpu), C.int(minFaces), C.int(rollAngle))
+
 	if ret <= 0 {
 		s.printLog("->face--> CREATE Detector ERROR: ", ret)
 		return false
 	}
+	s.printLog("->face--> CREATE Detector Threads: ", threadMax, " GPU:", gpu)
+
 	s.detector = true
 	return true
 }
@@ -81,11 +77,13 @@
 	if s.extractor {
 		return true
 	}
-	ret := C.init_extractor(s.handle, C.int(threadMax), C.int(gpu))
+	ret := C.c_api_face_extractor_init(C.int(threadMax), C.int(gpu))
 	if ret <= 0 {
 		s.printLog("->face--> CREATE Extractor ERROR: ", ret)
 		return false
 	}
+	s.printLog("->face--> CREATE Extractor Threads: ", threadMax, " GPU:", gpu)
+
 	s.extractor = true
 	return true
 }
@@ -96,11 +94,13 @@
 	if s.propertizer {
 		return true
 	}
-	ret := C.init_propertizer(s.handle, C.int(threadMax))
+	ret := C.c_api_face_property_init(C.int(threadMax))
 	if ret <= 0 {
 		s.printLog("->face--> CREATE Propertizer ERROR: ", ret)
 		return false
 	}
+	s.printLog("->face--> CREATE Propertizer Threads: ", threadMax)
+
 	s.propertizer = true
 	return true
 }
@@ -109,10 +109,9 @@
 func (s *SDKFace) Tracker(w, h, maxFaces, interval, sampleSize, threadMax, gpu int) bool {
 
 	if s.tracker {
-		return s.tracker
+		return true
 	}
-	ret := C.init_tracker(s.handle, C.int(w), C.int(h), C.int(maxFaces), C.int(interval), C.int(sampleSize), C.int(threadMax), C.int(gpu))
-
+	ret := C.c_api_face_tracker_init(C.int(threadMax), C.int(gpu), C.int(w), C.int(h), C.int(maxFaces), C.int(interval), C.int(sampleSize))
 	if ret <= 0 {
 		s.printLog("->face--> CREATE Tracker ERROR: ", ret)
 		return false
@@ -141,29 +140,36 @@
 		return nil
 	}
 
-	var cfpos unsafe.Pointer
 	var count C.int
-	ret := C.detect(s.handle, unsafe.Pointer(&data[0]), C.int(w), C.int(h), C.int(c), C.int(ch), &cfpos, &count)
-	if ret > 0 {
-		return CFacePosArrayToGoArray(cfpos, int(count))
+	cfpos := C.c_api_face_detect(&count, (*C.uchar)(unsafe.Pointer(&data[0])), C.int(w), C.int(h), C.int(ch))
+	if cfpos != nil {
+		defer C.free(unsafe.Pointer(cfpos))
+		return CFacePosArrayToGoArray(unsafe.Pointer(cfpos), int(count))
 	}
-	s.printLog("->face--> Detect No One, Ret: ", ret)
+
+	s.printLog("->face--> Detect No One")
 	return nil
 }
 
 // Extract extract
 func (s *SDKFace) Extract(fpos sdkstruct.CFacePos, data []byte, w, h, c int, ch int) []byte {
-
-	pos := (*C.cFacePos)(unsafe.Pointer(&fpos))
-
-	//(void *handle, const cFacePos *pos, const void*data, const int w, const int h, const int c, const int chan, void **feat, int *featLen);
-	var feat unsafe.Pointer
-	var featLen C.int
-	ret := C.extract(s.handle, pos, unsafe.Pointer(&data[0]), C.int(w), C.int(h), C.int(c), C.int(ch), &feat, &featLen)
-	if ret > 0 {
-		return C.GoBytes(feat, featLen)
+	if !s.extractor {
+		return nil
 	}
-	s.printLog("->face--> Extract Nothing, Ret: ", ret)
+	s.printLog("->face--> facepos: ", fpos)
+
+	var featLen C.int
+	pos := (*C.cFacePos)(unsafe.Pointer(&fpos))
+	if pos == nil {
+		return nil
+	}
+
+	p := C.c_api_face_extract(&featLen, pos, (*C.uchar)(unsafe.Pointer(&data[0])), C.int(w), C.int(h), C.int(ch))
+	if p != nil {
+		defer C.free(unsafe.Pointer(p))
+		return C.GoBytes(unsafe.Pointer(p), featLen)
+	}
+	s.printLog("->face--> Extract Nothing")
 	return nil
 }
 
@@ -174,27 +180,20 @@
 		return 0
 	}
 
-	res := C.compare(s.handle, (*C.uchar)(unsafe.Pointer(&feat1[0])), (*C.uchar)(unsafe.Pointer(&feat2[0])))
+	res := C.c_api_face_compare((*C.uchar)(unsafe.Pointer(&feat1[0])), (*C.uchar)(unsafe.Pointer(&feat2[0])))
 	return float32(res)
 }
 
 // Propertize prop
-func (s *SDKFace) Propertize(fpos sdkstruct.CFacePos, data []byte, w, h, c int, ch int) *sdkstruct.CThftResult {
+func (s *SDKFace) Propertize(fpos sdkstruct.CFacePos, data []byte, w, h, c int, ch int) sdkstruct.CThftResult {
 	if !s.propertizer {
-		return nil
+		return sdkstruct.CThftResult{Age: 0}
 	}
 
 	pos := (*C.cFacePos)(unsafe.Pointer(&fpos))
-
-	var thft unsafe.Pointer
-	ret := C.propertize(s.handle, pos, unsafe.Pointer(&data[0]), C.int(w), C.int(h), C.int(c), C.int(ch), &thft)
-	if ret == 0 {
-		gothft := *(*sdkstruct.CThftResult)(thft)
-		C.free(thft)
-		return &gothft
-	}
-	s.printLog("->face--> Propertize Nothing, Ret: ", ret)
-	return nil
+	result := C.c_api_face_property(pos, (*C.uchar)(unsafe.Pointer(&data[0])), C.int(w), C.int(h), C.int(ch))
+	s.printLog("->face--> Propertize")
+	return *(*sdkstruct.CThftResult)(unsafe.Pointer(&result))
 }
 
 // CFaceInfoArrayToGoArray convert cFaceInfo array to go
@@ -218,17 +217,14 @@
 	//img, const int chan, void **fInfo, int *fcnt);
 
 	var fCount C.int
-	var finfos unsafe.Pointer
-	ret := C.track(s.handle, unsafe.Pointer(&data[0]), C.int(w), C.int(h), C.int(c), C.int(ch), &finfos, &fCount)
-
-	if ret > 0 {
-		faces := CFaceInfoArrayToGoArray(finfos, int(fCount))
-		//if len(faces) > 0{
-		// fmt.Println("faces detected:", len(faces))
-		//}
-		return faces
+	cFinfo := C.c_api_face_track(&fCount, (*C.uchar)(unsafe.Pointer(&data[0])), C.int(w), C.int(h), C.int(ch))
+	// fmt.Println("cFinfo detected:", cFinfo)
+	if cFinfo == nil {
+		return nil
 	}
-	return nil
+	defer C.free(unsafe.Pointer(cFinfo))
+	faces := CFaceInfoArrayToGoArray(unsafe.Pointer(cFinfo), int(fCount))
+	return faces
 }
 
 // FaceInfo2FacePos info -> pos
@@ -249,18 +245,13 @@
 }
 
 // TrackerResize init face tracker
-func (s *SDKFace) TrackerResize(w, h, ch int) bool {
+func (s *SDKFace) TrackerResize(w, h, ch int) int {
 
 	if !s.tracker {
 		s.printLog("->face--> TrackerResize Failed, No Tracker Init")
-		return false
+		return -1
 	}
-	ret := C.track_resize(s.handle, C.int(w), C.int(h), C.int(ch))
-	if ret == 1 {
-		return true
-	}
-	s.printLog("->face--> TrackerResize Failed, Ret: ", ret, " SDK Channel: ", ch, " Size: ", w, "x", h)
-	return false
+	return int(C.c_api_face_track_resize(C.int(ch), C.int(w), C.int(h)))
 }
 
 // Run run

--
Gitblit v1.8.0