gobot.io/x/gobot/v2@v2.1.0/examples/opencv_face_detect.go (about) 1 //go:build example 2 // +build example 3 4 // 5 // Do not build by default. 6 7 package main 8 9 import ( 10 "path" 11 "runtime" 12 "sync/atomic" 13 "time" 14 15 "gobot.io/x/gobot/v2" 16 "gobot.io/x/gobot/v2/platforms/opencv" 17 "gocv.io/x/gocv" 18 ) 19 20 var img atomic.Value 21 22 func main() { 23 _, currentfile, _, _ := runtime.Caller(0) 24 cascade := path.Join(path.Dir(currentfile), "haarcascade_frontalface_alt.xml") 25 26 window := opencv.NewWindowDriver() 27 camera := opencv.NewCameraDriver(1) 28 29 work := func() { 30 mat := gocv.NewMat() 31 img.Store(mat) 32 33 camera.On(opencv.Frame, func(data interface{}) { 34 i := data.(gocv.Mat) 35 img.Store(i) 36 }) 37 38 gobot.Every(10*time.Millisecond, func() { 39 i := img.Load().(gocv.Mat) 40 if i.Empty() { 41 return 42 } 43 faces := opencv.DetectObjects(cascade, i) 44 opencv.DrawRectangles(i, faces, 0, 255, 0, 5) 45 window.ShowImage(i) 46 window.WaitKey(1) 47 }) 48 } 49 50 robot := gobot.NewRobot("faceBot", 51 []gobot.Connection{}, 52 []gobot.Device{window, camera}, 53 work, 54 ) 55 56 robot.Start() 57 }