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