New file |
| | |
| | | package util |
| | | |
| | | import ( |
| | | "fmt" |
| | | "image" |
| | | "image/color" |
| | | |
| | | "gocv.io/x/gocv" |
| | | ) |
| | | |
| | | func CvRTSP() { |
| | | url := `rtsp://admin:a1234567@192.168.1.188:554/h264/ch1/main/av_stream` |
| | | |
| | | webcam, _ := gocv.OpenVideoCapture(url) |
| | | window := gocv.NewWindow("Hello") |
| | | img := gocv.NewMat() |
| | | |
| | | for { |
| | | webcam.Read(&img) |
| | | window.IMShow(img) |
| | | window.WaitKey(1) |
| | | } |
| | | } |
| | | |
| | | func cvFaceDetect() { |
| | | // set to use a video capture device 0 |
| | | deviceID := 0 |
| | | url := `rtsp://admin:a1234567@192.168.1.188:554/h264/ch1/main/av_stream` |
| | | |
| | | // open webcam |
| | | webcam, err := gocv.OpenVideoCapture(url) |
| | | 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) |
| | | } |
| | | } |
| | | |
| | | var w = 400 |
| | | |
| | | // CVDraw demo |
| | | func CVDraw() { |
| | | windowA := gocv.NewWindow("basic drawing: atom") |
| | | windowR := gocv.NewWindow("basic drawing: rook") |
| | | defer windowA.Close() |
| | | defer windowR.Close() |
| | | |
| | | atom := gocv.NewMatWithSize(w, w, gocv.MatTypeCV8UC3) |
| | | defer atom.Close() |
| | | |
| | | rook := gocv.NewMatWithSize(w, w, gocv.MatTypeCV8UC3) |
| | | defer rook.Close() |
| | | |
| | | black := color.RGBA{0, 0, 0, 0} |
| | | blue := color.RGBA{0, 0, 255, 0} |
| | | red := color.RGBA{255, 0, 0, 0} |
| | | white := color.RGBA{255, 255, 255, 0} |
| | | yellow := color.RGBA{255, 255, 0, 0} |
| | | |
| | | // draw the atom |
| | | gocv.Ellipse(&atom, image.Pt(w/2., w/2.), image.Pt(w/4.0, w/16.0), 90., 0, 360, blue, 2) |
| | | gocv.Ellipse(&atom, image.Pt(w/2., w/2.), image.Pt(w/4.0, w/16.0), 0., 0, 360, blue, 2) |
| | | gocv.Ellipse(&atom, image.Pt(w/2., w/2.), image.Pt(w/4.0, w/16.0), 45., 0, 360, blue, 2) |
| | | gocv.Ellipse(&atom, image.Pt(w/2., w/2.), image.Pt(w/4.0, w/16.0), -45., 0, 360, blue, 2) |
| | | gocv.Circle(&atom, image.Pt(w/2., w/2.), w/32., red, -1) |
| | | |
| | | // draw the rook |
| | | points := [][]image.Point{ |
| | | { |
| | | image.Pt(w/4., 7*w/8.), |
| | | image.Pt(3*w/4., 7*w/8.), |
| | | image.Pt(3*w/4., 13*w/16.), |
| | | image.Pt(11*w/16., 13*w/16.), |
| | | image.Pt(19*w/32., 3*w/8.), |
| | | image.Pt(3*w/4., 3*w/8.), |
| | | image.Pt(3*w/4., w/8.), |
| | | image.Pt(26*w/40., w/8.), |
| | | image.Pt(26*w/40., w/4.), |
| | | image.Pt(22*w/40., w/4.), |
| | | image.Pt(22*w/40., w/8.), |
| | | image.Pt(18*w/40., w/8.), |
| | | image.Pt(18*w/40., w/4.), |
| | | image.Pt(14*w/40., w/4.), |
| | | image.Pt(14*w/40., w/8.), |
| | | image.Pt(w/4., w/8.), |
| | | image.Pt(w/4., 3*w/8.), |
| | | image.Pt(13*w/32., 3*w/8.), |
| | | image.Pt(5*w/16., 13*w/16.), |
| | | image.Pt(w/4., 13*w/16.), |
| | | }, |
| | | } |
| | | gocv.FillPoly(&rook, points, white) |
| | | gocv.Rectangle(&rook, image.Rect(0, 7*w/8.0, w, w), yellow, -1) |
| | | gocv.Line(&rook, image.Pt(0, 15*w/16), image.Pt(w, 15*w/16), black, 2) |
| | | gocv.Line(&rook, image.Pt(w/4, 7*w/8), image.Pt(w/4, w), black, 2) |
| | | gocv.Line(&rook, image.Pt(w/2, 7*w/8), image.Pt(w/2, w), black, 2) |
| | | gocv.Line(&rook, image.Pt(3*w/4, 7*w/8), image.Pt(3*w/4, w), black, 2) |
| | | |
| | | for { |
| | | windowA.IMShow(atom) |
| | | windowR.IMShow(rook) |
| | | |
| | | if windowA.WaitKey(10) >= 0 || windowR.WaitKey(10) >= 0 { |
| | | break |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | package util |
| | | |
| | | import ( |
| | | "testing" |
| | | ) |
| | | |
| | | func TestCvRTSP(t *testing.T) { |
| | | CvRTSP() |
| | | } |