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  }