From 28ce7ab311185202eb188151a8d3d61ed94974be Mon Sep 17 00:00:00 2001 From: panlei <2799247126@qq.com> Date: 星期一, 01 七月 2019 11:27:11 +0800 Subject: [PATCH] 添加一个gocv和一个测试函数 --- util/simpleCV.go | 151 ++++++++++++++++++++++++++++++++++++++++++++++++++ util/simpleCV_test.go | 9 +++ 2 files changed, 160 insertions(+), 0 deletions(-) diff --git a/util/simpleCV.go b/util/simpleCV.go new file mode 100644 index 0000000..05827b1 --- /dev/null +++ b/util/simpleCV.go @@ -0,0 +1,151 @@ +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 + } + } +} diff --git a/util/simpleCV_test.go b/util/simpleCV_test.go new file mode 100644 index 0000000..7030d18 --- /dev/null +++ b/util/simpleCV_test.go @@ -0,0 +1,9 @@ +package util + +import ( + "testing" +) + +func TestCvRTSP(t *testing.T) { + CvRTSP() +} \ No newline at end of file -- Gitblit v1.8.0