123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- package main
- import (
- "fmt"
- "image/color"
- "gocv.io/x/gocv"
- )
- func main() {
- deviceID := 0
- // open webcam
- webcam, err := gocv.OpenVideoCapture(deviceID)
- if err != nil {
- fmt.Println(err)
- return
- }
- defer webcam.Close()
- // open display window
- window := gocv.NewWindow("Face Detect")
- defer window.Close()
- // prepare image matrix
- img := gocv.NewMat()
- defer img.Close()
- // color for the rect when faces detected
- blue := color.RGBA{0, 0, 255, 0}
- // load classifier to recognize faces
- classifier := gocv.NewCascadeClassifier()
- defer classifier.Close()
- if !classifier.Load("data/haarcascade_frontalface_default.xml") {
- fmt.Println("Error reading cascade file: data/haarcascade_frontalface_default.xml")
- return
- }
- fmt.Printf("start reading camera device: %v\n", deviceID)
- for {
- if ok := webcam.Read(&img); !ok {
- fmt.Printf("cannot read device %v\n", deviceID)
- return
- }
- if img.Empty() {
- continue
- }
- // detect faces
- rects := classifier.DetectMultiScale(img)
- fmt.Printf("found %d faces\n", len(rects))
- // draw a rectangle around each face on the original image
- for _, r := range rects {
- gocv.Rectangle(&img, r, blue, 3)
- }
- // show the image in the window, and wait 1 millisecond
- window.IMShow(img)
- window.WaitKey(1)
- }
- }
|