package main import ( "flag" "fmt" "time" "track/gohumantrack" "track/goconv" "basic.com/valib/goffmpeg.git" ) var ( url1 string url2 string ) func init() { flag.StringVar(&url1, "cam1", "", "url") flag.StringVar(&url2, "cam2", "", "url") } func run(cam1, cam2 *goffmpeg.GoFFMPEG, tracker *gohumantrack.HumanTracker) bool { data1, ow1, oh1, _ := cam1.GetYUV() data2, ow2, oh2, _ := cam2.GetYUV() if ow1 > 0 && oh1 > 0 && ow2 > 0 && oh2 > 0 { bgr1 := goconv.YUV2BGR(data1, ow1, oh1) bgr2 := goconv.YUV2BGR(data2, ow2, oh2) if bgr1 == nil || bgr2 == nil{ return false } var images []gohumantrack.ImageHumanTracker img := gohumantrack.ImageHumanTracker{ Data: bgr1, Width: ow1, Height: oh1, Channel: 3, } images = append(images, img) img = gohumantrack.ImageHumanTracker{ Data: bgr2, Width: ow2, Height: oh2, Channel: 3, } images = append(images, img) res, err := tracker.Process(images) if err == nil { for _, v := range res { fmt.Printf("result size: %d\n", v.FgNum) for i := 0; i < int(v.FgNum); i++ { r := v.Fginfo[i] if r.Confidence > 0 { fmt.Printf(" Index %d Rect: %dx%dx%dx%d", i, r.Left, r.Top, r.Right, r.Bottom) fmt.Printf(" Confidence: %f", r.Confidence*100) fmt.Printf(" Center: %dx%d", r.X, r.Y) fmt.Printf(" ID: %d\n", r.ID) } } } } else { fmt.Println("process error: ", err) } return true } return false } func main() { flag.Parse() fmt.Println("url1: ", url1, " url2: ", url2) if len(url1) == 0 || len(url2) == 0 { fmt.Println("url null") } tracker := gohumantrack.NewHumanTracker(0, 2, 0) fmt.Println("version: ", tracker.GetVersion()) goffmpeg.InitFFmpeg("./runtime/libcffmpeg.so") cam1 := goffmpeg.New(false, false) cam1.Run(url1) cam1.BuildDecoder() cam1.CloseStream() cam2 := goffmpeg.New(false, false) cam2.Run(url2) cam2.BuildDecoder() cam2.CloseStream() for { if !run(cam1, cam2, tracker){ time.Sleep(38 * time.Millisecond) } } tracker.Free() goffmpeg.FreeFFmpeg() }