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()
|
}
|