| | |
| | | "time" |
| | | |
| | | "track/gohumantrack" |
| | | |
| | | "track/goconv" |
| | | "basic.com/valib/goffmpeg.git" |
| | | ) |
| | | |
| | |
| | | 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) |
| | |
| | | cam2.CloseStream() |
| | | |
| | | for { |
| | | data1, ow1, oh1, _ := cam1.GetYUV() |
| | | data2, ow2, oh2, _ := cam2.GetYUV() |
| | | if ow1 > 0 && oh1 > 0 && ow2 > 0 && oh2 > 0 { |
| | | |
| | | var images []gohumantrack.ImageHumanTracker |
| | | img := gohumantrack.ImageHumanTracker{ |
| | | Data: data1, |
| | | Width: ow1, |
| | | Height: oh1, |
| | | Channel: 3, |
| | | } |
| | | images = append(images, img) |
| | | img = gohumantrack.ImageHumanTracker{ |
| | | Data: data2, |
| | | 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) |
| | | } |
| | | } else { |
| | | // fmt.Println("cam1 size: ", ow1, "x", oh1, " cam2 size: ", ow2, "x", oh2) |
| | | if !run(cam1, cam2, tracker){ |
| | | time.Sleep(38 * time.Millisecond) |
| | | } |
| | | |