package sdk import ( "analysis/logo" "analysis/work" "context" "sync" "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 // EFDetect detect face type EFDetect struct { threads int iGPU int // track faceAngle int dftfacenum int dftinterval int sampleSize int // external track tracker map[string]*fTrackInfo ftrackChans map[string]chan work.MsgRS ftrackChannels map[string]int ftrackChanStats []bool chnLock sync.Mutex } // NewEFDetectWithTrack with track func NewEFDetectWithTrack(gi, thrds, faceNum, faceAngle, interval, samp int) *EFDetect { 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, iGPU: gi, sampleSize: samp, } } // Init impl interface func (e *EFDetect) Init() bool { e.fakeInit() e.cleanChnStat() return true } func (e *EFDetect) fakeInit() { gpu := e.iGPU if gpu == -1 { 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) gosdk.InitFaceProperty(e.threads) gosdk.InitFaceExtractor(e.threads, gpu) logo.Infoln("fextract use gpu: ", gpu) } // Run impl interface func (e *EFDetect) Run(ctx context.Context, in <-chan work.MsgRS, out chan<- work.MsgRS, typ string) { e.detectTrack(ctx, in, out, typ) }