From 6962f568ea29152d0b8ca344a0c8e755afeaf17a Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期一, 13 一月 2020 12:11:45 +0800
Subject: [PATCH] debug

---
 goface.go |   97 +++++++++++++++++++-----------------------------
 1 files changed, 38 insertions(+), 59 deletions(-)

diff --git a/goface.go b/goface.go
index 7ac9122..16b840a 100644
--- a/goface.go
+++ b/goface.go
@@ -8,7 +8,7 @@
 #cgo LDFLAGS: -lTHFaceImage -lTHFeature -lTHFaceProperty -lTHFaceTracking
 #cgo LDFLAGS: -lcudart -lcublas -lcurand -lrt -ldl -lpthread
 #include <stdlib.h>
-#include "cface.h"
+#include "csdk.h"
 */
 import "C"
 import (
@@ -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,12 +53,14 @@
 }
 
 // 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
@@ -81,7 +75,7 @@
 	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
@@ -96,7 +90,7 @@
 	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
@@ -111,8 +105,7 @@
 	if s.tracker {
 		return s.tracker
 	}
-	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,30 +134,31 @@
 		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 {
+	if !s.extractor {
+		return nil
+	}
 
+	var featLen C.int
 	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)
-	}
-	s.printLog("->face--> Extract Nothing, Ret: ", ret)
-	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))
+	defer C.free(unsafe.Pointer(p))
+	b := C.GoBytes(unsafe.Pointer(p), featLen)
+	s.printLog("->face--> Extract Nothing, Ret: ", len(b))
+	return b
 }
 
 // Compare face compare
@@ -174,7 +168,7 @@
 		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)
 }
 
@@ -185,16 +179,9 @@
 	}
 
 	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 +205,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 +233,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